aboutsummaryrefslogtreecommitdiff
path: root/x86_64-w64-mingw32/include/qos2.h
blob: 72e984dcac03b82c17fbea01455e416b35d3cd55 (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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
/**
 * This file has no copyright assigned and is placed in the Public Domain.
 * This file is part of the mingw-w64 runtime package.
 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
 */
#ifndef _INC_QOS2
#define _INC_QOS2
#if (_WIN32_WINNT >= 0x0600)
#ifdef __cplusplus
extern "C" {
#endif

typedef enum _QOS_SHAPING {
  QOSShapeOnly                  = 0,
  QOSShapeAndMark               = 1,
  QOSUseNonConformantMarkings   = 2 
} QOS_SHAPING, *PQOS_SHAPING;

typedef enum _QOS_FLOWRATE_REASON {
  QOSFlowRateNotApplicable           = 0,
  QOSFlowRateContentChange           = 1,
  QOSFlowRateCongestion              = 2,
  QOSFlowRateHigherContentEncoding   = 3,
  QOSFlowRateUserCaused              = 4 
} QOS_FLOWRATE_REASON, PQOS_FLOWRATE_REASON;

typedef enum _QOS_NOTIFY_FLOW {
  QOSNotifyCongested     = 0,
  QOSNotifyUncongested   = 1,
  QOSNotifyAvailable     = 2 
} QOS_NOTIFY_FLOW, *PQOS_NOTIFY_FLOW;

typedef enum _QOS_QUERY_FLOW {
  QOSQueryFlowFundamentals   = 0,
  QOSQueryPacketPriority     = 1,
  QOSQueryOutgoingRate       = 2 
} QOS_QUERY_FLOW;

typedef enum _QOS_SET_FLOW {
  QOSSetTrafficType         = 0,
  QOSSetOutgoingRate        = 1,
  QOSSetOutgoingDSCPValue   = 2 
} QOS_SET_FLOW, *PQOS_SET_FLOW;

typedef enum _QOS_TRAFFIC_TYPE {
  QOSTrafficTypeBestEffort,
  QOSTrafficTypeBackground,
  QOSTrafficTypeExcellentEffort,
  QOSTrafficTypeAudioVideo,
  QOSTrafficTypeVoice,
  QOSTrafficTypeControl 
} QOS_TRAFFIC_TYPE, *PQOS_TRAFFIC_TYPE;

typedef struct _QOS_FLOW_FUNDAMENTALS {
  BOOL   BottleneckBandwidthSet;
  UINT64 BottleneckBandwidth;
  BOOL   AvailableBandwidthSet;
  UINT64 AvailableBandwidth;
  BOOL   RTTSet;
  UINT32 RTT;
} QOS_FLOW_FUNDAMENTALS, *PQOS_FLOW_FUNDAMENTALS;

typedef struct _QOS_FLOWRATE_OUTGOING {
  UINT64              Bandwidth;
  QOS_SHAPING         ShapingBehavior;
  QOS_FLOWRATE_REASON Reason;
} QOS_FLOWRATE_OUTGOING, *PQOS_FLOWRATE_OUTGOING;

typedef struct _QOS_PACKET_PRIORITY {
  ULONG ConformantDSCPValue;
  ULONG NonConformantDSCPValue;
  ULONG ConformantL2Value;
  ULONG NonConformantL2Value;
} QOS_PACKET_PRIORITY, *PQOS_PACKET_PRIORITY;

typedef struct _QOS_VERSION {
  USHORT MajorVersion;
  USHORT MinorVersion;
} QOS_VERSION, *PQOS_VERSION;

WINBOOL WINAPI QOSAddSocketToFlow(
  HANDLE QOSHandle,
  SOCKET Socket,
  PSOCKADDR DestAddr,
  QOS_TRAFFIC_TYPE TrafficType,
  DWORD Flags,
  PQOS_FLOWID FlowId
);

WINBOOL WINAPI QOSCancel(
  HANDLE QOSHandle,
  LPOVERLAPPED Overlapped
);

WINBOOL WINAPI QOSCloseHandle(
  HANDLE QOSHandle
);

WINBOOL WINAPI QOSCreateHandle(
  PQOS_VERSION Version,
  PHANDLE QOSHandle
);

WINBOOL WINAPI QOSEnumerateFlows(
  HANDLE QOSHandle,
  PULONG Size,
  PVOID Buffer
);

WINBOOL WINAPI QOSNotifyFlow(
  HANDLE QOSHandle,
  QOS_FLOWID FlowId,
  QOS_NOTIFY_FLOW Operation,
  PULONG Size,
  PVOID Buffer,
  DWORD Flags,
  LPOVERLAPPED Overlapped
);

WINBOOL WINAPI QOSQueryFlow(
  HANDLE QOSHandle,
  QOS_FLOWID FlowId,
  QOS_QUERY_FLOW Operation,
  PULONG Size,
  PVOID Buffer,
  DWORD Flags,
  LPOVERLAPPED Overlapped
);

WINBOOL WINAPI QOSRemoveSocketFromFlow(
  HANDLE QOSHandle,
  SOCKET Socket,
  QOS_FLOWID FlowId,
  DWORD Flags
);

#define QOSSetTrafficType 0
#define QOSSetOutgoingRate 1
#define QOSSetOutgoingDSCPValue 2

typedef UINT32 QOS_FLOWID;

WINBOOL WINAPI QOSSetFlow(
  HANDLE QOSHandle,
  QOS_FLOWID FlowId,
  QOS_SET_FLOW Operation,
  ULONG Size,
  PVOID Buffer,
  DWORD Flags,
  LPOVERLAPPED Overlapped
);

WINBOOL WINAPI QOSStartTrackingClient(
  HANDLE QOSHandle,
  PSOCKADDR DestAddr,
  DWORD Flags
);

WINBOOL WINAPI QOSStopTrackingClient(
  HANDLE QOSHandle,
  PSOCKADDR DestAddr,
  DWORD Flags
);

#ifdef __cplusplus
}
#endif
#endif /*(_WIN32_WINNT >= 0x0600)*/
#endif /*_INC_QOS2*/