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