mirror of https://github.com/lianthony/NT4.0
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.
443 lines
12 KiB
443 lines
12 KiB
/*++ BUILD Version: 0000 // Increment this if a change has global effects
|
|
|
|
Copyright (c) 1994 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
ndiswan.h
|
|
|
|
Abstract:
|
|
|
|
Main header file for the wan wrapper
|
|
|
|
Author:
|
|
|
|
Thomas J. Dimitri (TommyD) 20-Feb-1994
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
|
|
#ifndef _NDIS_WAN_
|
|
#define _NDIS_WAN_
|
|
|
|
//
|
|
//
|
|
//
|
|
//
|
|
// Begin definitions for WANs
|
|
//
|
|
//
|
|
//
|
|
//
|
|
|
|
//
|
|
// Bit field set int he Reserved field for
|
|
// NdisRegisterMiniport or passed in NdisRegisterSpecial
|
|
//
|
|
|
|
#define NDIS_USE_WAN_WRAPPER 0x00000001
|
|
|
|
#define NDIS_STATUS_TAPI_INDICATION ((NDIS_STATUS)0x40010080L)
|
|
|
|
|
|
//
|
|
// NDIS WAN Framing bits
|
|
//
|
|
#define RAS_FRAMING 0x00000001
|
|
#define RAS_COMPRESSION 0x00000002
|
|
|
|
#define PPP_MULTILINK_FRAMING 0x00000010
|
|
#define PPP_SHORT_SEQUENCE_HDR_FORMAT 0x00000020
|
|
|
|
#define PPP_FRAMING 0x00000100
|
|
#define PPP_COMPRESS_ADDRESS_CONTROL 0x00000200
|
|
#define PPP_COMPRESS_PROTOCOL_FIELD 0x00000400
|
|
#define PPP_ACCM_SUPPORTED 0x00000800
|
|
|
|
#define SLIP_FRAMING 0x00001000
|
|
#define SLIP_VJ_COMPRESSION 0x00002000
|
|
#define SLIP_VJ_AUTODETECT 0x00004000
|
|
|
|
#define MEDIA_NRZ_ENCODING 0x00010000
|
|
#define MEDIA_NRZI_ENCODING 0x00020000
|
|
#define MEDIA_NLPID 0x00040000
|
|
|
|
#define RFC_1356_FRAMING 0x00100000
|
|
#define RFC_1483_FRAMING 0x00200000
|
|
#define RFC_1490_FRAMING 0x00400000
|
|
|
|
#define SHIVA_FRAMING 0x01000000
|
|
#define NBF_PRESERVE_MAC_ADDRESS 0x01000000
|
|
|
|
#define PASS_THROUGH_MODE 0x10000000
|
|
#define RAW_PASS_THROUGH_MODE 0x20000000
|
|
#define TAPI_PROVIDER 0x80000000
|
|
|
|
//
|
|
// NDIS WAN Information structure
|
|
//
|
|
typedef struct _NDIS_WAN_INFO {
|
|
OUT ULONG MaxFrameSize;
|
|
OUT ULONG MaxTransmit;
|
|
OUT ULONG HeaderPadding;
|
|
OUT ULONG TailPadding;
|
|
OUT ULONG Endpoints;
|
|
OUT UINT MemoryFlags;
|
|
OUT NDIS_PHYSICAL_ADDRESS HighestAcceptableAddress;
|
|
OUT ULONG FramingBits;
|
|
OUT ULONG DesiredACCM;
|
|
} NDIS_WAN_INFO, *PNDIS_WAN_INFO;
|
|
|
|
|
|
typedef struct _NDIS_WAN_PACKET {
|
|
LIST_ENTRY WanPacketQueue;
|
|
PUCHAR CurrentBuffer;
|
|
ULONG CurrentLength;
|
|
PUCHAR StartBuffer;
|
|
PUCHAR EndBuffer;
|
|
PVOID ProtocolReserved1;
|
|
PVOID ProtocolReserved2;
|
|
PVOID ProtocolReserved3;
|
|
PVOID ProtocolReserved4;
|
|
PVOID MacReserved1;
|
|
PVOID MacReserved2;
|
|
PVOID MacReserved3;
|
|
PVOID MacReserved4;
|
|
} NDIS_WAN_PACKET, *PNDIS_WAN_PACKET;
|
|
|
|
typedef struct _NDIS_WAN_SET_LINK_INFO {
|
|
IN NDIS_HANDLE NdisLinkHandle;
|
|
IN ULONG MaxSendFrameSize;
|
|
IN ULONG MaxRecvFrameSize;
|
|
ULONG HeaderPadding;
|
|
ULONG TailPadding;
|
|
IN ULONG SendFramingBits;
|
|
IN ULONG RecvFramingBits;
|
|
IN ULONG SendCompressionBits;
|
|
IN ULONG RecvCompressionBits;
|
|
IN ULONG SendACCM;
|
|
IN ULONG RecvACCM;
|
|
} NDIS_WAN_SET_LINK_INFO, *PNDIS_WAN_SET_LINK_INFO;
|
|
|
|
typedef struct _NDIS_WAN_GET_LINK_INFO {
|
|
IN NDIS_HANDLE NdisLinkHandle;
|
|
OUT ULONG MaxSendFrameSize;
|
|
OUT ULONG MaxRecvFrameSize;
|
|
OUT ULONG HeaderPadding;
|
|
OUT ULONG TailPadding;
|
|
OUT ULONG SendFramingBits;
|
|
OUT ULONG RecvFramingBits;
|
|
OUT ULONG SendCompressionBits;
|
|
OUT ULONG RecvCompressionBits;
|
|
OUT ULONG SendACCM;
|
|
OUT ULONG RecvACCM;
|
|
} NDIS_WAN_GET_LINK_INFO, *PNDIS_WAN_GET_LINK_INFO;
|
|
|
|
//
|
|
// NDIS WAN Bridging Options
|
|
//
|
|
#define BRIDGING_FLAG_LANFCS 0x00000001
|
|
#define BRIDGING_FLAG_LANID 0x00000002
|
|
#define BRIDGING_FLAG_PADDING 0x00000004
|
|
|
|
//
|
|
// NDIS WAN Bridging Capabilities
|
|
//
|
|
#define BRIDGING_TINYGRAM 0x00000001
|
|
#define BRIDGING_LANID 0x00000002
|
|
#define BRIDGING_NO_SPANNING_TREE 0x00000004
|
|
#define BRIDGING_8021D_SPANNING_TREE 0x00000008
|
|
#define BRIDGING_8021G_SPANNING_TREE 0x00000010
|
|
#define BRIDGING_SOURCE_ROUTING 0x00000020
|
|
#define BRIDGING_DEC_LANBRIDGE 0x00000040
|
|
|
|
//
|
|
// NDIS WAN Bridging Type
|
|
//
|
|
#define BRIDGING_TYPE_RESERVED 0x00000001
|
|
#define BRIDGING_TYPE_8023_CANON 0x00000002
|
|
#define BRIDGING_TYPE_8024_NO_CANON 0x00000004
|
|
#define BRIDGING_TYPE_8025_NO_CANON 0x00000008
|
|
#define BRIDGING_TYPE_FDDI_NO_CANON 0x00000010
|
|
#define BRIDGING_TYPE_8024_CANON 0x00000400
|
|
#define BRIDGING_TYPE_8025_CANON 0x00000800
|
|
#define BRIDGING_TYPE_FDDI_CANON 0x00001000
|
|
|
|
typedef struct _NDIS_WAN_GET_BRIDGE_INFO {
|
|
IN NDIS_HANDLE NdisLinkHandle;
|
|
OUT USHORT LanSegmentNumber;
|
|
OUT UCHAR BridgeNumber;
|
|
OUT UCHAR BridgingOptions;
|
|
OUT ULONG BridgingCapabilities;
|
|
OUT UCHAR BridgingType;
|
|
OUT UCHAR MacBytes[6];
|
|
} NDIS_WAN_GET_BRIDGE_INFO, *PNDIS_WAN_GET_BRIDGE_INFO;
|
|
|
|
typedef struct _NDIS_WAN_SET_BRIDGE_INFO {
|
|
IN NDIS_HANDLE NdisLinkHandle;
|
|
IN USHORT LanSegmentNumber;
|
|
IN UCHAR BridgeNumber;
|
|
IN UCHAR BridgingOptions;
|
|
IN ULONG BridgingCapabilities;
|
|
IN UCHAR BridgingType;
|
|
IN UCHAR MacBytes[6];
|
|
} NDIS_WAN_SET_BRIDGE_INFO, *PNDIS_WAN_SET_BRIDGE_INFO;
|
|
|
|
//
|
|
// NDIS WAN Compression Information
|
|
//
|
|
|
|
//
|
|
// Define MSCompType bit field, 0 disables all
|
|
//
|
|
#define NDISWAN_COMPRESSION 0x00000001
|
|
#define NDISWAN_ENCRYPTION 0x00000010
|
|
#define NDISWAN_40_ENCRYPTION 0x00000020
|
|
#define NDISWAN_128_ENCRYPTION 0x00000040
|
|
|
|
//
|
|
// Define CompType codes
|
|
//
|
|
#define COMPTYPE_OUI 0
|
|
#define COMPTYPE_NT31RAS 254
|
|
#define COMPTYPE_NONE 255
|
|
|
|
|
|
typedef struct _NDIS_WAN_COMPRESS_INFO {
|
|
UCHAR SessionKey[8];
|
|
ULONG MSCompType;
|
|
|
|
// Fields above indicate NDISWAN capabilities.
|
|
// Fields below indicate MAC-specific capabilities.
|
|
|
|
UCHAR CompType;
|
|
USHORT CompLength;
|
|
|
|
union {
|
|
struct {
|
|
UCHAR CompOUI[3];
|
|
UCHAR CompSubType;
|
|
UCHAR CompValues[32];
|
|
} Proprietary;
|
|
|
|
struct {
|
|
UCHAR CompValues[32];
|
|
} Public;
|
|
};
|
|
} NDIS_WAN_COMPRESS_INFO;
|
|
|
|
typedef NDIS_WAN_COMPRESS_INFO UNALIGNED *PNDIS_WAN_COMPRESS_INFO;
|
|
|
|
typedef struct _NDIS_WAN_GET_COMP_INFO {
|
|
IN NDIS_HANDLE NdisLinkHandle;
|
|
OUT NDIS_WAN_COMPRESS_INFO SendCapabilities;
|
|
OUT NDIS_WAN_COMPRESS_INFO RecvCapabilities;
|
|
} NDIS_WAN_GET_COMP_INFO, *PNDIS_WAN_GET_COMP_INFO;
|
|
|
|
typedef struct _NDIS_WAN_SET_COMP_INFO {
|
|
IN NDIS_HANDLE NdisLinkHandle;
|
|
IN NDIS_WAN_COMPRESS_INFO SendCapabilities;
|
|
IN NDIS_WAN_COMPRESS_INFO RecvCapabilities;
|
|
} NDIS_WAN_SET_COMP_INFO, *PNDIS_WAN_SET_COMP_INFO;
|
|
|
|
|
|
//
|
|
// NDIS WAN Statistics Information
|
|
//
|
|
|
|
typedef struct _NDIS_WAN_GET_STATS_INFO {
|
|
IN NDIS_HANDLE NdisLinkHandle;
|
|
OUT ULONG BytesSent;
|
|
OUT ULONG BytesRcvd;
|
|
OUT ULONG FramesSent;
|
|
OUT ULONG FramesRcvd;
|
|
OUT ULONG CRCErrors; // Serial-like info only
|
|
OUT ULONG TimeoutErrors; // Serial-like info only
|
|
OUT ULONG AlignmentErrors; // Serial-like info only
|
|
OUT ULONG SerialOverrunErrors; // Serial-like info only
|
|
OUT ULONG FramingErrors; // Serial-like info only
|
|
OUT ULONG BufferOverrunErrors; // Serial-like info only
|
|
OUT ULONG BytesTransmittedUncompressed; // Compression info only
|
|
OUT ULONG BytesReceivedUncompressed; // Compression info only
|
|
OUT ULONG BytesTransmittedCompressed; // Compression info only
|
|
OUT ULONG BytesReceivedCompressed; // Compression info only
|
|
} NDIS_WAN_GET_STATS_INFO, *PNDIS_WAN_GET_STATS_INFO;
|
|
|
|
|
|
typedef
|
|
NDIS_STATUS
|
|
(*NDISWANSEND_HANDLER) (
|
|
IN NDIS_HANDLE MacBindingHandle,
|
|
IN NDIS_HANDLE NdisLinkHandle,
|
|
IN PNDIS_PACKET Packet
|
|
);
|
|
|
|
|
|
#define WanMiniportSend(Status, \
|
|
NdisBindingHandle, \
|
|
NdisLinkHandle, \
|
|
WanPacket \
|
|
) \
|
|
{\
|
|
*(Status) = \
|
|
((NDISWANSEND_HANDLER)(((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->SendHandler)) ( \
|
|
((PNDIS_OPEN_BLOCK)(NdisBindingHandle))->MacBindingHandle, \
|
|
(NdisLinkHandle), \
|
|
(PNDIS_PACKET)(WanPacket)); \
|
|
}
|
|
|
|
/*
|
|
#define NdisWanSendComplete( \
|
|
NdisBindingContext, \
|
|
NdisPacket, \
|
|
Status \
|
|
) \
|
|
{\
|
|
PNDIS_MINIPORT_BLOCK Miniport = (PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle;\
|
|
PNDIS_M_OPEN_BLOCK Open;\
|
|
ASSERT(MINIPORT_AT_DPC_LEVEL);\
|
|
ASSERT(MINIPORT_LOCK_ACQUIRED(Miniport));\
|
|
Open = Miniport->OpenQueue;\
|
|
while (Open != NULL) {\
|
|
NdisDprReleaseSpinLock(&Miniport->Lock);\
|
|
(Open->ProtocolHandle->ProtocolCharacteristics.SendCompleteHandler) (\
|
|
Open->ProtocolBindingContext, \
|
|
(PNDIS_PACKET)(NdisPacket), \
|
|
(Status)); \
|
|
NdisDprAcquireSpinLock(&Miniport->Lock);\
|
|
Open = Open->MiniportNextOpen;\
|
|
}\
|
|
}
|
|
*/
|
|
|
|
EXPORT
|
|
VOID
|
|
NdisMWanSendComplete(
|
|
IN NDIS_HANDLE MiniportAdapterHandle,
|
|
IN PVOID Packet,
|
|
IN NDIS_STATUS Status
|
|
);
|
|
|
|
#define NdisWanSendComplete( \
|
|
NdisBindingContext, \
|
|
WanPacket, \
|
|
Status \
|
|
) \
|
|
{\
|
|
(((PNDIS_OPEN_BLOCK)(NdisBindingContext))->SendCompleteHandler) ( \
|
|
((PNDIS_OPEN_BLOCK)(NdisBindingContext))->ProtocolBindingContext, \
|
|
(PNDIS_PACKET)(WanPacket), \
|
|
(Status)); \
|
|
}
|
|
|
|
|
|
EXPORT
|
|
VOID
|
|
NdisMWanIndicateReceive(
|
|
OUT PNDIS_STATUS Status,
|
|
IN NDIS_HANDLE MiniportAdapterHandle,
|
|
IN NDIS_HANDLE NdisLinkContext,
|
|
IN PUCHAR Packet,
|
|
IN ULONG PacketSize
|
|
);
|
|
|
|
|
|
typedef
|
|
NDIS_STATUS
|
|
(*WAN_RECEIVE_HANDLER) (
|
|
IN NDIS_HANDLE NdisLinkContext,
|
|
IN PUCHAR Packet,
|
|
IN ULONG PacketSize
|
|
);
|
|
|
|
|
|
#define NdisWanIndicateReceive( \
|
|
Status, \
|
|
NdisBindingContext, \
|
|
NdisLinkContext, \
|
|
Packet, \
|
|
PacketSize \
|
|
) \
|
|
{\
|
|
*(Status) = \
|
|
((WAN_RECEIVE_HANDLER)(((PNDIS_OPEN_BLOCK)(NdisBindingContext))\
|
|
->PostNt31ReceiveHandler)) ( \
|
|
(NdisLinkContext), \
|
|
(Packet), \
|
|
(PacketSize)); \
|
|
}
|
|
|
|
|
|
typedef
|
|
VOID
|
|
(*WAN_RECEIVE_COMPLETE_HANDLER) (
|
|
IN NDIS_HANDLE NdisLinkContext
|
|
);
|
|
|
|
|
|
EXPORT
|
|
VOID
|
|
NdisMWanIndicateReceiveComplete(
|
|
IN NDIS_HANDLE MiniportAdapterHandle,
|
|
IN NDIS_HANDLE NdisLinkContext
|
|
);
|
|
|
|
#define NdisWanIndicateReceiveComplete( \
|
|
NdisBindingContext, \
|
|
NdisLinkContext) \
|
|
{\
|
|
((WAN_RECEIVE_COMPLETE_HANDLER)(((PNDIS_OPEN_BLOCK)(NdisBindingContext))\
|
|
->PostNt31ReceiveCompleteHandler)) ( \
|
|
(NdisLinkContext));\
|
|
}
|
|
|
|
|
|
#define NdisMWanInitializeWrapper( \
|
|
NdisWrapperHandle, \
|
|
SystemSpecific1, \
|
|
SystemSpecific2, \
|
|
SystemSpecific3 \
|
|
) \
|
|
{\
|
|
NdisMInitializeWrapper(NdisWrapperHandle, \
|
|
SystemSpecific1,\
|
|
SystemSpecific2,\
|
|
SystemSpecific3 \
|
|
);\
|
|
}
|
|
|
|
typedef struct _NDIS_MAC_LINE_UP {
|
|
IN ULONG LinkSpeed;
|
|
IN NDIS_WAN_QUALITY Quality;
|
|
IN USHORT SendWindow;
|
|
IN NDIS_HANDLE ConnectionWrapperID;
|
|
IN NDIS_HANDLE NdisLinkHandle;
|
|
OUT NDIS_HANDLE NdisLinkContext;
|
|
} NDIS_MAC_LINE_UP, *PNDIS_MAC_LINE_UP;
|
|
|
|
|
|
typedef struct _NDIS_MAC_LINE_DOWN {
|
|
IN NDIS_HANDLE NdisLinkContext;
|
|
} NDIS_MAC_LINE_DOWN, *PNDIS_MAC_LINE_DOWN;
|
|
|
|
|
|
//
|
|
// These are the error values that can be indicated by the driver.
|
|
// This bit field is set when calling NdisIndicateStatus.
|
|
//
|
|
#define WAN_ERROR_CRC ((ULONG)0x00000001)
|
|
#define WAN_ERROR_FRAMING ((ULONG)0x00000002)
|
|
#define WAN_ERROR_HARDWAREOVERRUN ((ULONG)0x00000004)
|
|
#define WAN_ERROR_BUFFEROVERRUN ((ULONG)0x00000008)
|
|
#define WAN_ERROR_TIMEOUT ((ULONG)0x00000010)
|
|
#define WAN_ERROR_ALIGNMENT ((ULONG)0x00000020)
|
|
|
|
typedef struct _NDIS_MAC_FRAGMENT {
|
|
IN NDIS_HANDLE NdisLinkContext;
|
|
IN ULONG Errors;
|
|
} NDIS_MAC_FRAGMENT, *PNDIS_MAC_FRAGMENT;
|
|
|
|
|
|
#endif // _NDIS_WAN
|