windows-nt/Source/XPSP1/NT/termsrv/cdmodem/inc/wanioctl.h
2020-09-26 16:20:57 +08:00

754 lines
32 KiB
C

/*++
Copyright (c) 1994 Microsoft Corporation
Module Name:
wanioctl.h
Abstract:
This is the main file for the NdisWan Driver for the Remote Access
Service. This driver conforms to the NDIS 3.0 interface.
Author:
Thomas J. Dimitri (TommyD) 08-May-1992
Environment:
Kernel Mode - Or whatever is the equivalent on OS/2 and DOS.
Revision History:
--*/
// All AsyncMac errors start with this base number
#define ASYBASE 700
// The Mac has not bound to an upper protocol, or the
// previous binding to AsyncMac has been destroyed.
#define ASYNC_ERROR_NO_ADAPTER ASYBASE+0
// A port was attempted to be open that was not CLOSED yet.
#define ASYNC_ERROR_ALREADY_OPEN ASYBASE+1
// All the ports (allocated) are used up or there is
// no binding to the AsyncMac at all (and thus no ports).
// The number of ports allocated comes from the registry.
#define ASYNC_ERROR_NO_PORT_AVAILABLE ASYBASE+2
// In the open IOCtl to the AsyncParameter the Adapter
// parameter passed was invalid.
#define ASYNC_ERROR_BAD_ADAPTER_PARAM ASYBASE+3
// During a close or compress request, the port
// specified did not exist.
#define ASYNC_ERROR_PORT_NOT_FOUND ASYBASE+4
// A request came in for the port which could not
// be handled because the port was in a bad state.
// i.e. you can't a close a port if its state is OPENING
#define ASYNC_ERROR_PORT_BAD_STATE ASYBASE+5
// A call to ASYMAC_COMPRESS was bad with bad
// parameters. That is, parameters that were not
// supported. The fields will not be set to the bad params.
#define ASYNC_ERROR_BAD_COMPRESSION_INFO ASYBASE+6
//-------------- NDISWAN SPECIFIC RETURN CODES --------------------
// A request for information came in for an endpoint handle
// which does not exist (out of range)
#define NDISWAN_ERROR_BAD_ENDPOINT ASYBASE+40
// A request for information came in for a protocol handle
// which does not exist (out of range)
#define NDISWAN_ERROR_BAD_PROTOCOL ASYBASE+41
// A request for a route which already existed came in
#define NDISWAN_ERROR_ALREADY_ROUTED ASYBASE+42
// A request for a route exceeded the routing tables capabilities
#define NDISWAN_ERROR_TOO_MANY_ROUTES ASYBASE+43
// Send packet has wrong packet size
#define NDISWAN_ERROR_BAD_PACKET_SIZE ASYBASE+44
// BindAddress has an address already used as an endpoint (duplicate address)
#define NDISWAN_ERROR_BAD_ADDRESS ASYBASE+45
// Endpoint has an address already bound to it
#define NDISWAN_ERROR_ALREADY_BOUND ASYBASE+46
// Endpoint was routed without being bound to a remote address
#define NDISWAN_ERROR_NOT_BOUND_YET ASYBASE+47
// Here we define the DevIOCtl code for the ndiswan
//
// IOCTLs for user-mode requests.
//
// Token-ring and Ethernet address lengths
#define IEEE_ADDRESS_LENGTH 6
// The max packet size information should be picked in a call!!!
// Maximum size of packet that can be sent/rcvd via NDISWAN_SENDPKT/RECVPKT
#define PACKET_SIZE 1500
// Two 6 byte addreses plus the type/length field (used in RECVPKT)
// Native addressing schemes may have a different header size!!!
#define HEADER_SIZE 14
// When unrouting an endpoint (hNdisHandle) specify the PROTOCOL_UNROUTE
#define PROTOCOL_UNROUTE 0xFFFF
// we need to get this device defined in sdk\inc\devioctl.h
// for now, I will use 30, since no one is using it yet!
// Beware that the NDIS Wrapper uses IOCTLs based on
// FILE_DEVICE_PHYSICAL_NETCARD
//#define FILE_DEVICE_NDIS 0x30
// below is the standard method for defining IOCTLs for your
// device given that your device is unique.
// we need to get this device defined in sdk\inc\devioctl.h
// for now, I will use 30, since no one is using it yet!
// Beware that the NDIS Wrapper uses IOCTLs based on
// FILE_DEVICE_PHYSICAL_NETCARD
#define FILE_DEVICE_RAS 0x30
// below is the standard method for defining IOCTLs for your
// device given that your device is unique.
#define _RAS_CONTROL_CODE(request,method) \
((FILE_DEVICE_RAS)<<16 | (request<<2) | method)
#define IOCTL_ASYMAC_OPEN _RAS_CONTROL_CODE(10, METHOD_BUFFERED )
#define IOCTL_ASYMAC_CLOSE _RAS_CONTROL_CODE(11, METHOD_BUFFERED )
//#define IOCTL_ASYMAC_COMPRESS _RAS_CONTROL_CODE(12, METHOD_BUFFERED )
//#define IOCTL_ASYMAC_ENUM _RAS_CONTROL_CODE(13, METHOD_BUFFERED )
//#define IOCTL_ASYMAC_GETSTATS _RAS_CONTROL_CODE(14, METHOD_BUFFERED )
#define IOCTL_ASYMAC_TRACE _RAS_CONTROL_CODE(15, METHOD_BUFFERED )
#define IOCTL_NDISWAN_ENUM _RAS_CONTROL_CODE(6, METHOD_BUFFERED )
#define IOCTL_NDISWAN_ROUTE _RAS_CONTROL_CODE(7, METHOD_BUFFERED )
#define IOCTL_NDISWAN_GETSTATS _RAS_CONTROL_CODE(8, METHOD_BUFFERED )
#define IOCTL_NDISWAN_PROTENUM _RAS_CONTROL_CODE(9, METHOD_BUFFERED )
#define IOCTL_NDISWAN_SENDPKT _RAS_CONTROL_CODE(10, METHOD_BUFFERED )
#define IOCTL_NDISWAN_RECVPKT _RAS_CONTROL_CODE(11, METHOD_BUFFERED )
#define IOCTL_NDISWAN_FLUSH _RAS_CONTROL_CODE(12, METHOD_BUFFERED )
#define IOCTL_NDISWAN_TRACE _RAS_CONTROL_CODE(13, METHOD_BUFFERED )
#define IOCTL_NDISWAN_INFO _RAS_CONTROL_CODE(24, METHOD_BUFFERED )
#define IOCTL_NDISWAN_SET_LINK_INFO _RAS_CONTROL_CODE(25, METHOD_BUFFERED )
#define IOCTL_NDISWAN_GET_LINK_INFO _RAS_CONTROL_CODE(26, METHOD_BUFFERED )
#define IOCTL_NDISWAN_SET_BRIDGE_INFO _RAS_CONTROL_CODE(27, METHOD_BUFFERED )
#define IOCTL_NDISWAN_GET_BRIDGE_INFO _RAS_CONTROL_CODE(28, METHOD_BUFFERED )
#define IOCTL_NDISWAN_SET_COMP_INFO _RAS_CONTROL_CODE(29, METHOD_BUFFERED )
#define IOCTL_NDISWAN_GET_COMP_INFO _RAS_CONTROL_CODE(30, METHOD_BUFFERED )
#define IOCTL_NDISWAN_SET_VJ_INFO _RAS_CONTROL_CODE(31, METHOD_BUFFERED )
#define IOCTL_NDISWAN_GET_VJ_INFO _RAS_CONTROL_CODE(32, METHOD_BUFFERED )
#define IOCTL_NDISWAN_SET_CIPX_INFO _RAS_CONTROL_CODE(33, METHOD_BUFFERED )
#define IOCTL_NDISWAN_GET_CIPX_INFO _RAS_CONTROL_CODE(34, METHOD_BUFFERED )
#define IOCTL_NDISWAN_SET_MULTILINK_INFO _RAS_CONTROL_CODE(35, METHOD_BUFFERED )
#define IOCTL_NDISWAN_GET_MULTILINK_INFO _RAS_CONTROL_CODE(36, METHOD_BUFFERED )
#define IOCTL_ASYMAC_DCDCHANGE _RAS_CONTROL_CODE(40, METHOD_BUFFERED )
//#define IOCTL_ASYMAC_STARTFRAMING _RAS_CONTROL_CODE(41, METHOD_BUFFERED )
#define IOCTL_NDISWAN_LINEUP _RAS_CONTROL_CODE(42, METHOD_BUFFERED )
#define IOCTL_NDISWAN_ENUM_ACTIVE_BUNDLES _RAS_CONTROL_CODE(45, METHOD_BUFFERED )
// Currently a global array of pointers is used
// which must be predefined to some constant.
// The current restriction seems to be 256
#define MAX_ENDPOINTS 256
#define MAX_PROTOCOL_BINDINGS 256
#define MAX_MAC_BINDINGS 48
#define MAC_NAME_SIZE 32
// Here we define the WanEnumBuffer structure
//------------------------------------------------------------------------
//------------------------------- ENDPOINTS ------------------------------
//------------------------------------------------------------------------
// We assume that the most number of protocols a client will run
// is three for now... that is a client can run TCP/IP, IPX, NBF at
// the same time, but not a fourth protocol.
#define MAX_ROUTES_PER_ENDPOINT 3
// The bytes transmitted, bytes received, frames received, frame transmitted
// are monitored for frame and bytes going to the output device or
// coming from the output device. If software compression used, it
// is on top of this layer.
typedef struct GENERIC_STATS GENERIC_STATS, *PGENERIC_STATS;
struct GENERIC_STATS {
ULONG BytesTransmitted; // Generic info
ULONG BytesReceived; // Generic info
ULONG FramesTransmitted; // Generic info
ULONG FramesReceived; // Generic info
};
// o CRC errors are when the 16bit V.41 CRC check fails
// o TimeoutErrors occur when inter-character delays within
// a frame are exceeded
// o AlignmentErrors occur when the SYN byte or ETX bytes which
// mark the beginning and end of frames are not found.
// o The other errors are standard UART errors returned by the serial driver
typedef struct SERIAL_STATS SERIAL_STATS, *PSERIAL_STATS;
struct SERIAL_STATS {
ULONG CRCErrors; // Serial-like info only
ULONG TimeoutErrors; // Serial-like info only
ULONG AlignmentErrors; // Serial-like info only
ULONG SerialOverrunErrors; // Serial-like info only
ULONG FramingErrors; // Serial-like info only
ULONG BufferOverrunErrors; // Serial-like info only
};
typedef struct WAN_STATS WAN_STATS, *PWAN_STATS;
struct WAN_STATS {
ULONG BytesSent;
ULONG BytesRcvd;
ULONG FramesSent;
ULONG FramesRcvd;
ULONG CRCErrors; // Serial-like info only
ULONG TimeoutErrors; // Serial-like info only
ULONG AlignmentErrors; // Serial-like info only
ULONG SerialOverrunErrors; // Serial-like info only
ULONG FramingErrors; // Serial-like info only
ULONG BufferOverrunErrors; // Serial-like info only
ULONG BytesTransmittedUncompressed; // Compression info only
ULONG BytesReceivedUncompressed; // Compression info only
ULONG BytesTransmittedCompressed; // Compression info only
ULONG BytesReceivedCompressed; // Compression info only
};
typedef struct ROUTE_INFO ROUTE_INFO, *PROUTE_INFO;
struct ROUTE_INFO {
USHORT ProtocolType; // <1500 (NetBEUI), IP, IPX, AppleTalk
NDIS_HANDLE ProtocolRoutedTo; // Handle of protocol to send/recv frames
};
//
// The structure passed up on a WAN_LINE_UP indication
//
typedef struct _ASYNC_LINE_UP {
ULONG LinkSpeed; // 100 bps units
ULONG MaximumTotalSize; // suggested max for send packets
NDIS_WAN_QUALITY Quality;
USHORT SendWindow; // suggested by the MAC
UCHAR RemoteAddress[6]; // check for in SRC field when rcv
UCHAR LocalAddress[6]; // use SRC field when sending
USHORT Endpoint; // can we get rid of this!!
USHORT ProtocolType; // protocol type
ULONG BufferLength; // length of protocol specific buffer
UCHAR Buffer[1]; // protocol specific buffer
} ASYNC_LINE_UP, *PASYNC_LINE_UP;
typedef struct _NDISMAC_LINE_UP {
IN ULONG LinkSpeed;
IN NDIS_WAN_QUALITY Quality;
IN USHORT SendWindow;
IN NDIS_HANDLE ConnectionWrapperID; // TAPI Cookie
IN NDIS_HANDLE NdisLinkHandle;
OUT NDIS_HANDLE NdisLinkContext;
} NDISMAC_LINE_UP, *PNDISMAC_LINE_UP;
typedef struct NDISWAN_INFO NDISWAN_INFO, *PNDISWAN_INFO;
struct NDISWAN_INFO {
ULONG MaxFrameSize;
ULONG MaxTransmit;
ULONG HeaderPadding;
ULONG TailPadding;
ULONG Endpoints;
UINT MemoryFlags;
NDIS_PHYSICAL_ADDRESS HighestAcceptableAddress;
ULONG FramingBits;
ULONG DesiredACCM;
ULONG MaxReconstructedFrameSize;
};
//------------------------------------------------------------------------
//----------------------------- PROTOCOL INFO ----------------------------
//------------------------------------------------------------------------
// There is a PROTOCOL_INFO struct per NDIS protocol binding to NdisWan.
// NOTE: Most protocols will bind multiple times to the NdisWan.
#define PROTOCOL_NBF 0x80D5
#define PROTOCOL_IP 0x0800
#define PROTOCOL_ARP 0x0806
#define PROTOCOL_IPX 0x8137
#define PROTOCOL_APPLETALK 0x80F3
#define PROTOCOL_XNS 0x0807
typedef struct PROTOCOL_INFO PROTOCOL_INFO, *PPROTOCOL_INFO;
struct PROTOCOL_INFO {
NDIS_HANDLE hProtocolHandle; // Order at which protocol bound to NdisWan
ULONG NumOfRoutes; // Num of routes this endpoint has
NDIS_MEDIUM MediumType; // NdisMedium802_5, NdisMediumAsync
USHORT ProtocolType; // EtherType of NBF, IP, IPX, AppleTalk..
USHORT AdapterNameLength; // Up to 16...
WCHAR AdapterName[MAC_NAME_SIZE];
// First 16 chars of MAC name
// like "NdisWan01"
// Used to figure out LANA..
NDIS_HANDLE MacBindingHandle;
NDIS_HANDLE MacAdapterContext; // needed by NdisMan or me?
NDIS_HANDLE NdisBindingContext; // needed by NdisMan or me?
};
typedef struct PROTOCOL_ENUM_BUFFER PROTOCOL_ENUM_BUFFER, *PPROTOCOL_ENUM_BUFFER;
struct PROTOCOL_ENUM_BUFFER {
ULONG NumOfProtocols; // One for each NDIS Upper Binding
// Not for each DIFFERENT Protocol
PROTOCOL_INFO ProtocolInfo[];
};
typedef struct _ENUM_ACTIVE_BUNDLES ENUM_ACTIVE_BUNDLES, *PENUM_ACTIVE_BUNDLES;
struct _ENUM_ACTIVE_BUNDLES {
ULONG NumberOfActiveBundles;
};
//------------------------------------------------------------------------
//------------------------ ASYMAC IOCTL STRUCTS --------------------------
//------------------------------------------------------------------------
// this structure is passed in as the input buffer when opening a port
typedef struct ASYMAC_OPEN ASYMAC_OPEN, *PASYMAC_OPEN;
struct ASYMAC_OPEN {
OUT NDIS_HANDLE hNdisEndpoint; // unique for each endpoint assigned
IN ULONG LinkSpeed; // RAW link speed in bits per sec
IN USHORT QualOfConnect; // NdisAsyncRaw, NdisAsyncErrorControl, ...
IN HANDLE FileHandle; // the Win32 or Nt File Handle
};
// this structure is passed in as the input buffer when closing a port
typedef struct ASYMAC_CLOSE ASYMAC_CLOSE, *PASYMAC_CLOSE;
struct ASYMAC_CLOSE {
NDIS_HANDLE hNdisEndpoint; // unique for each endpoint assigned
PVOID MacAdapter; // Which binding to AsyMac to use -- if set
// to NULL, will default to last binding
};
typedef struct ASYMAC_DCDCHANGE ASYMAC_DCDCHANGE, *PASYMAC_DCDCHANGE;
struct ASYMAC_DCDCHANGE {
NDIS_HANDLE hNdisEndpoint; // unique for each endpoint assigned
PVOID MacAdapter; // Which binding to AsyMac to use -- if set
// to NULL, will default to last binding
};
// this structure is used to read/set configurable 'feature' options
// during authentication this structure is passed and an
// agreement is made which features to support
typedef struct ASYMAC_FEATURES ASYMAC_FEATURES, *PASYMAC_FEATURES;
struct ASYMAC_FEATURES {
ULONG SendFeatureBits; // A bit field of compression/features sendable
ULONG RecvFeatureBits; // A bit field of compression/features receivable
ULONG MaxSendFrameSize; // Maximum frame size that can be sent
// must be less than or equal default
ULONG MaxRecvFrameSize; // Maximum frame size that can be rcvd
// must be less than or equal default
ULONG LinkSpeed; // New RAW link speed in bits/sec
// Ignored if 0
};
// TransmittedUncompressed are the number of bytes that the compressor
// saw BEFORE attempting to compress the data (top end)
// TransmitCompressed is the bottom end of the compressor which
// is equal to the amount of bytes the compressor spat out (after compression)
// This only counts bytes that went THROUGH the compression mechanism
// Small frames and multi-cast frames (typically) do not get compressed.
typedef struct COMPRESSION_STATS COMPRESSION_STATS, *PCOMPRESSION_STATS;
struct COMPRESSION_STATS {
ULONG BytesTransmittedUncompressed; // Compression info only
ULONG BytesReceivedUncompressed; // Compression info only
ULONG BytesTransmittedCompressed; // Compression info only
ULONG BytesReceivedCompressed; // Compression info only
};
//------------------------------------------------------------------------
//------------------------ NDISWAN IOCTL STRUCTS --------------------------
//------------------------------------------------------------------------
// Define for PACKET_FLAGS
#define PACKET_IS_DIRECT 0x01
#define PACKET_IS_BROADCAST 0x02
#define PACKET_IS_MULTICAST 0x04
// Define for FLUSH_FLAGS
#define FLUSH_RECVPKT 0x01
#define FLUSH_SENDPKT 0x02
// The packet just contains data (no IEEE addresses or anything)
// Should it?? Get rid of PACKET_FLAGS??
typedef struct PACKET PACKET, *PPACKET;
struct PACKET {
UCHAR PacketData[1];
};
// When unrouting an endpoint (hNdisHandle) specify the PROTOCOL_UNROUTE
#define PROTOCOL_UNROUTE 0xFFFF
// This structure is passed in as the input buffer when routing
typedef struct NDISWAN_ROUTE NDISWAN_ROUTE, *PNDISWAN_ROUTE;
struct NDISWAN_ROUTE {
NDIS_HANDLE hNdisEndpoint; // The NdisMan/NdisWan/AsyMac endpoint
NDIS_HANDLE hProtocolHandle; // The upper unique protocol (up to 3)
ASYNC_LINE_UP AsyncLineUp; // Include the protocol specific field
};
// This structure is passed in AND out as the input buffer AND
// the output buffer when receiving and sending a frame.
typedef struct NDISWAN_PKT NDISWAN_PKT, *PNDISWAN_PKT;
struct NDISWAN_PKT { // Event is singalled via IOCtl mechanisms
NDIS_HANDLE hNdisEndpoint; // The NdisMan/NdisWan/AsyMac endpoint
USHORT PacketFlags; // Broadcast, Multicast, Directed..
USHORT PacketSize; // Size of packet below (including the header)
USHORT HeaderSize; // Size of header inside packet
PACKET Packet; // Not a pointer -- entire packet struct
// We cannot use a PTR because it
// cannot be probed easily...
// Packet looks like - header data + sent data
// HeaderSize of 0 is valid for sends
};
typedef struct NDISWAN_FLUSH NDISWAN_FLUSH, *PNDISWAN_FLUSH;
struct NDISWAN_FLUSH { // Event is singalled via IOCtl mechanisms
NDIS_HANDLE hNdisEndpoint; // The NdisMan/NdisWan/AsyMac endpoint
USHORT FlushFlags; // Recv | Xmit flush (or both)
};
// This structure is passed in AND out as the input buffer AND
// the output buffer when get stats on an endpoint
typedef struct NDISWAN_GETSTATS NDISWAN_GETSTATS, *PNDISWAN_GETSTATS;
struct NDISWAN_GETSTATS {
NDIS_HANDLE hNdisEndpoint; // The NdisMan/NdisWan/AsyMac endpoint
WAN_STATS WanStats; // Not a PTR. Entire statistics
// structure
};
typedef struct NDISWAN_SET_LINK_INFO NDISWAN_SET_LINK_INFO, *PNDISWAN_SET_LINK_INFO;
struct NDISWAN_SET_LINK_INFO {
NDIS_HANDLE hNdisEndpoint; // The NdisMan/NdisWan endpoint
ULONG MaxSendFrameSize;
ULONG MaxRecvFrameSize;
ULONG HeaderPadding;
ULONG TailPadding;
ULONG SendFramingBits;
ULONG RecvFramingBits;
ULONG SendCompressionBits;
ULONG RecvCompressionBits;
ULONG SendACCM;
ULONG RecvACCM;
ULONG MaxRSendFrameSize;
ULONG MaxRRecvFrameSize;
};
typedef struct NDISWAN_GET_LINK_INFO NDISWAN_GET_LINK_INFO, *PNDISWAN_GET_LINK_INFO;
struct NDISWAN_GET_LINK_INFO {
NDIS_HANDLE hNdisEndpoint; // The NdisMan/NdisWan endpoint
ULONG MaxSendFrameSize;
ULONG MaxRecvFrameSize;
ULONG HeaderPadding;
ULONG TailPadding;
ULONG SendFramingBits;
ULONG RecvFramingBits;
ULONG SendCompressionBits;
ULONG RecvCompressionBits;
ULONG SendACCM;
ULONG RecvACCM;
ULONG MaxRSendFrameSize;
ULONG MaxRRecvFrameSize;
};
typedef struct NDISWAN_SET_BRIDGE_INFO NDISWAN_SET_BRIDGE_INFO, *PNDISWAN_SET_BRIDGE_INFO;
struct NDISWAN_SET_BRIDGE_INFO {
NDIS_HANDLE hNdisEndpoint; // The NdisMan/NdisWan endpoint
USHORT LanSegmentNumber;
UCHAR BridgeNumber;
UCHAR BridgingOptions;
ULONG BridgingCapabilities;
UCHAR BridgingType;
UCHAR MacBytes[6];
};
typedef struct NDISWAN_GET_BRIDGE_INFO NDISWAN_GET_BRIDGE_INFO, *PNDISWAN_GET_BRIDGE_INFO;
struct NDISWAN_GET_BRIDGE_INFO {
NDIS_HANDLE hNdisEndpoint; // The NdisMan/NdisWan endpoint
USHORT LanSegmentNumber;
UCHAR BridgeNumber;
UCHAR BridgingOptions;
ULONG BridgingCapabilities;
UCHAR BridgingType;
UCHAR MacBytes[6];
};
//
// Define bit field for MSCompType
//
#define NDISWAN_COMPRESSION 0x00000001
#define NDISWAN_ENCRYPTION 0x00000010
#define NT31RAS_COMPRESSION 254
typedef struct COMPRESS_INFO COMPRESS_INFO, *PCOMPRESS_INFO;
struct COMPRESS_INFO {
UCHAR SessionKey[8]; // May be used for encryption, non-zero
// if supported.
ULONG MSCompType; // Bit field. 0=No compression.
//
// Info below is received from MAC
//
UCHAR CompType; // 0=OUI, 1-254 = Public, 255=Not supported
USHORT CompLength; // Length of CompValues.
union {
struct {
UCHAR CompOUI[3];
UCHAR CompSubType;
UCHAR CompValues[32];
} Proprietary;
struct {
UCHAR CompValues[32];
} Public;
};
};
typedef struct NDISWAN_SET_COMP_INFO NDISWAN_SET_COMP_INFO, *PNDISWAN_SET_COMP_INFO;
struct NDISWAN_SET_COMP_INFO {
NDIS_HANDLE hNdisEndpoint; // The RasMan/NdisWan endpoint
COMPRESS_INFO SendCapabilities;
COMPRESS_INFO RecvCapabilities;
};
typedef struct NDISWAN_GET_COMP_INFO NDISWAN_GET_COMP_INFO, *PNDISWAN_GET_COMP_INFO;
struct NDISWAN_GET_COMP_INFO {
NDIS_HANDLE hNdisEndpoint; // The RasMan/NdisWan endpoint
COMPRESS_INFO SendCapabilities;
COMPRESS_INFO RecvCapabilities;
};
typedef struct VJ_INFO VJ_INFO, *PVJ_INFO;
struct VJ_INFO {
USHORT IPCompressionProtocol; // 002d for VJ - 0000 indicates NONE!
UCHAR MaxSlotID; // How many slots to allocate
UCHAR CompSlotID; // 1 = Slot ID was negotiated
};
typedef struct NDISWAN_SET_VJ_INFO NDISWAN_SET_VJ_INFO, *PNDISWAN_SET_VJ_INFO;
struct NDISWAN_SET_VJ_INFO {
NDIS_HANDLE hNdisEndpoint; // The RasMan/NdisWan endpoint
VJ_INFO SendCapabilities;
VJ_INFO RecvCapabilities;
};
typedef struct NDISWAN_GET_VJ_INFO NDISWAN_GET_VJ_INFO, *PNDISWAN_GET_VJ_INFO;
struct NDISWAN_GET_VJ_INFO {
NDIS_HANDLE hNdisEndpoint; // The RasMan/NdisWan endpoint
VJ_INFO SendCapabilities;
VJ_INFO RecvCapabilities;
};
typedef struct CIPX_INFO CIPX_INFO, *PCIPX_INFO;
struct CIPX_INFO {
USHORT IPXCompressionProtocol; // Telebit/Shiva - 0000 indicates NONE!
};
typedef struct NDISWAN_SET_CIPX_INFO NDISWAN_SET_CIPX_INFO, *PNDISWAN_SET_CIPX_INFO;
struct NDISWAN_SET_CIPX_INFO {
NDIS_HANDLE hNdisEndpoint; // The RasMan/NdisWan endpoint
CIPX_INFO SendCapabilities;
CIPX_INFO RecvCapabilities;
};
typedef struct NDISWAN_GET_CIPX_INFO NDISWAN_GET_CIPX_INFO, *PNDISWAN_GET_CIPX_INFO;
struct NDISWAN_GET_CIPX_INFO {
NDIS_HANDLE hNdisEndpoint; // The RasMan/NdisWan endpoint
CIPX_INFO SendCapabilities;
CIPX_INFO RecvCapabilities;
};
typedef struct NDISWAN_SET_MULTILINK_INFO NDISWAN_SET_MULTILINK_INFO, *PNDISWAN_SET_MULTILINK_INFO;
struct NDISWAN_SET_MULTILINK_INFO {
NDIS_HANDLE hNdisEndpoint; // The RasMan/NdisWan endpoint
NDIS_HANDLE EndpointToBundle; // Endpoint to bundle it to.
};
typedef struct NDISWAN_GET_MULTILINK_INFO NDISWAN_GET_MULTILINK_INFO, *PNDISWAN_GET_MULTILINK_INFO;
struct NDISWAN_GET_MULTILINK_INFO{
NDIS_HANDLE hNdisEndpoint; // The RasMan/NdisWan endpoint
ULONG NumOfEndpoints; // How many endpoints are bundled to this
NDIS_HANDLE Endpoints[0]; // List of 0..n endpoints bundled
};
// A WAN_ENDPOINT is an interface to the WanHardware.
// There will be a collection of WAN_ENDPOINT for each NDIS_ENDPOINT
//
// !!!! NOTE !!!!
// LinkSpeed, QualityOfService, and RouteInfo are meaningless
// unless the route is active (i.e. NumberOfRoutes > 0)
//
// The WanEndpointLink has to be the first entry in the structure
typedef struct WAN_ENDPOINT WAN_ENDPOINT, *PWAN_ENDPOINT;
struct WAN_ENDPOINT {
LIST_ENTRY WanEndpointLink; // used to attach wanendpoints to an ndisendpoint
NDIS_SPIN_LOCK Lock; // lock for this wanendpoint
ULONG State; // state of the endpoint
ULONG NotInUse; // set to false when active with a line up
PVOID AllocatedMemory; // pointer to and size of memory allocated
ULONG MemoryLength; // for this endpoints packets and buffers
LIST_ENTRY DataDescPool; // Data descriptors for wan packets
ULONG DataDescCount; // Number of data descriptors in pool
LIST_ENTRY WanPacketPool; // WanPackets
ULONG WanPacketCount; // Number of WanPackets in pool
NDIS_HANDLE hWanEndpoint; // The NdisWan endpoint
PVOID pNdisEndpoint; // Back ptr to ndisendpoint attached to
PVOID pDeviceContext; // Back ptr to DeviceContext
NDIS_HANDLE NdisBindingHandle; // Assigned by NDIS during NdisOpenAdapter
NDISMAC_LINE_UP MacLineUp; // The MAC's LINE UP
ULONG ulBandwidth; // Percentage of total connection bandwidth
NDISWAN_INFO NdisWanInfo; // Info about the adapter
USHORT MacNameLength; // Up to 32...
WCHAR MacName[MAC_NAME_SIZE]; // First 32 chars of MAC name
// like "\Device\AsyncMac01"
NDIS_MEDIUM MediumType; // NdisMedium802_3, NdisMedium802_5, Wan
NDIS_WAN_MEDIUM_SUBTYPE
WanMediumSubType; // Serial, ISDN, X.25 - for WAN only
NDIS_WAN_HEADER_FORMAT
WanHeaderFormat; // Native or ethernet emulation
WAN_STATS WanStats; // Generic statistics kept here
UCHAR OutstandingFrames; // count of outstanding frames on this endpoint
LIST_ENTRY ReadQueue; // Holds read frame Irps
NDISWAN_SET_LINK_INFO LinkInfo;
};
typedef struct WAN_ENUM_BUFFER WAN_ENUM_BUFFER, *PWAN_ENUM_BUFFER;
struct WAN_ENUM_BUFFER {
ULONG NumOfEndpoints; // Looked up in registry -- key "Endpoints"
WAN_ENDPOINT WanEndpoint[]; // One struct for each endpoint is allocated
};
//------------------------------------------------------------------------
//------------------------ FRAMING INFORMATION ---------------------------
//------------------------------------------------------------------------
#if 0 //ndef _NDIS_WAN
//
// NDIS WAN Framing bits
//
#define OLD_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
#endif // _NDIS_WAN
//------------------------------------------------------------------------
//--------------------- OLD RAS COMPRESSION INFORMATION ------------------
//------------------------------------------------------------------------
// The defines below are for the compression bitmap field.
// No bits are set if compression is not available at all
#define COMPRESSION_NOT_AVAILABLE 0x00000000
// This bit is set if the mac can do version 1 compressed frames
#define COMPRESSION_VERSION1_8K 0x00000001
#define COMPRESSION_VERSION1_16K 0x00000002
#define COMPRESSION_VERSION1_32K 0x00000004
#define COMPRESSION_VERSION1_64K 0x00000008
// And this to turn off any compression feature bit
#define COMPRESSION_OFF_BIT_MASK (~( COMPRESSION_VERSION1_8K | \
COMPRESSION_VERSION1_16K | \
COMPRESSION_VERSION1_32K | \
COMPRESSION_VERSION1_64K ))
// We need to find a place to put the following supported featurettes...
#define XON_XOFF_SUPPORTED 0x00000010
#define COMPRESS_BROADCAST_FRAMES 0x00000080
#define UNKNOWN_FRAMING 0x00010000
#define NO_FRAMING 0x00020000