master
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*/