diff options
author | Adam <you@example.com> | 2020-05-17 05:51:50 +0200 |
---|---|---|
committer | Adam <you@example.com> | 2020-05-17 05:51:50 +0200 |
commit | e611b132f9b8abe35b362e5870b74bce94a1e58e (patch) | |
tree | a5781d2ec0e085eeca33cf350cf878f2efea6fe5 /private/ntos/tdi/isn/ipx/isnipx.h | |
download | NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.gz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.bz2 NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.lz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.xz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.zst NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.zip |
Diffstat (limited to 'private/ntos/tdi/isn/ipx/isnipx.h')
-rw-r--r-- | private/ntos/tdi/isn/ipx/isnipx.h | 554 |
1 files changed, 554 insertions, 0 deletions
diff --git a/private/ntos/tdi/isn/ipx/isnipx.h b/private/ntos/tdi/isn/ipx/isnipx.h new file mode 100644 index 000000000..ae48d1449 --- /dev/null +++ b/private/ntos/tdi/isn/ipx/isnipx.h @@ -0,0 +1,554 @@ +/*++ + +Copyright (c) 1989-1993 Microsoft Corporation + +Module Name: + + isnipx.h + +Abstract: + + This module contains definitions specific to the + IPX module of the ISN transport. + +Author: + + Adam Barr (adamba) 2-September-1993 + +Environment: + + Kernel mode + +Revision History: + + +--*/ + +#ifndef _ISNIPX_ +#define _ISNIPX_ + +#define MAC_HEADER_SIZE ((IPX_MAXIMUM_MAC + 3) & ~3) +#define RIP_PACKET_SIZE ((sizeof(RIP_PACKET) + 3) & ~3) +#define IPX_HEADER_SIZE ((sizeof(IPX_HEADER) + 3) & ~3) + +// +// Frame type definitions +// + +#define ISN_FRAME_TYPE_ETHERNET_II 0 +#define ISN_FRAME_TYPE_802_3 1 +#define ISN_FRAME_TYPE_802_2 2 +#define ISN_FRAME_TYPE_SNAP 3 +#define ISN_FRAME_TYPE_ARCNET 4 // we ignore this +#define ISN_FRAME_TYPE_MAX 4 // of the four standard ones + +#define ISN_FRAME_TYPE_AUTO 0xff + + +// +// This defines the size of the maximum MAC header required +// (token-ring: MAC 14 bytes, RI 18 bytes, LLC 3 bytes, SNAP 5 bytes). +// + +#define IPX_MAXIMUM_MAC 40 + +// +// This is an internal identifier used for RIP query packets. +// + +#define IDENTIFIER_RIP_INTERNAL 4 + +// +// This is an internal identifier used for RIP response packets. +// + +#define IDENTIFIER_RIP_RESPONSE 5 + + +// +// This is the total number of "real" identifiers. +// + +#define IDENTIFIER_TOTAL 4 + + +// +// Some definitions (in the correct on-the-wire order). +// + +#define RIP_PACKET_TYPE 0x01 +#define RIP_SOCKET 0x5304 +#define RIP_REQUEST 0x0100 +#define RIP_RESPONSE 0x0200 +#define RIP_DOWN 0x8200 // use high bit to indicate it + +#define SAP_PACKET_TYPE 0x04 +#define SAP_SOCKET 0x5204 + +#define SPX_PACKET_TYPE 0x05 + +#define NB_SOCKET 0x5504 + + +#include <packon.h> + +// +// Definition of the IPX header. +// + +typedef struct _IPX_HEADER { + USHORT CheckSum; + UCHAR PacketLength[2]; + UCHAR TransportControl; + UCHAR PacketType; + UCHAR DestinationNetwork[4]; + UCHAR DestinationNode[6]; + USHORT DestinationSocket; + UCHAR SourceNetwork[4]; + UCHAR SourceNode[6]; + USHORT SourceSocket; +} IPX_HEADER, *PIPX_HEADER; + + +// +// Definition of a RIP network entry. +// + +typedef struct _RIP_NETWORK_ENTRY { + ULONG NetworkNumber; + USHORT HopCount; + USHORT TickCount; +} RIP_NETWORK_ENTRY, *PRIP_NETWORK_ENTRY; + +// +// Definition of a single entry rip packet. +// + +typedef struct _RIP_PACKET { + USHORT Operation; + RIP_NETWORK_ENTRY NetworkEntry; +} RIP_PACKET, *PRIP_PACKET; + +#include <packoff.h> + + +#define IPX_DEVICE_SIGNATURE 0x1401 +#define IPX_ADAPTER_SIGNATURE 0x1402 +#define IPX_BINDING_SIGNATURE 0x1403 +#define IPX_ADDRESS_SIGNATURE 0x1404 +#define IPX_ADDRESSFILE_SIGNATURE 0x1405 +#define IPX_RT_SIGNATURE 0x1406 + +#define IPX_FILE_TYPE_CONTROL (ULONG)0x4701 // file is type control + + +// +// Defined granularity of RIP timeouts in milliseconds +// + +#define RIP_GRANULARITY 55 + + +// +// The default number of segments in the RIP table. +// + +#define RIP_SEGMENTS 7 + + + +// +// Convert a ushort netware order <-> machine order +// + +#define REORDER_USHORT(_Ushort) ((((_Ushort) & 0xff00) >> 8) | (((_Ushort) & 0x00ff) << 8)) + +// +// Convert a ulong netware order <-> machine order +// + +#define REORDER_ULONG(_Ulong) \ + ((((_Ulong) & 0xff000000) >> 24) | \ + (((_Ulong) & 0x00ff0000) >> 8) | \ + (((_Ulong) & 0x0000ff00) << 8) | \ + (((_Ulong) & 0x000000ff) << 24)) + + + +#if DBG + +extern ULONG IpxDebug; +extern ULONG IpxMemoryDebug; + +#define IPX_MEMORY_LOG_SIZE 128 +extern UCHAR IpxDebugMemory[IPX_MEMORY_LOG_SIZE][64]; +extern PUCHAR IpxDebugMemoryLoc; +extern PUCHAR IpxDebugMemoryEnd; + +VOID +IpxDebugMemoryLog( + IN PUCHAR FormatString, + ... +); + +#define IPX_DEBUG(_Flag, _Print) { \ + if (IpxDebug & (IPX_DEBUG_ ## _Flag)) { \ + DbgPrint ("IPX: "); \ + DbgPrint _Print; \ + } \ + if (IpxMemoryDebug & (IPX_DEBUG_ ## _Flag)) { \ + IpxDebugMemoryLog _Print; \ + } \ +} + +#else + +#define IPX_DEBUG(_Flag, _Print) + +#endif + + +// +// These definitions are for abstracting IRPs from the +// transport for portability. +// + +#if ISN_NT + +typedef IRP REQUEST, *PREQUEST; + + +// +// PREQUEST +// IpxAllocateRequest( +// IN PDEVICE Device, +// IN PIRP Irp +// ); +// +// Allocates a request for the system-specific request structure. +// + +#define IpxAllocateRequest(_Device,_Irp) \ + (_Irp) + + +// +// BOOLEAN +// IF_NOT_ALLOCATED( +// IN PREQUEST Request +// ); +// +// Checks if a request was not successfully allocated. +// + +#define IF_NOT_ALLOCATED(_Request) \ + if (0) + + +// +// VOID +// IpxFreeRequest( +// IN PDEVICE Device, +// IN PREQUEST Request +// ); +// +// Frees a previously allocated request. +// + +#define IpxFreeRequest(_Device,_Request) \ + ; + + +// +// VOID +// MARK_REQUEST_PENDING( +// IN PREQUEST Request +// ); +// +// Marks that a request will pend. +// + +#define MARK_REQUEST_PENDING(_Request) \ + IoMarkIrpPending(_Request) + + +// +// VOID +// UNMARK_REQUEST_PENDING( +// IN PREQUEST Request +// ); +// +// Marks that a request will not pend. +// + +#define UNMARK_REQUEST_PENDING(_Request) \ + (((IoGetCurrentIrpStackLocation(_Request))->Control) &= ~SL_PENDING_RETURNED) + + +// +// UCHAR +// REQUEST_MAJOR_FUNCTION +// IN PREQUEST Request +// ); +// +// Returns the major function code of a request. +// + +#define REQUEST_MAJOR_FUNCTION(_Request) \ + ((IoGetCurrentIrpStackLocation(_Request))->MajorFunction) + + +// +// UCHAR +// REQUEST_MINOR_FUNCTION +// IN PREQUEST Request +// ); +// +// Returns the minor function code of a request. +// + +#define REQUEST_MINOR_FUNCTION(_Request) \ + ((IoGetCurrentIrpStackLocation(_Request))->MinorFunction) + + +// +// PNDIS_BUFFER +// REQUEST_NDIS_BUFFER +// IN PREQUEST Request +// ); +// +// Returns the NDIS buffer chain associated with a request. +// + +#define REQUEST_NDIS_BUFFER(_Request) \ + ((PNDIS_BUFFER)((_Request)->MdlAddress)) + + +// +// PVOID +// REQUEST_OPEN_CONTEXT( +// IN PREQUEST Request +// ); +// +// Gets the context associated with an opened address/connection/control channel. +// + +#define REQUEST_OPEN_CONTEXT(_Request) \ + (((IoGetCurrentIrpStackLocation(_Request))->FileObject)->FsContext) + + +// +// PVOID +// REQUEST_OPEN_TYPE( +// IN PREQUEST Request +// ); +// +// Gets the type associated with an opened address/connection/control channel. +// + +#define REQUEST_OPEN_TYPE(_Request) \ + (((IoGetCurrentIrpStackLocation(_Request))->FileObject)->FsContext2) + + +// +// PFILE_FULL_EA_INFORMATION +// OPEN_REQUEST_EA_INFORMATION( +// IN PREQUEST Request +// ); +// +// Returns the EA information associated with an open/close request. +// + +#define OPEN_REQUEST_EA_INFORMATION(_Request) \ + ((PFILE_FULL_EA_INFORMATION)((_Request)->AssociatedIrp.SystemBuffer)) + + +#define OPEN_REQUEST_EA_LENGTH(_Request) \ + (((IoGetCurrentIrpStackLocation(_Request))->Parameters.DeviceIoControl.InputBufferLength)) + +#define OPEN_REQUEST_RCV_LEN(_Request) \ + (((IoGetCurrentIrpStackLocation(_Request))->Parameters.DeviceIoControl.OutputBufferLength)) + +#define REQUEST_SPECIAL_RECV(_Request) \ + (((IoGetCurrentIrpStackLocation(_Request))->Parameters.DeviceIoControl.IoControlCode) == MIPX_RCV_DATAGRAM) + +#define REQUEST_SPECIAL_SEND(_Request) \ + (((IoGetCurrentIrpStackLocation(_Request))->Parameters.DeviceIoControl.IoControlCode) == MIPX_SEND_DATAGRAM) + + +#define REQUEST_CODE(_Request) \ + ((IoGetCurrentIrpStackLocation(_Request))->Parameters.DeviceIoControl.IoControlCode) + +// +// The following value does not clash with TDI_TRANSPORT_ADDRESS_FILE value of +// 0x1 +// +#define ROUTER_ADDRESS_FILE 0x4 + +// +// PTDI_REQUEST_KERNEL +// REQUEST_PARAMETERS( +// IN PREQUEST Request +// ); +// +// Obtains a pointer to the parameters of a request. +// + +#define REQUEST_PARAMETERS(_Request) \ + (&((IoGetCurrentIrpStackLocation(_Request))->Parameters)) + + +// +// VOID +// REQUEST_OPEN_CONTEXT_AND_PARAMS( +// IN PREQUEST Request +// OUT PVOID * OpenContext, +// OUT PTDI_REQUEST_KERNEL * Parameters +// ); +// +// Simultaneously returns the open context and the parameters +// for a request (this is an optimization since the send +// datagram code needs them both). +// + +#define REQUEST_OPEN_CONTEXT_AND_PARAMS(_Request,_OpenContext,_Parameters) { \ + PIO_STACK_LOCATION _IrpSp = IoGetCurrentIrpStackLocation(_Request); \ + *(_OpenContext) = _IrpSp->FileObject->FsContext; \ + *(_Parameters) = (PTDI_REQUEST_KERNEL)(&_IrpSp->Parameters); \ +} + + +// +// PLIST_ENTRY +// REQUEST_LINKAGE( +// IN PREQUEST Request +// ); +// +// Returns a pointer to a linkage field in the request. +// + +#define REQUEST_LINKAGE(_Request) \ + (&((_Request)->Tail.Overlay.ListEntry)) + + +// +// PREQUEST +// LIST_ENTRY_TO_REQUEST( +// IN PLIST_ENTRY ListEntry +// ); +// +// Returns a request given a linkage field in it. +// + +#define LIST_ENTRY_TO_REQUEST(_ListEntry) \ + ((PREQUEST)(CONTAINING_RECORD(_ListEntry, REQUEST, Tail.Overlay.ListEntry))) + + +// +// NTSTATUS +// REQUEST_STATUS( +// IN PREQUEST Request +// ); +// +// Used to access the status field of a request. +// + +#define REQUEST_STATUS(_Request) \ + (_Request)->IoStatus.Status + + +// +// ULONG +// REQUEST_INFORMATION( +// IN PREQUEST Request) +// ); +// +// Used to access the information field of a request. +// + +#define REQUEST_INFORMATION(_Request) \ + (_Request)->IoStatus.Information + + +// +// VOID +// IpxCompleteRequest( +// IN PREQUEST Request +// ); +// +// Completes a request whose status and information fields have +// been filled in. +// + +#define IpxCompleteRequest(_Request) \ + IoCompleteRequest (_Request, IO_NETWORK_INCREMENT) + +#else + +// +// These routines must be defined for portability to a VxD. +// + +#endif + + +#define IPX_INCREMENT(_Long, _Lock) InterlockedIncrement(_Long) +#define IPX_DECREMENT(_Long, _Lock) InterlockedDecrement(_Long) + +#define IPX_ADD_ULONG(_Pulong, _Ulong, _Lock) InterlockedExchangeAdd(_Pulong, _Ulong) + +#define IPX_DEFINE_SYNC_CONTEXT(_SyncContext) +#define IPX_BEGIN_SYNC(_SyncContext) +#define IPX_END_SYNC(_SyncContext) + +#define IPX_DEFINE_LOCK_HANDLE(_LockHandle) CTELockHandle _LockHandle; +#define IPX_DEFINE_LOCK_HANDLE_PARAM(_LockHandle) CTELockHandle _LockHandle; + +#define IPX_GET_LOCK(_Lock, _LockHandle) \ + CTEGetLock(_Lock, _LockHandle) + +#define IPX_FREE_LOCK(_Lock, _LockHandle) \ + CTEFreeLock(_Lock, _LockHandle) + +#define IPX_GET_LOCK1(_Lock, _LockHandle) + +#define IPX_FREE_LOCK1(_Lock, _LockHandle) + +#define IPX_REMOVE_HEAD_LIST(_Queue, _Lock) ExInterlockedRemoveHeadList(_Queue, _Lock) +#define IPX_LIST_WAS_EMPTY(_Queue, _OldHead) ((_OldHead) == NULL) +#define IPX_INSERT_HEAD_LIST(_Queue, _Entry, _Lock) ExInterlockedInsertHeadList(_Queue, _Entry, _Lock) +#define IPX_INSERT_TAIL_LIST(_Queue, _Entry, _Lock) ExInterlockedInsertTailList(_Queue, _Entry, _Lock) + +#define IPX_POP_ENTRY_LIST(_Queue, _Lock) ExInterlockedPopEntrySList(_Queue, _Lock) +#define IPX_PUSH_ENTRY_LIST(_Queue, _Entry, _Lock) ExInterlockedPushEntrySList(_Queue, _Entry, _Lock) + +// +// This macro adds a ULONG to a LARGE_INTEGER. +// + +#define ADD_TO_LARGE_INTEGER(_LargeInteger,_Ulong) \ + ExInterlockedAddLargeStatistic((_LargeInteger),(ULONG)(_Ulong)) + +#define IPX_DEBUG_DEVICE 0x00000001 +#define IPX_DEBUG_ADAPTER 0x00000002 +#define IPX_DEBUG_ADDRESS 0x00000004 +#define IPX_DEBUG_SEND 0x00000008 +#define IPX_DEBUG_NDIS 0x00000010 +#define IPX_DEBUG_RECEIVE 0x00000020 +#define IPX_DEBUG_CONFIG 0x00000040 +#define IPX_DEBUG_PACKET 0x00000080 +#define IPX_DEBUG_RIP 0x00000100 +#define IPX_DEBUG_BIND 0x00000200 +#define IPX_DEBUG_ACTION 0x00000400 +#define IPX_DEBUG_BAD_PACKET 0x00000800 +#define IPX_DEBUG_SOURCE_ROUTE 0x00001000 +#define IPX_DEBUG_WAN 0x00002000 +#define IPX_DEBUG_AUTO_DETECT 0x00004000 + +#ifdef _PNP_POWER +#define IPX_DEBUG_PNP 0x00008000 +#endif + +#define IPX_DEBUG_LOOPB 0x00010000 + +#endif |