xpmgr/BuildTools/Include/qosobjs.h

134 lines
3.9 KiB
C

/*++
Copyright (c) Microsoft Corporation. All rights reserved.
Module Name:
qosobjs.h
Abstract:
This module contains QoS object definitions.
--*/
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
#define QOS_MAX_OBJECT_STRING_LENGTH 256
//
// QoS objects supported by traffic control
//
#define QOS_TRAFFIC_GENERAL_ID_BASE 4000
#define QOS_OBJECT_DS_CLASS (0x00000001 + QOS_TRAFFIC_GENERAL_ID_BASE)
/* QOS_DS_CLASS structure passed */
#define QOS_OBJECT_TRAFFIC_CLASS (0x00000002 + QOS_TRAFFIC_GENERAL_ID_BASE)
/* QOS_Traffic class structure passed */
#define QOS_OBJECT_DIFFSERV (0x00000003 + QOS_TRAFFIC_GENERAL_ID_BASE)
/* QOS_DIFFSERV Structure */
#define QOS_OBJECT_TCP_TRAFFIC (0x00000004 + QOS_TRAFFIC_GENERAL_ID_BASE)
/* QOS_TCP_TRAFFIC structure */
#define QOS_OBJECT_FRIENDLY_NAME (0x00000005 + QOS_TRAFFIC_GENERAL_ID_BASE)
/* QOS_FRIENDLY_NAME structure */
#define QOS_OBJECT_STARTING_RATE (0x00000006 + QOS_TRAFFIC_GENERAL_ID_BASE)
/* QOS_STARTING_RATE structure */
//
// This structure is used to associate a friendly name with the flow
//
typedef struct _QOS_FRIENDLY_NAME {
QOS_OBJECT_HDR ObjectHdr;
WCHAR FriendlyName[QOS_MAX_OBJECT_STRING_LENGTH];
} QOS_FRIENDLY_NAME, *LPQOS_FRIENDLY_NAME;
//
// This structure may carry an 802.1 TrafficClass parameter which
// has been provided to the host by a layer 2 network, for example,
// in an 802.1 extended RSVP RESV message. If this object is obtained
// from the network, hosts will stamp the MAC headers of corresponding
// transmitted packets, with the value in the object. Otherwise, hosts
// may select a value based on the standard Intserv mapping of
// ServiceType to 802.1 TrafficClass.
//
//
typedef struct _QOS_TRAFFIC_CLASS {
QOS_OBJECT_HDR ObjectHdr;
ULONG TrafficClass;
} QOS_TRAFFIC_CLASS, *LPQOS_TRAFFIC_CLASS;
//
// This structure may carry an DSField parameter which has been provided to
// the host by a layer 3 network, for example, in an extended RSVP RESV message.
// If this object is obtained from the network, hosts will stamp the DS Field on the
// IP header of transmitted packets, with the value in the object. Otherwise, hosts
// may select a value based on the standard Intserv mapping of ServiceType to DS Field
//
typedef struct _QOS_DS_CLASS {
QOS_OBJECT_HDR ObjectHdr;
ULONG DSField;
} QOS_DS_CLASS, *LPQOS_DS_CLASS;
//
// This structure is used to create DiffServ Flows. This creates flows in the packet scheduler
// and allows it to classify to packets based on a particular DS field. This structure takes
// a variable length array of QOS_DIFFSERV_RULE, where each DS field is specified by a
// QOS_DIFFSERV_RULE
//
typedef struct _QOS_DIFFSERV {
QOS_OBJECT_HDR ObjectHdr;
ULONG DSFieldCount;
UCHAR DiffservRule[1];
} QOS_DIFFSERV, *LPQOS_DIFFSERV;
//
// The rule for a Diffserv DS codepoint.
//
typedef struct _QOS_DIFFSERV_RULE {
UCHAR InboundDSField;
UCHAR ConformingOutboundDSField;
UCHAR NonConformingOutboundDSField;
UCHAR ConformingUserPriority;
UCHAR NonConformingUserPriority;
} QOS_DIFFSERV_RULE, *LPQOS_DIFFSERV_RULE;
//
// This structure is passed to indicate that the IP Precedence and UserPriority mappings for the flow
// have to be set to the system defaults for TCP traffic. If this object is passed,
// the ServiceType ==> DSField mapping, ServiceType ==> UserPriorityMapping, QOS_OBJECT_DS_CLASS
// and QOS_OBJECT_TRAFFIC_CLASS will be ignored.
//
typedef struct _QOS_TCP_TRAFFIC {
QOS_OBJECT_HDR ObjectHdr;
} QOS_TCP_TRAFFIC, *LPQOS_TCP_TRAFFIC;
typedef struct _QOS_STARTING_RATE {
QOS_OBJECT_HDR ObjectHdr;
ULONG StartingTokenRate; // In bytes per second
ULONG RampingTime; // In Milliseconds
} QOS_STARTING_RATE, *LPQOS_STARTING_RATE;
#ifdef __cplusplus
}
#endif