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