summaryrefslogtreecommitdiffstats
path: root/src/VBox/VMM/include/PDMNetShaperInternal.h
blob: fd8275dd92baee5483a80f7b47e0a4f0bcd476b7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
/* $Id: PDMNetShaperInternal.h $ */
/** @file
 * PDM Network Shaper - Internal data structures and functions common for both R0 and R3 parts.
 */

/*
 * Copyright (C) 2011-2019 Oracle Corporation
 *
 * This file is part of VirtualBox Open Source Edition (OSE), as
 * available from http://www.virtualbox.org. This file is free software;
 * you can redistribute it and/or modify it under the terms of the GNU
 * General Public License (GPL) as published by the Free Software
 * Foundation, in version 2 as it comes in the "COPYING" file of the
 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 */

#ifndef VMM_INCLUDED_SRC_include_PDMNetShaperInternal_h
#define VMM_INCLUDED_SRC_include_PDMNetShaperInternal_h
#ifndef RT_WITHOUT_PRAGMA_ONCE
# pragma once
#endif

/**
 * Bandwidth group instance data
 */
typedef struct PDMNSBWGROUP
{
    /** Pointer to the next group in the list. */
    R3PTRTYPE(struct PDMNSBWGROUP *)            pNextR3;
    /** Pointer to the shared UVM structure. */
    R3PTRTYPE(struct PDMNETSHAPER *)            pShaperR3;
    /** Critical section protecting all members below. */
    PDMCRITSECT                                 Lock;
    /** Pointer to the first filter attached to this group. */
    R3PTRTYPE(struct PDMNSFILTER *)             pFiltersHeadR3;
    /** Bandwidth group name. */
    R3PTRTYPE(char *)                           pszNameR3;
    /** Maximum number of bytes filters are allowed to transfer. */
    volatile uint64_t                           cbPerSecMax;
    /** Number of bytes we are allowed to transfer in one burst. */
    volatile uint32_t                           cbBucket;
    /** Number of bytes we were allowed to transfer at the last update. */
    volatile uint32_t                           cbTokensLast;
    /** Timestamp of the last update */
    volatile uint64_t                           tsUpdatedLast;
    /** Reference counter - How many filters are associated with this group. */
    volatile uint32_t                           cRefs;
} PDMNSBWGROUP;
/** Pointer to a bandwidth group. */
typedef PDMNSBWGROUP *PPDMNSBWGROUP;

#endif /* !VMM_INCLUDED_SRC_include_PDMNetShaperInternal_h */