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