windows-nt/Source/XPSP1/NT/public/internal/net/inc/ntddtc.h
2020-09-26 16:20:57 +08:00

232 lines
7.5 KiB
C

/*++
Copyright (c) Microsoft Corporation. All rights reserved.
Module Name:
ntddtc.h
Abstract:
This module contains type definitions for the interface between the
traffic dll and kernel mode components.
Definitions here should not be exposed to the external user.
'traffic.h' and 'qos.h' should be used as public include files instead.
Author:
Ofer Bar ( oferbar ) Oct 8, 1997
Revision History:
Ofer Bar ( oferbar ) Dec 1, 1997
Add error codes
--*/
//---------------------------------------------------------------------------
//
// QoS supported guid
//
//---------------------------------------------------------------------------
DEFINE_GUID( GUID_QOS_TC_SUPPORTED, 0xe40056dcL,
0x40c8, 0x11d1, 0x2c, 0x91, 0x00, 0xaa, 0x00, 0x57, 0x59, 0x15);
DEFINE_GUID( GUID_QOS_TC_INTERFACE_UP_INDICATION,
0x0ca13af0L, 0x46c4, 0x11d1, 0x78, 0xac, 0x00, 0x80, 0x5f, 0x68, 0x35, 0x1e);
DEFINE_GUID( GUID_QOS_TC_INTERFACE_DOWN_INDICATION,
0xaf5315e4L, 0xce61, 0x11d1, 0x7c, 0x8a, 0x00, 0xc0, 0x4f, 0xc9, 0xb5, 0x7c);
DEFINE_GUID( GUID_QOS_TC_INTERFACE_CHANGE_INDICATION,
0xda76a254L, 0xce61, 0x11d1, 0x7c, 0x8a, 0x00, 0xc0, 0x4f, 0xc9, 0xb5, 0x7c);
DEFINE_GUID( GUID_QOS_SCHEDULING_PROFILES_SUPPORTED, 0x1ff890f0L, 0x40ed, 0x11d1, 0x2c, 0x91, 0x00, 0xaa, 0x00, 0x57, 0x49, 0x15);
DEFINE_GUID( GUID_QOS_CURRENT_SCHEDULING_PROFILE, 0x2966ed30L, 0x40ed, 0x11d1, 0x2c, 0x91, 0x00, 0xaa, 0x00, 0x57, 0x49, 0x15);
DEFINE_GUID( GUID_QOS_DISABLE_DRR, 0x1fa6dc7aL, 0x6120, 0x11d1, 0x2c, 0x91, 0x00, 0xaa, 0x00, 0x57, 0x49, 0x15);
DEFINE_GUID( GUID_QOS_LOG_THRESHOLD_REACHED, 0x357b74d2L,0x6134,0x11d1,0xab,0x5b,0x00,0xa0,0xc9,0x24,0x88,0x37);
DEFINE_GUID( GUID_QOS_LOG_BUFFER_SIZE, 0x357b74d3L,0x6134,0x11d1,0xab,0x5b,0x00,0xa0,0xc9,0x24,0x88,0x37);
DEFINE_GUID( GUID_QOS_LOG_THRESHOLD, 0x357b74d0L,0x6134,0x11d1,0xab,0x5b,0x00,0xa0,0xc9,0x24,0x88,0x37);
DEFINE_GUID( GUID_QOS_LOG_DATA, 0x357b74d1L,0x6134,0x11d1,0xab,0x5b,0x00,0xa0,0xc9,0x24,0x88,0x37);
DEFINE_GUID( GUID_QOS_LOG_LEVEL,0x9dd7f3ae,0xf2a8,0x11d2,0xbe,0x1b,0x00,0xa0,0xc9,0x9e,0xe6,0x3b);
DEFINE_GUID( GUID_QOS_LOG_MASK,0x9e696320,0xf2a8,0x11d2,0xbe,0x1b,0x00,0xa0,0xc9,0x9e,0xe6,0x3b);
#ifndef __NTDDTC_H
#define __NTDDTC_H
//
// Kernel NT private error codes
// these should be only returned to the GPC but not
// to NDIS, since WMI will not map them to winerror
//
#define QOS_STATUS_INVALID_SERVICE_TYPE 0xC0020080L
#define QOS_STATUS_INVALID_TOKEN_RATE 0xC0020081L
#define QOS_STATUS_INVALID_PEAK_RATE 0xC0020082L
#define QOS_STATUS_INVALID_SD_MODE 0xC0020083L
#define QOS_STATUS_INVALID_QOS_PRIORITY 0xC0020084L
#define QOS_STATUS_INVALID_TRAFFIC_CLASS 0xC0020085L
#define QOS_STATUS_TC_OBJECT_LENGTH_INVALID 0xC0020086L
#define QOS_STATUS_INVALID_FLOW_MODE 0xC0020087L
#define QOS_STATUS_INVALID_DIFFSERV_FLOW 0xC0020088L
#define QOS_STATUS_DS_MAPPING_EXISTS 0xC0020089L
#define QOS_STATUS_INVALID_SHAPE_RATE 0xC0020090L
#define QOS_STATUS_INVALID_DS_CLASS 0xC0020091L
//
// These are the public QOS error codes
//
#define QOS_STATUS_INCOMPATABLE_QOS NDIS_STATUS_INCOMPATABLE_QOS
// The CF_INFO structure for the QoS classification family.
// Note that this is not interpreted by the GPC, but it is shared by
// all clients of the GPC which are of the QoS classification family.
#define MAX_INSTANCE_NAME_LENGTH 256
typedef struct _CF_INFO_QOS {
USHORT InstanceNameLength; // name length
WCHAR InstanceName[MAX_INSTANCE_NAME_LENGTH]; // instance name
ULONG ToSValue;
ULONG Flags;
TC_GEN_FLOW GenFlow;
} CF_INFO_QOS, *PCF_INFO_QOS;
//
// This is the buffer that the data provider sends up
// on Interface Up notification
//
typedef struct _TC_INDICATION_BUFFER {
ULONG SubCode; // reason for notification
TC_SUPPORTED_INFO_BUFFER InfoBuffer;
} TC_INDICATION_BUFFER, *PTC_INDICATION_BUFFER;
//
// Definitions for the Class Map (including CBQ)
//
typedef struct _TC_CLASS_MAP_FLOW {
ULONG DefaultClass; // Default Class Id
ULONG ObjectsLength; // Length of Objects
QOS_OBJECT_HDR Objects; // Offset to Objects
} TC_CLASS_MAP_FLOW, *PTC_CLASS_MAP_FLOW;
typedef struct _CF_INFO_CLASS_MAP {
USHORT InstanceNameLength; // name length
WCHAR InstanceName[MAX_INSTANCE_NAME_LENGTH]; // instance name
ULONG Flags;
TC_CLASS_MAP_FLOW ClassMapInfo;
} CF_INFO_CLASS_MAP, *PCF_INFO_CLASS_MAP;
//
// Internal QoS Objects start at this offset from the base
//
#define QOS_PRIVATE_GENERAL_ID_BASE 3000
#define QOS_OBJECT_WAN_MEDIA (0x00000001 + QOS_PRIVATE_GENERAL_ID_BASE)
/* QOS_WAN_MEDIA structure passed */
#define QOS_OBJECT_SHAPER_QUEUE_DROP_MODE (0x00000002 + QOS_PRIVATE_GENERAL_ID_BASE)
/* QOS_ShaperQueueDropMode structure */
#define QOS_OBJECT_SHAPER_QUEUE_LIMIT (0x00000003 + QOS_PRIVATE_GENERAL_ID_BASE)
/* QOS_ShaperQueueLimit structure */
#define QOS_OBJECT_PRIORITY (0x00000004 + QOS_PRIVATE_GENERAL_ID_BASE)
/* QOS_PRIORITY structure passed */
//
// This structure defines the media specific information needed by ndiswan to
// create a flow.
//
typedef struct _QOS_WAN_MEDIA {
QOS_OBJECT_HDR ObjectHdr;
UCHAR LinkId[6];
ULONG ISSLOW;
} QOS_WAN_MEDIA, *LPQOS_WAN_MEDIA;
//
// This structure allows overriding of the default schema used to drop
// packets when a flow's shaper queue limit is reached.
//
// DropMethod -
// QOS_SHAPER_DROP_FROM_HEAD - Drop packets from
// the head of the queue until the new packet can be
// accepted into the shaper under the current limit. This
// behavior is the default.
// QOS_SHAPER_DROP_INCOMING - Drop the incoming,
// limit-offending packet.
//
//
typedef struct _QOS_SHAPER_QUEUE_LIMIT_DROP_MODE {
QOS_OBJECT_HDR ObjectHdr;
ULONG DropMode;
} QOS_SHAPER_QUEUE_LIMIT_DROP_MODE, *LPQOS_SHAPER_QUEUE_LIMIT_DROP_MODE;
#define QOS_SHAPER_DROP_INCOMING 0
#define QOS_SHAPER_DROP_FROM_HEAD 1
//
// This structure allows the default per-flow limit on the shaper queue
// size to be overridden.
//
// QueueSizeLimit - Limit, in bytes, of the size of the shaper queue
//
//
typedef struct _QOS_SHAPER_QUEUE_LIMIT {
QOS_OBJECT_HDR ObjectHdr;
ULONG QueueSizeLimit;
} QOS_SHAPER_QUEUE_LIMIT, *LPQOS_SHAPER_QUEUE_LIMIT;
//
// This structure defines the absolute priorty of the flow. Priorities in the
// range of 0-7 are currently defined. Receive Priority is not currently used,
// but may at some point in the future.
//
typedef struct _QOS_PRIORITY {
QOS_OBJECT_HDR ObjectHdr;
UCHAR SendPriority; /* this gets mapped to layer 2 priority.*/
UCHAR SendFlags; /* there are none currently defined.*/
UCHAR ReceivePriority; /* this could be used to decide who
* gets forwarded up the stack first
* - not used now */
UCHAR Unused;
} QOS_PRIORITY, *LPQOS_PRIORITY;
#define PARAM_TYPE_GQOS_INFO 0xABC0DEF0
#endif