windows-nt/Source/XPSP1/NT/net/atm/rawwan/tdi/atmsp.h
2020-09-26 16:20:57 +08:00

140 lines
3.3 KiB
C

/*++
Copyright (c) 1997 Microsoft Corporation
Module Name:
D:\nt\private\ntos\tdi\rawwan\atm\atmsp.h
Abstract:
Private data structure definitions for ATM-specific functions
for Raw WAN.
Revision History:
Who When What
-------- -------- ----------------------------------------------
arvindm 06-03-97 Created
Notes:
--*/
#ifndef __TDI_ATM_ATMSP__H
#define __TDI_ATM_ATMSP__H
//
// ATM-specific module's context for an NDIS AF open.
//
typedef struct _ATMSP_AF_BLOCK
{
RWAN_HANDLE RWanAFHandle;
LIST_ENTRY AfBlockLink; // To list of AF Blocks
NDIS_CO_LINK_SPEED LineRate; // supported by adapter
ULONG MaxPacketSize; // supported by adapter
ATMSP_QOS DefaultQoS;
ULONG DefaultQoSLength;
} ATMSP_AF_BLOCK, *PATMSP_AF_BLOCK;
//
// ATM-specific module's context for a TDI Address Object.
//
typedef struct _ATMSP_ADDR_BLOCK
{
RWAN_HANDLE RWanAddrHandle;
ULONG RefCount;
ULONG Flags;
ATMSP_CONNECTION_ID ConnectionId; // Set via SIO_ASSOCIATE_PVC
LIST_ENTRY ConnList; // List of associated conn blocks
NDIS_SPIN_LOCK Lock; // For above list.
} ATMSP_ADDR_BLOCK, *PATMSP_ADDR_BLOCK;
#define ATMSPF_ADDR_PVC_ID_SET 0x00000001
//
// ATM-specific module's context for a TDI Connection Object that is
// associated with an address object.
//
typedef struct _ATMSP_CONN_BLOCK
{
RWAN_HANDLE RWanConnHandle;
PATMSP_ADDR_BLOCK pAddrBlock;
LIST_ENTRY ConnLink; // To List of Conn Blocks
ATMSP_CONNECTION_ID ConnectionId; // Set after conn setup
} ATMSP_CONN_BLOCK, *PATMSP_CONN_BLOCK;
//
// Global data structure.
//
typedef struct _ATMSP_GLOBAL_INFO
{
RWAN_HANDLE RWanSpHandle;
RWAN_NDIS_AF_CHARS AfChars;
RWAN_HANDLE RWanProtHandle;
NDIS_STRING AtmSpDeviceName;
LARGE_INTEGER StartTime;
LIST_ENTRY AfList; // List of AF Blocks
ULONG AfListSize; // Size of above
RWAN_TDI_PROTOCOL_CHARS TdiChars;
} ATMSP_GLOBAL_INFO, *PATMSP_GLOBAL_INFO;
#define ATMSP_AF_MAJOR_VERSION 3
#define ATMSP_AF_MINOR_VERSION 1
//
// Overlayed at the AddressType field of struct _TA_ADDRESS is the
// Sockets ATM address structure, sockaddr_atm, which is defined as
//
// typedef struct sockaddr_atm {
// u_short satm_family;
// ATM_ADDRESS satm_number;
// ATM_BHLI satm_bhli;
// ATM_BLLI satm_blli;
// } sockaddr_atm;
//
// Ideally we want satm_number to be overlayed with the first byte
// of Address[] in the _TA_ADDRESS structure, but because of 4-byte
// packing of sockaddr_atm, there is a hidden u_short just following
// satm_family.
//
// The following macro accesses the "true" local version of the ATM
// socket address given a pointer to the start of Address[i] within
// struct _TA_ADDRESS.
//
#define TA_POINTER_TO_ATM_ADDR_POINTER(_pTransportAddr) \
(ATMSP_SOCKADDR_ATM UNALIGNED *)((PUCHAR)(_pTransportAddr) + sizeof(USHORT))
//
// The following macro defines the length of an ATM address as required
// in a TA_ADDRESS Length field.
//
#define TA_ATM_ADDRESS_LENGTH (sizeof(ATMSP_SOCKADDR_ATM) + sizeof(USHORT))
//
// Header length of a Transport Address.
//
#define TA_HEADER_LENGTH (FIELD_OFFSET(TRANSPORT_ADDRESS, Address->Address))
typedef struct _ATMSP_EVENT
{
NDIS_EVENT Event;
NDIS_STATUS Status;
} ATMSP_EVENT, *PATMSP_EVENT;
#endif // __TDI_ATM_ATMSP__H