Home | History | Annotate | Download | only in include
      1 /**
      2  * This file has no copyright assigned and is placed in the Public Domain.
      3  * This file is part of the mingw-w64 runtime package.
      4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
      5  */
      6 #ifndef _INC_QOS2
      7 #define _INC_QOS2
      8 #if (_WIN32_WINNT >= 0x0600)
      9 #ifdef __cplusplus
     10 extern "C" {
     11 #endif
     12 
     13 typedef enum _QOS_SHAPING {
     14   QOSShapeOnly                  = 0,
     15   QOSShapeAndMark               = 1,
     16   QOSUseNonConformantMarkings   = 2
     17 } QOS_SHAPING, *PQOS_SHAPING;
     18 
     19 typedef enum _QOS_FLOWRATE_REASON {
     20   QOSFlowRateNotApplicable           = 0,
     21   QOSFlowRateContentChange           = 1,
     22   QOSFlowRateCongestion              = 2,
     23   QOSFlowRateHigherContentEncoding   = 3,
     24   QOSFlowRateUserCaused              = 4
     25 } QOS_FLOWRATE_REASON, PQOS_FLOWRATE_REASON;
     26 
     27 typedef enum _QOS_NOTIFY_FLOW {
     28   QOSNotifyCongested     = 0,
     29   QOSNotifyUncongested   = 1,
     30   QOSNotifyAvailable     = 2
     31 } QOS_NOTIFY_FLOW, *PQOS_NOTIFY_FLOW;
     32 
     33 typedef enum _QOS_QUERY_FLOW {
     34   QOSQueryFlowFundamentals   = 0,
     35   QOSQueryPacketPriority     = 1,
     36   QOSQueryOutgoingRate       = 2
     37 } QOS_QUERY_FLOW;
     38 
     39 typedef enum _QOS_SET_FLOW {
     40   QOSSetTrafficType         = 0,
     41   QOSSetOutgoingRate        = 1,
     42   QOSSetOutgoingDSCPValue   = 2
     43 } QOS_SET_FLOW, *PQOS_SET_FLOW;
     44 
     45 typedef enum _QOS_TRAFFIC_TYPE {
     46   QOSTrafficTypeBestEffort,
     47   QOSTrafficTypeBackground,
     48   QOSTrafficTypeExcellentEffort,
     49   QOSTrafficTypeAudioVideo,
     50   QOSTrafficTypeVoice,
     51   QOSTrafficTypeControl
     52 } QOS_TRAFFIC_TYPE, *PQOS_TRAFFIC_TYPE;
     53 
     54 typedef struct _QOS_FLOW_FUNDAMENTALS {
     55   BOOL   BottleneckBandwidthSet;
     56   UINT64 BottleneckBandwidth;
     57   BOOL   AvailableBandwidthSet;
     58   UINT64 AvailableBandwidth;
     59   BOOL   RTTSet;
     60   UINT32 RTT;
     61 } QOS_FLOW_FUNDAMENTALS, *PQOS_FLOW_FUNDAMENTALS;
     62 
     63 typedef struct _QOS_FLOWRATE_OUTGOING {
     64   UINT64              Bandwidth;
     65   QOS_SHAPING         ShapingBehavior;
     66   QOS_FLOWRATE_REASON Reason;
     67 } QOS_FLOWRATE_OUTGOING, *PQOS_FLOWRATE_OUTGOING;
     68 
     69 typedef struct _QOS_PACKET_PRIORITY {
     70   ULONG ConformantDSCPValue;
     71   ULONG NonConformantDSCPValue;
     72   ULONG ConformantL2Value;
     73   ULONG NonConformantL2Value;
     74 } QOS_PACKET_PRIORITY, *PQOS_PACKET_PRIORITY;
     75 
     76 typedef struct _QOS_VERSION {
     77   USHORT MajorVersion;
     78   USHORT MinorVersion;
     79 } QOS_VERSION, *PQOS_VERSION;
     80 
     81 WINBOOL WINAPI QOSAddSocketToFlow(
     82   HANDLE QOSHandle,
     83   SOCKET Socket,
     84   PSOCKADDR DestAddr,
     85   QOS_TRAFFIC_TYPE TrafficType,
     86   DWORD Flags,
     87   PQOS_FLOWID FlowId
     88 );
     89 
     90 WINBOOL WINAPI QOSCancel(
     91   HANDLE QOSHandle,
     92   LPOVERLAPPED Overlapped
     93 );
     94 
     95 WINBOOL WINAPI QOSCloseHandle(
     96   HANDLE QOSHandle
     97 );
     98 
     99 WINBOOL WINAPI QOSCreateHandle(
    100   PQOS_VERSION Version,
    101   PHANDLE QOSHandle
    102 );
    103 
    104 WINBOOL WINAPI QOSEnumerateFlows(
    105   HANDLE QOSHandle,
    106   PULONG Size,
    107   PVOID Buffer
    108 );
    109 
    110 WINBOOL WINAPI QOSNotifyFlow(
    111   HANDLE QOSHandle,
    112   QOS_FLOWID FlowId,
    113   QOS_NOTIFY_FLOW Operation,
    114   PULONG Size,
    115   PVOID Buffer,
    116   DWORD Flags,
    117   LPOVERLAPPED Overlapped
    118 );
    119 
    120 WINBOOL WINAPI QOSQueryFlow(
    121   HANDLE QOSHandle,
    122   QOS_FLOWID FlowId,
    123   QOS_QUERY_FLOW Operation,
    124   PULONG Size,
    125   PVOID Buffer,
    126   DWORD Flags,
    127   LPOVERLAPPED Overlapped
    128 );
    129 
    130 WINBOOL WINAPI QOSRemoveSocketFromFlow(
    131   HANDLE QOSHandle,
    132   SOCKET Socket,
    133   QOS_FLOWID FlowId,
    134   DWORD Flags
    135 );
    136 
    137 #define QOSSetTrafficType 0
    138 #define QOSSetOutgoingRate 1
    139 #define QOSSetOutgoingDSCPValue 2
    140 
    141 typedef UINT32 QOS_FLOWID;
    142 
    143 WINBOOL WINAPI QOSSetFlow(
    144   HANDLE QOSHandle,
    145   QOS_FLOWID FlowId,
    146   QOS_SET_FLOW Operation,
    147   ULONG Size,
    148   PVOID Buffer,
    149   DWORD Flags,
    150   LPOVERLAPPED Overlapped
    151 );
    152 
    153 WINBOOL WINAPI QOSStartTrackingClient(
    154   HANDLE QOSHandle,
    155   PSOCKADDR DestAddr,
    156   DWORD Flags
    157 );
    158 
    159 WINBOOL WINAPI QOSStopTrackingClient(
    160   HANDLE QOSHandle,
    161   PSOCKADDR DestAddr,
    162   DWORD Flags
    163 );
    164 
    165 #ifdef __cplusplus
    166 }
    167 #endif
    168 #endif /*(_WIN32_WINNT >= 0x0600)*/
    169 #endif /*_INC_QOS2*/
    170