You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
242 lines
6.2 KiB
242 lines
6.2 KiB
/*++
|
|
|
|
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_
|
|
|