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 10extern "C" { 11#endif 12 13typedef enum _QOS_SHAPING { 14 QOSShapeOnly = 0, 15 QOSShapeAndMark = 1, 16 QOSUseNonConformantMarkings = 2 17} QOS_SHAPING, *PQOS_SHAPING; 18 19typedef 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 27typedef enum _QOS_NOTIFY_FLOW { 28 QOSNotifyCongested = 0, 29 QOSNotifyUncongested = 1, 30 QOSNotifyAvailable = 2 31} QOS_NOTIFY_FLOW, *PQOS_NOTIFY_FLOW; 32 33typedef enum _QOS_QUERY_FLOW { 34 QOSQueryFlowFundamentals = 0, 35 QOSQueryPacketPriority = 1, 36 QOSQueryOutgoingRate = 2 37} QOS_QUERY_FLOW; 38 39typedef enum _QOS_SET_FLOW { 40 QOSSetTrafficType = 0, 41 QOSSetOutgoingRate = 1, 42 QOSSetOutgoingDSCPValue = 2 43} QOS_SET_FLOW, *PQOS_SET_FLOW; 44 45typedef enum _QOS_TRAFFIC_TYPE { 46 QOSTrafficTypeBestEffort, 47 QOSTrafficTypeBackground, 48 QOSTrafficTypeExcellentEffort, 49 QOSTrafficTypeAudioVideo, 50 QOSTrafficTypeVoice, 51 QOSTrafficTypeControl 52} QOS_TRAFFIC_TYPE, *PQOS_TRAFFIC_TYPE; 53 54typedef 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 63typedef struct _QOS_FLOWRATE_OUTGOING { 64 UINT64 Bandwidth; 65 QOS_SHAPING ShapingBehavior; 66 QOS_FLOWRATE_REASON Reason; 67} QOS_FLOWRATE_OUTGOING, *PQOS_FLOWRATE_OUTGOING; 68 69typedef struct _QOS_PACKET_PRIORITY { 70 ULONG ConformantDSCPValue; 71 ULONG NonConformantDSCPValue; 72 ULONG ConformantL2Value; 73 ULONG NonConformantL2Value; 74} QOS_PACKET_PRIORITY, *PQOS_PACKET_PRIORITY; 75 76typedef struct _QOS_VERSION { 77 USHORT MajorVersion; 78 USHORT MinorVersion; 79} QOS_VERSION, *PQOS_VERSION; 80 81WINBOOL 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 90WINBOOL WINAPI QOSCancel( 91 HANDLE QOSHandle, 92 LPOVERLAPPED Overlapped 93); 94 95WINBOOL WINAPI QOSCloseHandle( 96 HANDLE QOSHandle 97); 98 99WINBOOL WINAPI QOSCreateHandle( 100 PQOS_VERSION Version, 101 PHANDLE QOSHandle 102); 103 104WINBOOL WINAPI QOSEnumerateFlows( 105 HANDLE QOSHandle, 106 PULONG Size, 107 PVOID Buffer 108); 109 110WINBOOL 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 120WINBOOL 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 130WINBOOL 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 141typedef UINT32 QOS_FLOWID; 142 143WINBOOL 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 153WINBOOL WINAPI QOSStartTrackingClient( 154 HANDLE QOSHandle, 155 PSOCKADDR DestAddr, 156 DWORD Flags 157); 158 159WINBOOL 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