VirtualBox

Changeset 40652 in vbox


Ignore:
Timestamp:
Mar 26, 2012 4:36:16 PM (13 years ago)
Author:
vboxsync
Message:

NetShaper,E1000: Basic framework and partial implementation for network shaper

Location:
trunk
Files:
3 added
15 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/log.h

    r40383 r40652  
    260260    /** The common network service group */
    261261    LOG_GROUP_NET_SERVICE,
     262    /** Network traffic shaper driver group. */
     263    LOG_GROUP_NET_SHAPER,
    262264    /** PATM group. */
    263265    LOG_GROUP_PATM,
     
    491493    "NET_FLT_DRV",  \
    492494    "NET_SERVICE",  \
     495    "NET_SHAPER",   \
    493496    "PATM",         \
    494497    "PDM",          \
  • trunk/include/VBox/vmm/mm.h

    r39078 r40652  
    101101    MM_TAG_PDM_USB_USER,
    102102    MM_TAG_PDM_LUN,
     103#ifdef VBOX_WITH_NETSHAPER
     104    MM_TAG_PDM_NET_SHAPER,
     105#endif /* VBOX_WITH_NETSHAPER */
    103106    MM_TAG_PDM_QUEUE,
    104107    MM_TAG_PDM_THREAD,
  • trunk/include/VBox/vmm/pdmdrv.h

    r40416 r40652  
    3434#include <VBox/vmm/pdmcommon.h>
    3535#include <VBox/vmm/pdmasynccompletion.h>
     36#ifdef VBOX_WITH_NETSHAPER
     37#include <VBox/vmm/pdmnetshaper.h>
     38#endif /* VBOX_WITH_NETSHAPER */
    3639#include <VBox/vmm/pdmblkcache.h>
    3740#include <VBox/vmm/tm.h>
     
    11651168                                                                const char *pszDesc));
    11661169
     1170#ifdef VBOX_WITH_NETSHAPER
     1171    /**
     1172     * Attaches network filter driver to a bandwidth group.
     1173     *
     1174     * @returns VBox status code.
     1175     * @param   pDrvIns         The driver instance.
     1176     * @param   pcszBwGroup     Name of the bandwidth group to attach to.
     1177     * @param   pFilter         Pointer to the filter we attach.
     1178     */
     1179    DECLR3CALLBACKMEMBER(int, pfnNetShaperAttach,(PPDMDRVINS pDrvIns, const char *pszBwGroup,
     1180                                                  PPDMNSFILTER pFilter));
     1181
     1182
     1183    /**
     1184     * Detaches network filter driver to a bandwidth group.
     1185     *
     1186     * @returns VBox status code.
     1187     * @param   pDrvIns         The driver instance.
     1188     * @param   pFilter         Pointer to the filter we attach.
     1189     */
     1190    DECLR3CALLBACKMEMBER(int, pfnNetShaperDetach,(PPDMDRVINS pDrvIns, PPDMNSFILTER pFilter));
     1191#endif /* VBOX_WITH_NETSHAPER */
     1192
    11671193
    11681194    /**
     
    17041730# endif
    17051731
     1732# ifdef VBOX_WITH_NETSHAPER
     1733/**
     1734 * @copydoc PDMDRVHLP::pfnNetShaperAttach
     1735 */
     1736DECLINLINE(int) PDMDrvHlpNetShaperAttach(PPDMDRVINS pDrvIns, const char *pcszBwGroup, PPDMNSFILTER pFilter)
     1737{
     1738    return pDrvIns->pHlpR3->pfnNetShaperAttach(pDrvIns, pcszBwGroup, pFilter);
     1739}
     1740
     1741/**
     1742 * @copydoc PDMDRVHLP::pfnNetShaperDetach
     1743 */
     1744DECLINLINE(int) PDMDrvHlpNetShaperDetach(PPDMDRVINS pDrvIns, PPDMNSFILTER pFilter)
     1745{
     1746    return pDrvIns->pHlpR3->pfnNetShaperDetach(pDrvIns, pFilter);
     1747}
     1748# endif
     1749
    17061750/**
    17071751 * @copydoc PDMDRVHLP::pfnCritSectInit
  • trunk/src/VBox/Devices/Makefile.kmk

    r40638 r40652  
    391391 endif
    392392
     393 ifdef VBOX_WITH_NETSHAPER
     394  VBoxDD_DEFS           += VBOX_WITH_NETSHAPER
     395  VBoxDD_SOURCES        += \
     396        Network/DrvNetShaper.cpp
     397 endif
     398
    393399 # --- Storage bits. ---
    394400
  • trunk/src/VBox/Devices/Network/DevE1000.cpp

    r40282 r40652  
    184184
    185185#define STATUS_LU       0x00000002
     186#define STATUS_TXOFF    0x00000010
    186187
    187188#define EECD_EE_WIRES 0x0F
     
    31133114        int rc = pDrv->pfnAllocBuf(pDrv, cbMin, fGso ? &pState->GsoCtx : NULL, &pSg);
    31143115        if (RT_FAILURE(rc))
     3116        {
     3117            /* Suspend TX as we are out of buffers atm */
     3118            STATUS |= STATUS_TXOFF;
    31153119            return rc;
     3120        }
    31163121    }
    31173122    else
     
    36423647 * @thread  E1000_TX
    36433648 */
    3644 static void e1kXmitDesc(E1KSTATE* pState, E1KTXDESC* pDesc, RTGCPHYS addr, bool fOnWorkerThread)
    3645 {
     3649static int e1kXmitDesc(E1KSTATE* pState, E1KTXDESC* pDesc, RTGCPHYS addr, bool fOnWorkerThread)
     3650{
     3651    int rc = VINF_SUCCESS;
    36463652    uint32_t cbVTag = 0;
    36473653
     
    37313737                E1kLog3(("%s About to allocate TX buffer: cbVTag=%u\n", INSTANCE(pState), cbVTag));
    37323738                if (e1kCanDoGso(&pState->GsoCtx, &pDesc->data, &pState->contextTSE))
    3733                     e1kXmitAllocBuf(pState, pState->contextTSE.dw2.u20PAYLEN + pState->contextTSE.dw3.u8HDRLEN + cbVTag,
     3739                    rc = e1kXmitAllocBuf(pState, pState->contextTSE.dw2.u20PAYLEN + pState->contextTSE.dw3.u8HDRLEN + cbVTag,
    37343740                                    true /*fExactSize*/, true /*fGso*/);
     3741                else if (pDesc->data.cmd.fTSE)
     3742                    rc = e1kXmitAllocBuf(pState, pState->contextTSE.dw3.u16MSS + pState->contextTSE.dw3.u8HDRLEN + cbVTag,
     3743                                         pDesc->data.cmd.fTSE  /*fExactSize*/, false /*fGso*/);
    37353744                else
    3736                     e1kXmitAllocBuf(pState, pState->contextTSE.dw3.u16MSS + pState->contextTSE.dw3.u8HDRLEN + cbVTag,
    3737                                     pDesc->data.cmd.fTSE  /*fExactSize*/, false /*fGso*/);
     3745                    rc = e1kXmitAllocBuf(pState, pDesc->data.cmd.u20DTALEN + cbVTag,
     3746                                         pDesc->data.cmd.fEOP  /*fExactSize*/, false /*fGso*/);
     3747
     3748                /**
     3749                 * @todo: Perhaps it is not that simple for GSO packets! We may
     3750                 * need to unwind some changes.
     3751                 */
     3752                if (RT_FAILURE(rc))
     3753                {
     3754                    STAM_PROFILE_ADV_STOP(&pState->CTX_SUFF_Z(StatTransmit), a);
     3755                    break;
     3756                }
    37383757                /** @todo Is there any way to indicating errors other than collisions? Like
    37393758                 *        VERR_NET_DOWN. */
     
    38253844                E1kLog3(("%s About to allocate TX buffer: cbVTag=%u\n", INSTANCE(pState), cbVTag));
    38263845                /** @todo reset status bits? */
    3827                 e1kXmitAllocBuf(pState, pDesc->legacy.cmd.u16Length + cbVTag, pDesc->legacy.cmd.fEOP, false /*fGso*/);
     3846                rc = e1kXmitAllocBuf(pState, pDesc->legacy.cmd.u16Length + cbVTag, pDesc->legacy.cmd.fEOP, false /*fGso*/);
     3847                if (RT_FAILURE(rc))
     3848                {
     3849                    STAM_PROFILE_ADV_STOP(&pState->CTX_SUFF_Z(StatTransmit), a);
     3850                    break;
     3851                }
     3852
    38283853                /** @todo Is there any way to indicating errors other than collisions? Like
    38293854                 *        VERR_NET_DOWN. */
     
    38613886            break;
    38623887    }
     3888
     3889    return rc;
    38633890}
    38643891
     
    39003927
    39013928            e1kLoadDesc(pState, &desc, ((uint64_t)TDBAH << 32) + TDBAL + TDH * sizeof(desc));
    3902             e1kXmitDesc(pState, &desc, ((uint64_t)TDBAH << 32) + TDBAL + TDH * sizeof(desc), fOnWorkerThread);
     3929            rc = e1kXmitDesc(pState, &desc, ((uint64_t)TDBAH << 32) + TDBAL + TDH * sizeof(desc), fOnWorkerThread);
     3930            /* If we failed to transmit descriptor we will try it again later */
     3931            if (RT_FAILURE(rc))
     3932                break;
    39033933            if (++TDH * sizeof(desc) >= TDLEN)
    39043934                TDH = 0;
     
    39353965{
    39363966    E1KSTATE *pState = RT_FROM_MEMBER(pInterface, E1KSTATE, INetworkDown);
     3967    /* Resume suspended transmission */
     3968    STATUS &= ~STATUS_TXOFF;
    39373969    e1kXmitPending(pState, true /*fOnWorkerThread*/);
    39383970}
  • trunk/src/VBox/Devices/build/VBoxDD.cpp

    r40591 r40652  
    257257    if (RT_FAILURE(rc))
    258258        return rc;
     259#ifdef VBOX_WITH_NETSHAPER
     260    rc = pCallbacks->pfnRegister(pCallbacks, &g_DrvNetShaper);
     261    if (RT_FAILURE(rc))
     262        return rc;
     263#endif /* VBOX_WITH_NETSHAPER */
    259264    rc = pCallbacks->pfnRegister(pCallbacks, &g_DrvAUDIO);
    260265    if (RT_FAILURE(rc))
  • trunk/src/VBox/Devices/build/VBoxDD.h

    r38913 r40652  
    111111extern const PDMDRVREG g_DrvDedicatedNic;
    112112extern const PDMDRVREG g_DrvNAT;
     113#ifdef VBOX_WITH_NETSHAPER
     114extern const PDMDRVREG g_DrvNetShaper;
     115#endif /* VBOX_WITH_NETSHAPER */
    113116extern const PDMDRVREG g_DrvNetSniffer;
    114117extern const PDMDRVREG g_DrvAUDIO;
  • trunk/src/VBox/Main/src-client/ConsoleImpl2.cpp

    r40633 r40652  
    10201020        InsertConfigNode(pAc,  "File", &pAcFile);
    10211021        InsertConfigNode(pAcFile,  "BwGroups", &pAcFileBwGroups);
     1022#ifdef VBOX_WITH_NETSHAPER
     1023        PCFGMNODE pNetworkShaper;
     1024        PCFGMNODE pNetworkBwGroups;
     1025
     1026        InsertConfigNode(pPDM, "NetworkShaper",  &pNetworkShaper);
     1027        InsertConfigNode(pNetworkShaper, "BwGroups", &pNetworkBwGroups);
     1028#endif /* VBOX_WITH_NETSHAPER */
    10221029
    10231030        for (size_t i = 0; i < bwGroups.size(); i++)
     
    10391046                InsertConfigInteger(pBwGroup, "Step", 0);
    10401047            }
     1048#ifdef VBOX_WITH_NETSHAPER
     1049            else if (enmType == BandwidthGroupType_Network)
     1050            {
     1051                /* Network bandwidth groups. */
     1052                PCFGMNODE pBwGroup;
     1053                InsertConfigNode(pNetworkBwGroups, Utf8Str(strName).c_str(), &pBwGroup);
     1054                InsertConfigInteger(pBwGroup, "Max", cMaxMbPerSec * 1000); // @todo: _1M);
     1055            }
     1056#endif /* VBOX_WITH_NETSHAPER */
    10411057        }
    10421058
     
    36783694        }
    36793695
    3680         Utf8Str strNetDriver;
    3681         if (fAttachDetach && fSniffer)
    3682         {
    3683             const char *pszNetDriver = "IntNet";
    3684             if (meAttachmentType[uInstance] == NetworkAttachmentType_NAT)
    3685                 pszNetDriver = "NAT";
    3686 #if !defined(VBOX_WITH_NETFLT) && defined(RT_OS_LINUX)
    3687             if (meAttachmentType[uInstance] == NetworkAttachmentType_Bridged)
    3688                 pszNetDriver = "HostInterface";
    3689 #endif
    3690             if (meAttachmentType[uInstance] == NetworkAttachmentType_Generic)
    3691             {
    3692                 hrc = aNetworkAdapter->COMGETTER(GenericDriver)(bstr.asOutParam()); H();
    3693                 strNetDriver = bstr;
    3694                 pszNetDriver = strNetDriver.c_str();
    3695             }
    3696 
    3697             rc = PDMR3DriverDetach(pVM, pszDevice, uInstance, uLun, pszNetDriver, 0, 0 /*fFlags*/);
    3698             if (rc == VINF_PDM_NO_DRIVER_ATTACHED_TO_LUN)
    3699                 rc = VINF_SUCCESS;
    3700             AssertLogRelRCReturn(rc, rc);
    3701 
    3702             pLunL0 = CFGMR3GetChildF(pInst, "LUN#%u", uLun);
    3703             PCFGMNODE pLunAD = CFGMR3GetChildF(pLunL0, "AttachedDriver");
    3704             if (pLunAD)
    3705             {
    3706                 CFGMR3RemoveNode(pLunAD);
    3707             }
    3708             else
    3709             {
    3710                 CFGMR3RemoveNode(pLunL0);
    3711                 InsertConfigNode(pInst, "LUN#0", &pLunL0);
    3712                 InsertConfigString(pLunL0, "Driver", "NetSniffer");
    3713                 InsertConfigNode(pLunL0, "Config", &pCfg);
    3714                 hrc = aNetworkAdapter->COMGETTER(TraceFile)(bstr.asOutParam());             H();
    3715                 if (!bstr.isEmpty()) /* check convention for indicating default file. */
    3716                     InsertConfigString(pCfg, "File", bstr);
    3717             }
    3718         }
    3719         else if (fAttachDetach && !fSniffer)
     3696        if (fAttachDetach)
    37203697        {
    37213698            rc = PDMR3DeviceDetach(pVM, pszDevice, uInstance, uLun, 0 /*fFlags*/);
     
    37273704            CFGMR3RemoveNode(CFGMR3GetChildF(pInst, "LUN#%u", uLun));
    37283705        }
    3729         else if (!fAttachDetach && fSniffer)
     3706
     3707#ifdef VBOX_WITH_NETSHAPER
     3708        ComObjPtr<IBandwidthGroup> pBwGroup;
     3709        Bstr strBwGroup;
     3710        PNETSHAPER pShaper = NULL;
     3711        PNETSHAPERFILTER pFilter = NULL;
     3712        hrc = aNetworkAdapter->COMGETTER(BandwidthGroup)(pBwGroup.asOutParam());            H();
     3713
     3714        if (!pBwGroup.isNull())
    37303715        {
    3731             /* insert the sniffer filter driver. */
    3732             InsertConfigNode(pInst, "LUN#0", &pLunL0);
     3716            hrc = pBwGroup->COMGETTER(Name)(strBwGroup.asOutParam());                       H();
     3717        }
     3718#endif /* VBOX_WITH_NETSHAPER */
     3719
     3720        Utf8Str strNetDriver;
     3721
     3722
     3723        InsertConfigNode(pInst, "LUN#0", &pLunL0);
     3724
     3725#ifdef VBOX_WITH_NETSHAPER
     3726        if (!strBwGroup.isEmpty())
     3727        {
     3728            InsertConfigString(pLunL0, "Driver", "NetShaper");
     3729            InsertConfigNode(pLunL0, "Config", &pCfg);
     3730            InsertConfigString(pCfg, "BwGroup", strBwGroup);
     3731            InsertConfigNode(pLunL0, "AttachedDriver", &pLunL0);
     3732        }
     3733#endif /* VBOX_WITH_NETSHAPER */
     3734
     3735        if (fSniffer)
     3736        {
    37333737            InsertConfigString(pLunL0, "Driver", "NetSniffer");
    37343738            InsertConfigNode(pLunL0, "Config", &pCfg);
    3735             hrc = aNetworkAdapter->COMGETTER(TraceFile)(bstr.asOutParam());                 H();
     3739            hrc = aNetworkAdapter->COMGETTER(TraceFile)(bstr.asOutParam());             H();
    37363740            if (!bstr.isEmpty()) /* check convention for indicating default file. */
    37373741                InsertConfigString(pCfg, "File", bstr);
     3742            InsertConfigNode(pLunL0, "AttachedDriver", &pLunL0);
    37383743        }
     3744
    37393745
    37403746        Bstr networkName, trunkName, trunkType;
     
    37503756                ComPtr<INATEngine> natDriver;
    37513757                hrc = aNetworkAdapter->COMGETTER(NatDriver)(natDriver.asOutParam());        H();
    3752                 if (fSniffer)
    3753                     InsertConfigNode(pLunL0, "AttachedDriver", &pLunL0);
    3754                 else
    3755                     InsertConfigNode(pInst, "LUN#0", &pLunL0);
    37563758                InsertConfigString(pLunL0, "Driver", "NAT");
    37573759                InsertConfigNode(pLunL0, "Config", &pCfg);
     
    39183920                if ((int)maTapFD[uInstance] >= 0)
    39193921                {
    3920                     if (fSniffer)
    3921                     {
    3922                         InsertConfigNode(pLunL0, "AttachedDriver", &pLunL0);
    3923                     }
    3924                     else
    3925                     {
    3926                         InsertConfigNode(pInst, "LUN#0", &pLunL0);
    3927                     }
    39283922                    InsertConfigString(pLunL0, "Driver", "HostInterface");
    39293923                    InsertConfigNode(pLunL0, "Config", &pCfg);
     
    39353929                 * This is the new VBoxNetFlt+IntNet stuff.
    39363930                 */
    3937                 if (fSniffer)
    3938                 {
    3939                     InsertConfigNode(pLunL0, "AttachedDriver", &pLunL0);
    3940                 }
    3941                 else
    3942                 {
    3943                     InsertConfigNode(pInst, "LUN#0", &pLunL0);
    3944                 }
    3945 
    39463931                Bstr BridgedIfName;
    39473932                hrc = aNetworkAdapter->COMGETTER(BridgedInterface)(BridgedIfName.asOutParam());
     
    43454330                if (!bstr.isEmpty())
    43464331                {
    4347                     if (fSniffer)
    4348                         InsertConfigNode(pLunL0, "AttachedDriver", &pLunL0);
    4349                     else
    4350                         InsertConfigNode(pInst, "LUN#0", &pLunL0);
    43514332                    InsertConfigString(pLunL0, "Driver", "IntNet");
    43524333                    InsertConfigNode(pLunL0, "Config", &pCfg);
     
    43624343            case NetworkAttachmentType_HostOnly:
    43634344            {
    4364                 if (fSniffer)
    4365                     InsertConfigNode(pLunL0, "AttachedDriver", &pLunL0);
    4366                 else
    4367                     InsertConfigNode(pInst, "LUN#0", &pLunL0);
    4368 
    43694345                InsertConfigString(pLunL0, "Driver", "IntNet");
    43704346                InsertConfigNode(pLunL0, "Config", &pCfg);
     
    45734549                                                     ComSafeArrayAsOutParam(values));       H();
    45744550
    4575                 if (fSniffer)
    4576                     InsertConfigNode(pLunL0, "AttachedDriver", &pLunL0);
    4577                 else
    4578                     InsertConfigNode(pInst, "LUN#0", &pLunL0);
    45794551                InsertConfigString(pLunL0, "Driver", bstr);
    45804552                InsertConfigNode(pLunL0, "Config", &pCfg);
  • trunk/src/VBox/Main/xml/Settings.cpp

    r40418 r40652  
    14991499                  && (genericProperties     == n.genericProperties)
    15001500                  && (ulBootPriority        == n.ulBootPriority)
     1501                  && (strBandwidthGroup     == n.strBandwidthGroup)
    15011502                )
    15021503           );
  • trunk/src/VBox/Main/xml/VirtualBox-settings-common.xsd

    r39248 r40652  
    721721  <xsd:attribute name="trace" type="xsd:boolean" default="false"/>
    722722  <xsd:attribute name="tracefile" type="xsd:string"/>
     723  <xsd:attribute name="bandwidthGroup" type="xsd:string"/>
    723724</xsd:complexType>
    724725
  • trunk/src/VBox/VMM/Makefile.kmk

    r40636 r40652  
    7878ifdef VBOX_WITH_PDM_ASYNC_COMPLETION
    7979 VBoxVMM_DEFS   += VBOX_WITH_PDM_ASYNC_COMPLETION
     80endif
     81ifdef VBOX_WITH_NETSHAPER
     82 VBoxVMM_DEFS   += VBOX_WITH_NETSHAPER
    8083endif
    8184VBoxVMM_DEFS.darwin = VMM_R0_SWITCH_STACK
     
    202205        VMMR3/PDMAsyncCompletionFileNormal.cpp
    203206endif
     207ifdef VBOX_WITH_NETSHAPER
     208 VBoxVMM_SOURCES += \
     209        VMMR3/PDMNetShaper.cpp
     210endif
    204211
    205212ifdef VBOX_WITH_RAW_MODE
  • trunk/src/VBox/VMM/VMMAll/MMAll.cpp

    r39078 r40652  
    612612        TAG2STR(PDM_THREAD);
    613613        TAG2STR(PDM_ASYNC_COMPLETION);
     614#ifdef VBOX_WITH_NETSHAPER
     615        TAG2STR(PDM_NET_SHAPER);
     616#endif /* VBOX_WITH_NETSHAPER */
    614617
    615618        TAG2STR(PGM);
  • trunk/src/VBox/VMM/VMMR3/PDM.cpp

    r40416 r40652  
    390390        rc = pdmR3AsyncCompletionInit(pVM);
    391391#endif
     392#ifdef VBOX_WITH_NETSHAPER
     393    if (RT_SUCCESS(rc))
     394        rc = pdmR3NetShaperInit(pVM);
     395#endif
    392396    if (RT_SUCCESS(rc))
    393397        rc = pdmR3BlkCacheInit(pVM);
     
    662666    pdmR3BlkCacheTerm(pVM);
    663667
     668#ifdef VBOX_WITH_NETSHAPER
     669    /*
     670     * Destroy network bandwidth groups.
     671     */
     672    pdmR3NetShaperTerm(pVM);
     673#endif
    664674#ifdef VBOX_WITH_PDM_ASYNC_COMPLETION
    665675    /*
  • trunk/src/VBox/VMM/VMMR3/PDMDriver.cpp

    r40274 r40652  
    15301530
    15311531
     1532#ifdef VBOX_WITH_NETSHAPER
     1533/** @interface_method_impl{PDMDRVHLP,pfnNetShaperAttach} */
     1534static DECLCALLBACK(int) pdmR3DrvHlp_NetShaperAttach(PPDMDRVINS pDrvIns, const char *pszBwGroup, PPDMNSFILTER pFilter)
     1535{
     1536    PDMDRV_ASSERT_DRVINS(pDrvIns);
     1537    LogFlow(("pdmR3DrvHlp_NetShaperAttach: caller='%s'/%d: pFilter=%p pszBwGroup=%p:{%s}\n",
     1538             pDrvIns->pReg->szName, pDrvIns->iInstance, pFilter, pszBwGroup, pszBwGroup));
     1539
     1540    int rc = PDMR3NsAttach(pDrvIns->Internal.s.pVMR3, pDrvIns, pszBwGroup, pFilter);
     1541
     1542    LogFlow(("pdmR3DrvHlp_NetShaperAttach: caller='%s'/%d: returns %Rrc\n", pDrvIns->pReg->szName,
     1543             pDrvIns->iInstance, rc));
     1544    return rc;
     1545}
     1546
     1547
     1548/** @interface_method_impl{PDMDRVHLP,pfnNetShaperDetach} */
     1549static DECLCALLBACK(int) pdmR3DrvHlp_NetShaperDetach(PPDMDRVINS pDrvIns, PPDMNSFILTER pFilter)
     1550{
     1551    PDMDRV_ASSERT_DRVINS(pDrvIns);
     1552    LogFlow(("pdmR3DrvHlp_NetShaperDetach: caller='%s'/%d: pFilter=%p\n",
     1553             pDrvIns->pReg->szName, pDrvIns->iInstance, pFilter));
     1554
     1555    int rc = PDMR3NsDetach(pDrvIns->Internal.s.pVMR3, pDrvIns, pFilter);
     1556
     1557    LogFlow(("pdmR3DrvHlp_NetShaperDetach: caller='%s'/%d: returns %Rrc\n", pDrvIns->pReg->szName,
     1558             pDrvIns->iInstance, rc));
     1559    return rc;
     1560}
     1561#endif /* VBOX_WITH_NETSHAPER */
     1562
     1563
    15321564/** @interface_method_impl{PDMDRVHLP,pfnLdrGetRCInterfaceSymbols} */
    15331565static DECLCALLBACK(int) pdmR3DrvHlp_LdrGetRCInterfaceSymbols(PPDMDRVINS pDrvIns, void *pvInterface, size_t cbInterface,
     
    17341766    pdmR3DrvHlp_ThreadCreate,
    17351767    pdmR3DrvHlp_AsyncCompletionTemplateCreate,
     1768#ifdef VBOX_WITH_NETSHAPER
     1769    pdmR3DrvHlp_NetShaperAttach,
     1770    pdmR3DrvHlp_NetShaperDetach,
     1771#endif /* VBOX_WITH_NETSHAPER */
    17361772    pdmR3DrvHlp_LdrGetRCInterfaceSymbols,
    17371773    pdmR3DrvHlp_LdrGetR0InterfaceSymbols,
  • trunk/src/VBox/VMM/include/PDMInternal.h

    r39839 r40652  
    2525#include <VBox/vusb.h>
    2626#include <VBox/vmm/pdmasynccompletion.h>
     27#ifdef VBOX_WITH_NETSHAPER
     28#include <VBox/vmm/pdmnetshaper.h>
     29#endif /* VBOX_WITH_NETSHAPER */
    2730#include <VBox/vmm/pdmblkcache.h>
    2831#include <VBox/vmm/pdmcommon.h>
     
    10611064    R3PTRTYPE(PPDMASYNCCOMPLETIONTEMPLATE) pAsyncCompletionTemplates;
    10621065    /** @} */
     1066#ifdef VBOX_WITH_NETSHAPER
     1067    /** Pointer to network shaper instance. */
     1068    R3PTRTYPE(PPDMNETSHAPER)        pNetShaper;
     1069#endif /* VBOX_WITH_NETSHAPER */
    10631070
    10641071    R3PTRTYPE(PPDMBLKCACHEGLOBAL)   pBlkCacheGlobal;
     
    11801187#endif
    11811188
     1189#ifdef VBOX_WITH_NETSHAPER
     1190int         pdmR3NetShaperInit(PVM pVM);
     1191int         pdmR3NetShaperTerm(PVM pVM);
     1192#endif
     1193
    11821194int         pdmR3BlkCacheInit(PVM pVM);
    11831195void        pdmR3BlkCacheTerm(PVM pVM);
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