193 lines
4.8 KiB
C
193 lines
4.8 KiB
C
/*++
|
|
|
|
Copyright (c) 1996 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
aaqos.h
|
|
|
|
Abstract:
|
|
|
|
QOS structures and definitions for the ATMARP module.
|
|
|
|
Revision History:
|
|
|
|
Who When What
|
|
-------- -------- ----------------------------------------------
|
|
arvindm 08-07-96 Created
|
|
|
|
Notes:
|
|
|
|
--*/
|
|
|
|
#ifndef _AAQOS__H
|
|
#define _AAQOS__H
|
|
|
|
//
|
|
// Encapsulation method used on a VC.
|
|
//
|
|
typedef enum
|
|
{
|
|
ENCAPSULATION_TYPE_LLCSNAP, // LLC/SNAP encapsulation
|
|
ENCAPSULATION_TYPE_NULL // NULL encapsulation
|
|
|
|
} ATMARP_VC_ENCAPSULATION_TYPE, *PATMARP_VC_ENCAPSULATION_TYPE;
|
|
|
|
|
|
//
|
|
// Flow specifications for an ATMARP connection.
|
|
//
|
|
typedef struct _ATMARP_FLOW_SPEC
|
|
{
|
|
ULONG SendAvgBandwidth; // Bytes/sec
|
|
ULONG SendPeakBandwidth; // Bytes/sec
|
|
ULONG SendMaxSize; // Bytes
|
|
SERVICETYPE SendServiceType;
|
|
ULONG ReceiveAvgBandwidth; // Bytes/sec
|
|
ULONG ReceivePeakBandwidth; // Bytes/sec
|
|
ULONG ReceiveMaxSize; // Bytes
|
|
SERVICETYPE ReceiveServiceType;
|
|
ATMARP_VC_ENCAPSULATION_TYPE Encapsulation;
|
|
ULONG AgingTime;
|
|
|
|
} ATMARP_FLOW_SPEC, *PATMARP_FLOW_SPEC;
|
|
|
|
|
|
//
|
|
// Filter specifications for an ATMARP connection.
|
|
//
|
|
typedef struct _ATMARP_FILTER_SPEC
|
|
{
|
|
ULONG DestinationPort;// IP port number
|
|
|
|
} ATMARP_FILTER_SPEC, *PATMARP_FILTER_SPEC;
|
|
|
|
//
|
|
// The wild-card IP port number matches all destination ports
|
|
//
|
|
#define AA_IP_PORT_WILD_CARD ((ULONG)-1)
|
|
|
|
//
|
|
// The instance name of a flow is a FIXED size array, of the form below,
|
|
// and is embedded in the ATMARP_FLOW_INFO struct.
|
|
// The 8-character all-zeros field is filled in with the "flow number", which
|
|
// is guaranteed to be unique across all existing flows within atmarpc (
|
|
// the number may be recycled as flows come and go).
|
|
// The "A993E347" constant is a random number that represents a signature
|
|
// that with high probability is unique to atmarpc.
|
|
//
|
|
// We should re-visit this naming scheme once QOS mandates a more structured
|
|
// mechanism for naming flows.
|
|
//
|
|
#define AA_FLOW_INSTANCE_NAME_TEMPLATE L"00000000:A993E347"
|
|
#define AA_FLOW_INSTANCE_NAME_LEN \
|
|
((sizeof(AA_FLOW_INSTANCE_NAME_TEMPLATE)/sizeof(WCHAR))-1)
|
|
|
|
//
|
|
// The FLOW INFO structure represents a flow instantiated by, for
|
|
// example, RSVP.
|
|
//
|
|
// One of these structures is created when the Generic Packet Classifier
|
|
// (GPC) notifies us about a flow creation.
|
|
//
|
|
typedef struct _ATMARP_FLOW_INFO
|
|
{
|
|
struct _ATMARP_FLOW_INFO * pNextFlow;
|
|
struct _ATMARP_FLOW_INFO * pPrevFlow;
|
|
#ifdef GPC
|
|
PVOID VcContext;
|
|
GPC_HANDLE CfInfoHandle;
|
|
WCHAR FlowInstanceName[AA_FLOW_INSTANCE_NAME_LEN];
|
|
#endif // GPC
|
|
ULONG PacketSizeLimit;
|
|
ATMARP_FILTER_SPEC FilterSpec;
|
|
ATMARP_FLOW_SPEC FlowSpec;
|
|
|
|
} ATMARP_FLOW_INFO, *PATMARP_FLOW_INFO;
|
|
|
|
|
|
#ifdef QOS_HEURISTICS
|
|
|
|
|
|
typedef enum _ATMARP_FLOW_TYPES
|
|
{
|
|
AA_FLOW_TYPE_LOW_BW,
|
|
AA_FLOW_TYPE_HIGH_BW,
|
|
AA_FLOW_TYPE_MAX
|
|
|
|
} ATMARP_FLOW_TYPES;
|
|
|
|
|
|
//
|
|
// Default QOS parameters for a Low Bandwidth VC
|
|
//
|
|
#define AAF_DEF_LOWBW_SEND_BANDWIDTH 6000 // Bytes/Sec
|
|
#define AAF_DEF_LOWBW_RECV_BANDWIDTH 6000 // Bytes/Sec
|
|
#define AAF_DEF_LOWBW_SERVICETYPE SERVICETYPE_BESTEFFORT
|
|
#define AAF_DEF_LOWBW_ENCAPSULATION ENCAPSULATION_TYPE_LLCSNAP
|
|
#define AAF_DEF_LOWBW_AGING_TIME 30 // Seconds
|
|
#define AAF_DEF_LOWBW_SEND_THRESHOLD 1024 // Bytes
|
|
|
|
#define AAF_DEF_HIGHBW_SEND_BANDWIDTH 250000 // Bytes/Sec
|
|
#define AAF_DEF_HIGHBW_RECV_BANDWIDTH 6000 // Bytes/Sec
|
|
#define AAF_DEF_HIGHBW_SERVICETYPE SERVICETYPE_GUARANTEED
|
|
#define AAF_DEF_HIGHBW_ENCAPSULATION ENCAPSULATION_TYPE_LLCSNAP
|
|
#define AAF_DEF_HIGHBW_AGING_TIME 10 // Seconds
|
|
|
|
#endif // QOS_HEURISTICS
|
|
|
|
//
|
|
// Filter and Flow spec extractor function template:
|
|
// Given a packet, it extracts flow and filter info out of it.
|
|
//
|
|
typedef
|
|
VOID
|
|
(*PAA_GET_PACKET_SPEC_FUNC)(
|
|
IN PVOID Context,
|
|
IN PNDIS_PACKET pNdisPacket,
|
|
OUT PATMARP_FLOW_INFO *ppFlowInfo,
|
|
OUT PATMARP_FLOW_SPEC * ppFlowSpec,
|
|
OUT PATMARP_FILTER_SPEC * ppFilterSpec
|
|
);
|
|
|
|
#define NULL_PAA_GET_PACKET_SPEC_FUNC ((PAA_GET_PACKET_SPEC_FUNC)NULL)
|
|
|
|
//
|
|
// Flow-spec matcher function template
|
|
//
|
|
typedef
|
|
BOOLEAN
|
|
(*PAA_FLOW_SPEC_MATCH_FUNC)(
|
|
IN PVOID Context,
|
|
IN PATMARP_FLOW_SPEC pSourceFlowSpec,
|
|
IN PATMARP_FLOW_SPEC pTargetFlowSpec
|
|
);
|
|
|
|
#define NULL_PAA_FLOW_SPEC_MATCH_FUNC ((PAA_FLOW_SPEC_MATCH_FUNC)NULL)
|
|
|
|
|
|
//
|
|
// Filter-spec matcher function template
|
|
//
|
|
typedef
|
|
BOOLEAN
|
|
(*PAA_FILTER_SPEC_MATCH_FUNC)(
|
|
IN PVOID Context,
|
|
IN PATMARP_FILTER_SPEC pSourceFilterSpec,
|
|
IN PATMARP_FILTER_SPEC pTargetFilterSpec
|
|
);
|
|
|
|
#define NULL_PAA_FILTER_SPEC_MATCH_FUNC ((PAA_FILTER_SPEC_MATCH_FUNC)NULL)
|
|
|
|
|
|
#ifdef GPC
|
|
|
|
#define GpcRegisterClient (pAtmArpGlobalInfo->GpcCalls.GpcRegisterClientHandler)
|
|
#define GpcClassifyPacket (AtmArpGpcClassifyPacketHandler)
|
|
#define GpcDeregisterClient (pAtmArpGlobalInfo->GpcCalls.GpcDeregisterClientHandler)
|
|
#define GpcGetCfInfoClientContext (AtmArpGpcGetCfInfoClientContextHandler)
|
|
|
|
#endif // GPC
|
|
|
|
#endif // _AAQOS__H
|