📄 qos.h
字号:
/*++
Copyright 1997 - 1998 Microsoft Corporation
Module Name:
qos.h - QoS definitions for NDIS components.
Abstract:
This module defines the Quality of Service structures and types used
by Winsock applications.
Revision History:
--*/
#ifndef __QOS_H_
#define __QOS_H_
/*
* Definitions for Service Type for each direction of data flow.
*/
typedef ULONG SERVICETYPE;
#define SERVICETYPE_NOTRAFFIC 0x00000000 /* No data in this
* direction */
#define SERVICETYPE_BESTEFFORT 0x00000001 /* Best Effort */
#define SERVICETYPE_CONTROLLEDLOAD 0x00000002 /* Controlled Load */
#define SERVICETYPE_GUARANTEED 0x00000003 /* Guaranteed */
#define SERVICETYPE_NETWORK_UNAVAILABLE 0x00000004 /* Used to notify
* change to user */
#define SERVICETYPE_GENERAL_INFORMATION 0x00000005 /* corresponds to
* "General Parameters"
* defined by IntServ */
#define SERVICETYPE_NOCHANGE 0x00000006 /* used to indicate
* that the flow spec
* contains no change
* from any previous
* one */
/*
* to turn on immediate traffic control, OR ( | ) this flag with the
* ServiceType field in the FLOWSPEC
*/
#define SERVICE_IMMEDIATE_TRAFFIC_CONTROL 0x80000000
/*
* this flag can be used with the immediate traffic control flag above to
* prevent any rsvp signaling messages from being sent. Local traffic
* control will be invoked, but no RSVP Path messages will be sent.This flag
* can also be used in conjunction with a receiving flowspec to suppress
* the automatic generation of a Reserve message. The application would
* receive notification that a Path message had arrived and would then need
* to alter the QOS by issuing WSAIoctl( SIO_SET_QOS ), to unset this flag
* and thereby cause Reserve messages to go out.
*/
#define SERVICE_NO_QOS_SIGNALING 0x40000000
/*
* Flow Specifications for each direction of data flow.
*/
typedef struct _flowspec
{
ULONG TokenRate; /* In Bytes/sec */
ULONG TokenBucketSize; /* In Bytes */
ULONG PeakBandwidth; /* In Bytes/sec */
ULONG Latency; /* In microseconds */
ULONG DelayVariation; /* In microseconds */
SERVICETYPE ServiceType;
ULONG MaxSduSize; /* In Bytes */
ULONG MinimumPolicedSize; /* In Bytes */
} FLOWSPEC, *PFLOWSPEC, * LPFLOWSPEC;
/*
* the provider specific structure can have a number of objects in it.
* Each next structure in the
* ProviderSpecific will be the QOS_OBJECT_HDR struct that prefaces the actual
* data with a type and length for that object. This QOS_OBJECT struct can
* repeat several times if there are several objects. This list of objects
* terminates either when the buffer length has been reached ( WSABUF ) or
* an object of type QOS_END_OF_LIST is encountered.
*/
/*
* define the type of objects that can go into the ProviderSpecific buffer
* in the QOS structure
*/
typedef struct {
ULONG ObjectType;
ULONG ObjectLength; /* the length of object buffer INCLUDING
* this header */
} QOS_OBJECT_HDR, *LPQOS_OBJECT_HDR;
/*
* Definition of object Types
*
*
* define the values for ObjectType above - RSVP Objects ids start at an
* offset from zero to allow for ATM objects that might be defined in the
* lower number range.
*/
#define RSVP_OBJECT_ID_BASE 1000
#define RSVP_OBJECT_STATUS_INFO (0x00000000 + RSVP_OBJECT_ID_BASE)
/* RSVP_STATUS_INFO structure passed */
#define RSVP_OBJECT_RESERVE_INFO (0x00000001 + RSVP_OBJECT_ID_BASE)
/* RSVP_RESERVE_INFO structure passed */
#define RSVP_OBJECT_ADSPEC (0x00000002 + RSVP_OBJECT_ID_BASE)
/* RSVP_ADSPEC structure passed */
/*
* general QOS objects start at this offset from the base and have a range
* of 1000
*/
#define QOS_GENERAL_ID_BASE 2000
#define QOS_OBJECT_PRIORITY (0x00000000 + QOS_GENERAL_ID_BASE)
/* QOS_PRIORITY structure passed */
#define QOS_OBJECT_END_OF_LIST (0x00000001 + QOS_GENERAL_ID_BASE)
/* QOS_End_of_list structure passed */
#define QOS_OBJECT_SD_MODE (0x00000002 + QOS_GENERAL_ID_BASE)
/* QOS_ShapeDiscard structure passed */
#define QOS_OBJECT_TRAFFIC_CLASS (0x00000003 + QOS_GENERAL_ID_BASE)
/* QOS_Traffic class structure passed */
/*
* this value can be used in the FLOWSPEC structure to instruct the Rsvp Service
* provider to derive the appropriate default value for the parameter. Note
* that not all values in the FLOWSPEC structure can be defaults. In the
* ReceivingFlowspec, all parameters can be defaulted except the ServiceType.
* In the SendingFlowspec, the MaxSduSize and MinimumPolicedSize can be
* defaulted. Other defaults may be possible. Refer to the appropriate
* documentation.
*/
#define QOS_NOT_SPECIFIED 0xFFFFFFFF
/*
* define a value that can be used for the PeakBandwidth, which will map into
* positive infinity when the FLOWSPEC is converted into IntServ floating point
* format. We can't use (-1) because that value was previously defined to mean
* "select the default".
*/
#define POSITIVE_INFINITY_RATE 0xFFFFFFFE
/*
* IPV6 addressing for RSVP FILTERSPECS
*/
typedef union _IN_ADDR_IPV4 {
ULONG Addr;
UCHAR AddrBytes[4];
} IN_ADDR_IPV4, *LPIN_ADDR_IPV4;
/*
* IPV6 addressing for RSVP FILTERSPECS
*/
typedef struct _IN_ADDR_IPV6 {
UCHAR Addr[16]; //IPV6 address
} IN_ADDR_IPV6, *LPIN_ADDR_IPV6;
typedef const IN_ADDR_IPV6 *LPCIN_ADDR_IPV6;
/*
* IPV4 addressing for RSVP FILTERSPECS
*/
typedef struct _RSVP_FILTERSPEC_V4 {
IN_ADDR_IPV4 Address;
USHORT Unused;
USHORT Port;
} RSVP_FILTERSPEC_V4, *LPRSVP_FILTERSPEC_V4;
typedef struct _RSVP_FILTERSPEC_V6 {
IN_ADDR_IPV6 Address;
USHORT UnUsed;
USHORT Port;
} RSVP_FILTERSPEC_V6, *LPRSVP_FILTERSPEC_V6;
typedef struct _RSVP_FILTERSPEC_V6_FLOW {
IN_ADDR_IPV6 Address;
UCHAR UnUsed;
UCHAR FlowLabel[3];
} RSVP_FILTERSPEC_V6_FLOW, *LPRSVP_FILTERSPEC_V6_FLOW;
typedef struct _RSVP_FILTERSPEC_V4_GPI {
IN_ADDR_IPV4 Address;
ULONG GeneralPortId;
} RSVP_FILTERSPEC_V4_GPI, *LPRSVP_FILTERSPEC_V4_GPI;
typedef struct _RSVP_FILTERSPEC_V6_GPI {
IN_ADDR_IPV6 Address;
ULONG GeneralPortId;
} RSVP_FILTERSPEC_V6_GPI, *LPRSVP_FILTERSPEC_V6_GPI;
/*
* FILTERSPEC TYPES used in making reservations.
*/
typedef enum {
FILTERSPECV4 = 1,
FILTERSPECV6,
FILTERSPECV6_FLOW,
FILTERSPECV4_GPI,
FILTERSPECV6_GPI,
FILTERSPEC_END
} FilterType;
typedef struct _RSVP_FILTERSPEC {
FilterType Type;
union {
RSVP_FILTERSPEC_V4 FilterSpecV4;
RSVP_FILTERSPEC_V6 FilterSpecV6;
RSVP_FILTERSPEC_V6_FLOW FilterSpecV6Flow;
RSVP_FILTERSPEC_V4_GPI FilterSpecV4Gpi;
RSVP_FILTERSPEC_V6_GPI FilterSpecV6Gpi;
};
} RSVP_FILTERSPEC, *LPRSVP_FILTERSPEC;
/*
* FLOWDESCRIPTOR Structure used for specifying one or more
* Filters per Flowspec.
*/
typedef struct _FLOWDESCRIPTOR {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -