windows-nt/Source/XPSP1/NT/net/qos/psched/netshell/diffserv/ipqosrm.h

243 lines
6 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
/*++
Copyright (c) 1999, Microsoft Corporation
Module Name:
ipqosrm.h
Abstract:
The file contains the IP router manager
interface for the QOS Mgr Protocol.
Revision History:
--*/
#ifndef __IPQOSRM_H_
#define __IPQOSRM_H_
//
// Constants
//
//
// Current QOS configuration version
//
#define QOS_CONFIG_VERSION_500 500
//
// Constants for the field
// IPQOS_GLOBAL_CONFIG::LoggingLevel
//
#define IPQOS_LOGGING_NONE 0
#define IPQOS_LOGGING_ERROR 1
#define IPQOS_LOGGING_WARN 2
#define IPQOS_LOGGING_INFO 3
//
// Constants identifying QOS's MIB tables
//
#define IPQOS_GLOBAL_STATS_ID 0
#define IPQOS_GLOBAL_CONFIG_ID 1
#define IPQOS_IF_STATS_ID 2
#define IPQOS_IF_CONFIG_ID 3
//
// Structures
//
//
// In the following structures, all IP
// addresses are in network byte order
//
typedef struct _IPQOS_NAMED_FLOWSPEC
{
WCHAR FlowspecName[MAX_STRING_LENGTH];
FLOWSPEC FlowspecDesc;
}
IPQOS_NAMED_FLOWSPEC, *PIPQOS_NAMED_FLOWSPEC;
typedef struct _IPQOS_NAMED_QOSOBJECT
{
WCHAR QosObjectName[MAX_STRING_LENGTH];
QOS_OBJECT_HDR QosObjectHdr;
}
IPQOS_NAMED_QOSOBJECT, *PIPQOS_NAMED_QOSOBJECT;
//
// This MIB entry stores global config
// info for IP QOS MGR protocol.
//
typedef struct _IPQOS_GLOBAL_CONFIG
{
DWORD LoggingLevel; // Detail of debug logging in qos
ULONG NumFlowspecs; // Number of flowspecs defined
ULONG NumQosObjects; // Number of qos objects defined
// IPQOS_NAMED_FLOWSPEC FlowSpecs[0]; // Array of all flowspecs
//
// IPQOS_NAMED_QOSOBJECTS QosObjects[0]; // Array of all q objects
}
IPQOS_GLOBAL_CONFIG, *PIPQOS_GLOBAL_CONFIG;
//
// Macros to operate on global config
//
#define IPQOS_GET_FIRST_FLOWSPEC_IN_CONFIG(Config) \
(PIPQOS_NAMED_FLOWSPEC)((PUCHAR)(Config) + \
sizeof(IPQOS_GLOBAL_CONFIG)) \
#define IPQOS_GET_NEXT_FLOWSPEC_IN_CONFIG(Flowspec) \
(Flowspec + 1)
#define IPQOS_GET_FIRST_QOSOBJECT_IN_CONFIG(Config) \
(PIPQOS_NAMED_QOSOBJECT)((PUCHAR)(Config) + \
sizeof(IPQOS_GLOBAL_CONFIG) + \
(Config->NumFlowspecs * \
sizeof(IPQOS_NAMED_FLOWSPEC)))
#define IPQOS_GET_NEXT_QOSOBJECT_IN_CONFIG(QosObject) \
(PIPQOS_NAMED_QOSOBJECT)((PUCHAR) QosObject + \
FIELD_OFFSET(IPQOS_NAMED_QOSOBJECT, \
QosObjectHdr) + \
QosObject->QosObjectHdr.ObjectLength)
typedef struct _IPQOS_NAMED_FLOW
{
WCHAR SendingFlowspecName[MAX_STRING_LENGTH];
WCHAR RecvingFlowspecName[MAX_STRING_LENGTH];
ULONG NumTcObjects;
// WCHAR TcObjectNames[0];
}
IPQOS_NAMED_FLOW, *PIPQOS_NAMED_FLOW;
//
// Macros to operate on a named flow
//
#define IPQOS_GET_FIRST_OBJECT_NAME_ON_NAMED_FLOW(FlowDesc) \
(PWCHAR) ((PUCHAR)(FlowDesc) + sizeof(IPQOS_NAMED_FLOW))
#define IPQOS_GET_NEXT_OBJECT_NAME_ON_NAMED_FLOW(ObjectName) \
(ObjectName + MAX_STRING_LENGTH)
//
// Describes a generic flow description
//
typedef struct _IPQOS_IF_FLOW
{
WCHAR FlowName[MAX_STRING_LENGTH];
// Name used to identify the flow
ULONG FlowSize; // Number of bytes in description
IPQOS_NAMED_FLOW FlowDesc; // Traffic Control API def'nd flow
}
IPQOS_IF_FLOW, *PIPQOS_IF_FLOW;
//
// This MIB entry describes per-interface
// config for IP QOS MGR protocol
//
typedef struct _IPQOS_IF_CONFIG
{
DWORD QosState; // QOS State on this interface
ULONG NumFlows; // Number of flows on this "if"
// IPQOS_IF_FLOW Flows[0]; // Variable length list of flows
}
IPQOS_IF_CONFIG, *PIPQOS_IF_CONFIG;
// State of IF
#define IPQOS_STATE_DISABLED 0x00
#define IPQOS_STATE_ENABLED 0x01
//
// Macros to operate on if config
//
#define IPQOS_GET_FIRST_FLOW_ON_IF(Config) \
(PIPQOS_IF_FLOW) ((PUCHAR)(Config) + sizeof(IPQOS_IF_CONFIG))
#define IPQOS_GET_NEXT_FLOW_ON_IF(CurrFlow) \
(PIPQOS_IF_FLOW) ((PUCHAR)(CurrFlow) + (CurrFlow)->FlowSize)
//
// This MIB entry stores per-interface
// statistics for IP QOS MGR protocol.
//
typedef struct _IPQOS_GLOBAL_STATS
{
DWORD LoggingLevel; // Detail of debug logging in qos
}
IPQOS_GLOBAL_STATS, *PIPQOS_GLOBAL_STATS;
//
// This MIB entry stores per-interface
// statistics for IP QOS MGR protocol.
//
typedef struct _IPQOS_IF_STATS
{
DWORD QosState; // QOS State on this interface
ULONG NumFlows; // Number of flows on this "if"
}
IPQOS_IF_STATS, *PIPQOS_IF_STATS;
//
// This is passed as input data for MibSet
// Note that only the global config and
// interface config are writable structs.
//
typedef struct _IPQOS_MIB_SET_INPUT_DATA
{
DWORD TypeID;
DWORD IfIndex;
DWORD BufferSize;
DWORD Buffer[1];
}
IPQOS_MIB_SET_INPUT_DATA, *PIPQOS_MIB_SET_INPUT_DATA;
//
// This is passed as input data for -
// MibGet, MibGetFirst and MibGetNext
//
typedef struct _IPQOS_MIB_GET_INPUT_DATA
{
DWORD TypeID;
DWORD IfIndex;
}
IPQOS_MIB_GET_INPUT_DATA, *PIPQOS_MIB_GET_INPUT_DATA;
//
// This is passed as output data for -
// MibGet, MibGetFirst, and MibGetNext.
// [
// Note that at the end of a table
// MibGetNext wraps to the next,
// and therefore the value TypeID
// should be examined to see the
// type of data returned in output
// ]
//
typedef struct _IPQOS_MIB_GET_OUTPUT_DATA
{
DWORD TypeID;
DWORD IfIndex;
BYTE Buffer[1];
}
IPQOS_MIB_GET_OUTPUT_DATA, *PIPQOS_MIB_GET_OUTPUT_DATA;
#endif // __IPQOSRM_H_