windows-nt/Source/XPSP1/NT/net/nwlink/inc/bind.h
2020-09-26 16:20:57 +08:00

866 lines
22 KiB
C

/*++
Copyright (c) 1993 Microsoft Corporation
Module Name:
bind.h
Abstract:
Private include file for the ISN transport. It defines the
structures used for binding between IPX and the upper drivers.
Author:
Adam Barr (adamba) 04-Oct-1993
Revision History:
Sanjay Anand (SanjayAn) 5-July-1995
Bug fixes - tagged [SA]
Ting Cai (TingCai) Sept-18-1998
Port the to 64-bit environment
#ifdef SUNDOWN
ULONG FwdAdapterContext
#else
ULONG_PTR FwdAdapterContext
#endif
--*/
#ifndef _ISN_BIND_
#define _ISN_BIND_
//
// Retrieve the common definitions.
//
#include <isnkrnl.h>
//
// Define the IOCTL used for binding between the upper
// drivers and IPX.
//
#define _IPX_CONTROL_CODE(request,method) \
CTL_CODE(FILE_DEVICE_TRANSPORT, request, method, FILE_ANY_ACCESS)
#define IOCTL_IPX_INTERNAL_BIND _IPX_CONTROL_CODE( 0x1234, METHOD_BUFFERED )
//
// [FW] Error codes - reusing NTSTATUS codes
//
#define STATUS_ADAPTER_ALREADY_OPENED STATUS_UNSUCCESSFUL
#define STATUS_ADAPTER_ALREADY_CLOSED STATUS_UNSUCCESSFUL
#define STATUS_FILTER_FAILED STATUS_UNSUCCESSFUL
#define STATUS_DROP_SILENTLY STATUS_UNSUCCESSFUL
//
// Identifier for the drivers in ISN.
//
#define IDENTIFIER_NB 0
#define IDENTIFIER_SPX 1
#define IDENTIFIER_RIP 2
#define IDENTIFIER_IPX 3
#ifdef _PNP_POWER
//
// This the number of PVOIDs in the beginning of the SEND_RESERVED
// section of a packet header, to be set aside by the ISN clients (NB/SPX)
// for IPX's private use.
//
#define SEND_RESERVED_COMMON_SIZE 8
#endif
//
// Definition of a RIP router table entry.
//
typedef struct _IPX_ROUTE_ENTRY {
UCHAR Network[4];
USHORT NicId;
UCHAR NextRouter[6];
NDIS_HANDLE NdisBindingContext;
USHORT Flags;
USHORT Timer;
UINT Segment;
USHORT TickCount;
USHORT HopCount;
LIST_ENTRY AlternateRoute;
LIST_ENTRY NicLinkage;
struct {
LIST_ENTRY Linkage;
ULONG Reserved[1];
} PRIVATE;
} IPX_ROUTE_ENTRY, * PIPX_ROUTE_ENTRY;
//
// Definition of the Flags values.
//
#define IPX_ROUTER_PERMANENT_ENTRY 0x0001 // entry should never be deleted
#define IPX_ROUTER_LOCAL_NET 0x0002 // locally attached network
#define IPX_ROUTER_SCHEDULE_ROUTE 0x0004 // call ScheduleRouteHandler after using
#define IPX_ROUTER_GLOBAL_WAN_NET 0x0008 // this is for rip's global network number
//
// Definition of the structure provided on a find
// route/find route completion call.
//
//
// [SA] Bug #15094 added node number to the structure.
//
//
// [FW] Added Hop and Tick counts so this structure can be passed
// as such to the Forwarder - hop and tick counts are queried in actions
//
typedef struct _IPX_FIND_ROUTE_REQUEST {
UCHAR Network[4];
UCHAR Node[6] ;
IPX_LOCAL_TARGET LocalTarget;
USHORT TickCount; // [FW]
USHORT HopCount; // [FW]
UCHAR Identifier;
UCHAR Type;
UCHAR Reserved1[2];
PVOID Reserved2;
LIST_ENTRY Linkage;
} IPX_FIND_ROUTE_REQUEST, *PIPX_FIND_ROUTE_REQUEST;
//
// Definitions for the Type value.
//
#define IPX_FIND_ROUTE_NO_RIP 1 // fail if net is not in database
#define IPX_FIND_ROUTE_RIP_IF_NEEDED 2 // return net if in database, otherwise RIP out
#define IPX_FIND_ROUTE_FORCE_RIP 3 // re-RIP even if net is in database
//
// Structure used when querying the line information
// for a specific NID ID.
//
typedef struct _IPX_LINE_INFO {
UINT LinkSpeed;
UINT MaximumPacketSize;
UINT MaximumSendSize;
UINT MacOptions;
} IPX_LINE_INFO, *PIPX_LINE_INFO;
//
// Functions provided by the upper driver.
//
//
// [FW] Added the ForwarderAdapterContext to the paramters
// SPX/NB can ignore this for now
//
typedef BOOLEAN
(*IPX_INTERNAL_RECEIVE) (
IN NDIS_HANDLE MacBindingHandle,
IN NDIS_HANDLE MacReceiveContext,
IN ULONG_PTR FwdAdapterContext, // [FW]
IN PIPX_LOCAL_TARGET RemoteAddress,
IN ULONG MacOptions,
IN PUCHAR LookaheadBuffer,
IN UINT LookaheadBufferSize,
IN UINT LookaheadBufferOffset,
IN UINT PacketSize,
IN PMDL pMdl
);
typedef VOID
(*IPX_INTERNAL_RECEIVE_COMPLETE) (
IN USHORT NicId
);
//
// [FW] Status and ScheduleRoute removed from the bind input
// [ZZZZZZZZZ]
typedef VOID
(*IPX_INTERNAL_STATUS) (
IN USHORT NicId,
IN NDIS_STATUS GeneralStatus,
IN PVOID StatusBuffer,
IN UINT StatusBufferLength
);
typedef VOID
(*IPX_INTERNAL_SCHEDULE_ROUTE) (
IN PIPX_ROUTE_ENTRY RouteEntry
);
typedef VOID
(*IPX_INTERNAL_SEND_COMPLETE) (
IN PNDIS_PACKET Packet,
IN NDIS_STATUS Status
);
typedef VOID
(*IPX_INTERNAL_TRANSFER_DATA_COMPLETE) (
IN PNDIS_PACKET Packet,
IN NDIS_STATUS Status,
IN UINT BytesTransferred
);
typedef VOID
(*IPX_INTERNAL_FIND_ROUTE_COMPLETE) (
IN PIPX_FIND_ROUTE_REQUEST FindRouteRequest,
IN BOOLEAN FoundRoute
);
typedef VOID
(*IPX_INTERNAL_LINE_UP) (
IN USHORT NicId,
IN PIPX_LINE_INFO LineInfo,
IN NDIS_MEDIUM DeviceType,
IN PVOID ConfigurationData
);
typedef VOID
(*IPX_INTERNAL_LINE_DOWN) (
IN USHORT NicId,
IN ULONG_PTR FwdAdapterContext
);
#if defined(_PNP_POWER)
//
// following opcodes are used when calling the
// above handler.
//
typedef enum _IPX_PNP_OPCODE {
IPX_PNP_ADD_DEVICE, // 0 - addition of the first adapter
IPX_PNP_DELETE_DEVICE, // 1 - deletion of the last adapter
IPX_PNP_TRANSLATE_DEVICE, // 2 - translate device resource
IPX_PNP_TRANSLATE_ADDRESS, // 3 - translate address resource
IPX_PNP_ADDRESS_CHANGE, // 4 - Adapter address or Reserved address changed
IPX_PNP_QUERY_POWER, // 5 - NDIS queries if power can go off
IPX_PNP_SET_POWER, // 6 - NDIS tells that power is going off
IPX_PNP_QUERY_REMOVE, // 7 - NDIS queries if adapter can be removed
IPX_PNP_CANCEL_REMOVE, // 8 - NDIS cancels the query_remove
IPX_PNP_MAX_OPCODES, // 9
} IPX_PNP_OPCODE, *PIPX_PNP_OPCODE;
//
// PnP event notification handler.
//
typedef NTSTATUS
(*IPX_INTERNAL_PNP_NOTIFICATION) (
IN IPX_PNP_OPCODE PnPOpcode,
IN OUT PVOID PnpData
);
//
// Pointer to this structure is passed in PnPData portion of
// the above handler when the opcode is ADD_DEVICE or DELETE_DEVICE.
//
typedef struct _IPX_PNP_INFO {
ULONG NetworkAddress;
UCHAR NodeAddress[6];
BOOLEAN NewReservedAddress; // where the above is a new reserved
// address for the Ipx clients.
BOOLEAN FirstORLastDevice; // is this a first card arrival or last card deletion.
IPX_LINE_INFO LineInfo; // New LineInfo.
NIC_HANDLE NicHandle;
} IPX_PNP_INFO, *PIPX_PNP_INFO;
#endif _PNP_POWER
//
// [FW] New entry points provided by the Kernel Forwarder.
// These are not filled in by NB and SPX.
//
/*++
Routine Description:
This routine is provided by the Kernel Forwarder to filter packets being sent out
by NB/SPX/TDI thru' IPX - does not include those sent out by the Forwarder (external sends)
Arguments:
LocalTarget - the NicId and next hop router MAC address
FwdAdapterContext - Forwarder's context - preferred NIC if not INVALID_CONTEXT_VALUE
Packet - packet to be sent out
IpxHeader - points to the IPX header
Data - points to after the IPX header - needed in spoofing of keepalives.
PacketLength - length of the packet
fIterate - a flag to indicate if this is a packet for the iteration of which the
Fwd takes responsibility - typically type 20 NetBIOS frames
Return Value:
STATUS_SUCCESS - if the preferred NIC was OK and packet passed filtering
STATUS_NETWORK_UNREACHABLE - if the preferred was not OK or packet failed filtering
STATUS_PENDING - if preferred NIC was OK but line down
Forwarder should give us a different status than STATUS_NETWORK_UNREACHABLE for changed NIC
--*/
typedef NTSTATUS
(*IPX_FW_INTERNAL_SEND) (
IN OUT PIPX_LOCAL_TARGET LocalTarget,
IN ULONG_PTR FwdAdapterContext,
IN PNDIS_PACKET Packet,
IN PUCHAR IpxHeader,
IN PUCHAR Data,
IN ULONG PacketLength,
IN BOOLEAN fIterate
);
/*++
Routine Description:
This routine is provided by the Kernel Forwarder to find the route to a given node and network
Arguments:
Network - the destination network
Node - destination node
RouteEntry - filled in by the Forwarder if a route exists
Return Value:
STATUS_SUCCESS
STATUS_NETWORK_UNREACHABLE - if the findroute failed
--*/
typedef NTSTATUS
(*IPX_FW_FIND_ROUTE) (
IN PUCHAR Network,
IN PUCHAR Node,
OUT PIPX_FIND_ROUTE_REQUEST RouteEntry
);
/*++
Routine Description:
This routine is provided by the Kernel Forwarder to find the route to a given node and network
Arguments:
FwdAdapterContext - Forwarder's context
RemoteAddress - the address the packet came on
LookAheadBuffer - packet header that came in
LookAheadBufferSize - size of the lookaheadbuffer
Return Value:
STATUS_SUCCESS
STATUS_FILTER_FAILED - if the packet was not allowed by the filter
--*/
typedef NTSTATUS
(*IPX_FW_INTERNAL_RECEIVE) (
IN ULONG_PTR FwdAdapterContext,
IN PIPX_LOCAL_TARGET RemoteAddress,
IN PUCHAR LookAheadBuffer,
IN UINT LookAheadBufferSize
);
//
// Input to the bind IOCTL
//
//
// [FW] Removed the status and schedule route handlers
//
typedef struct _IPX_INTERNAL_BIND_INPUT {
USHORT Version;
UCHAR Identifier;
BOOLEAN BroadcastEnable;
UINT LookaheadRequired;
UINT ProtocolOptions;
IPX_INTERNAL_RECEIVE ReceiveHandler;
IPX_INTERNAL_RECEIVE_COMPLETE ReceiveCompleteHandler;
IPX_INTERNAL_STATUS StatusHandler;
IPX_INTERNAL_SEND_COMPLETE SendCompleteHandler;
IPX_INTERNAL_TRANSFER_DATA_COMPLETE TransferDataCompleteHandler;
IPX_INTERNAL_FIND_ROUTE_COMPLETE FindRouteCompleteHandler;
IPX_INTERNAL_LINE_UP LineUpHandler;
IPX_INTERNAL_LINE_DOWN LineDownHandler;
IPX_INTERNAL_SCHEDULE_ROUTE ScheduleRouteHandler;
#if defined(_PNP_POWER)
IPX_INTERNAL_PNP_NOTIFICATION PnPHandler;
#endif _PNP_POWER
IPX_FW_INTERNAL_SEND InternalSendHandler;
IPX_FW_FIND_ROUTE FindRouteHandler;
IPX_FW_INTERNAL_RECEIVE InternalReceiveHandler;
ULONG RipParameters;
} IPX_INTERNAL_BIND_INPUT, * PIPX_INTERNAL_BIND_INPUT;
#if defined(_PNP_POWER)
#define ISN_VERSION 2
#endif _PNP_POWER
//
// Bit mask values for RipParameters.
//
#define IPX_RIP_PARAM_GLOBAL_NETWORK 0x00000001 // single network for all WANS
//
// Functions provided by the lower driver.
//
typedef NDIS_STATUS
(*IPX_INTERNAL_SEND) (
IN PIPX_LOCAL_TARGET RemoteAddress,
IN PNDIS_PACKET Packet,
IN ULONG PacketLength,
IN ULONG IncludedHeaderLength
);
typedef VOID
(*IPX_INTERNAL_FIND_ROUTE) (
IN PIPX_FIND_ROUTE_REQUEST FindRouteRequest
);
typedef NTSTATUS
(*IPX_INTERNAL_QUERY) (
IN ULONG InternalQueryType,
#if defined(_PNP_POWER)
IN PNIC_HANDLE NicHandle OPTIONAL,
#else
IN USHORT NicId OPTIONAL,
#endif _PNP_POWER
IN OUT PVOID Buffer,
IN ULONG BufferLength,
OUT PULONG BufferLengthNeeded OPTIONAL
);
typedef VOID
(*IPX_INTERNAL_TRANSFER_DATA)(
OUT PNDIS_STATUS Status,
IN NDIS_HANDLE NdisBindingHandle,
IN NDIS_HANDLE MacReceiveContext,
IN UINT ByteOffset,
IN UINT BytesToTransfer,
IN OUT PNDIS_PACKET Packet,
OUT PUINT BytesTransferred
);
typedef VOID
(*IPX_INTERNAL_PNP_COMPLETE) (
IN PNET_PNP_EVENT NetPnPEvent,
IN NTSTATUS Status
);
//
// Definitions of the internal query types. In all cases
// STATUS_SUCCESS is returned if the request succeeds, and
// STATUS_BUFFER_TOO_SMALL is returned, and BufferLengthNeeded
// set if specified, if the buffer is too short. Other
// return codes are defined below. The routine never pends.
//
//
// This is used to query the line info. NicId specifies which one
// to query. Buffer contains an IPX_LINE_INFO structure which is
// used to return the information. Other return values:
//
// STATUS_INVALID_PARAMETER - NicId is invalid.
//
#define IPX_QUERY_LINE_INFO 1
//
// This is used to query the maximum NicId. NicId is unused. The
// Buffer contains a USHORT which is used to return the information.
//
#define IPX_QUERY_MAXIMUM_NIC_ID 2
//
// This is used to determine if the IPX address specified was sent
// by our local machine. If the address is the source address of a
// received frame, NicId should be the ID that was indicated; otherwise
// it should be set to 0. Buffer holds a TDI_ADDRESS_IPX. This
// call returns STATUS_SUCCESS if the address is local, and
// STATUS_NO_SUCH_DEVICE if not.
//
#define IPX_QUERY_IS_ADDRESS_LOCAL 3
//
// This is used to query the receive buffer space of a given NicId.
// Buffer contains a ULONG which is used to return the information.
// It returns STATUS_INVALID_PARAMETER if NicId is invalid.
//
#define IPX_QUERY_RECEIVE_BUFFER_SPACE 4
//
// This is used to query the local IPX address of a given NicId.
// Buffer contains a TDI_ADDRESS_IPX structure (the Socket is
// returned as 0). If it is queried on net 0 it returns the
// virtual network if there is one, otherwise STATUS_INVALID_PARAMETER.
// It returns STATUS_INVALID_PARAMETER if NicId is invalid.
//
#define IPX_QUERY_IPX_ADDRESS 5
//
// This is used to return the source routing information for
// a give remote address. NicId will be the NIC the packet was
// received from. The IPX_SOURCE_ROUTING_QUERY is contained
// in Buffer. Always returns STATUS_SUCCESS, although the
// SourceRoutingLength may be 0 for unknown remotes.
//
// The source routing is return in the direction it was received
// from the remote, not the direction used in replying. The
// MaximumSendSize includes the IPX header (as it does in
// IPX_LINE_INFO).
//
#define IPX_QUERY_SOURCE_ROUTING 6
typedef struct _IPX_SOURCE_ROUTING_INFO {
USHORT Identifier; // input: the caller's IDENTIFIER_SPX, _NB, etc.
UCHAR RemoteAddress[6]; // input: the remote address
UCHAR SourceRouting[18]; // output: room for the maximum source route
USHORT SourceRoutingLength; // output: the valid length of source route
ULONG MaximumSendSize; // output: based on nic and source routing
} IPX_SOURCE_ROUTING_INFO, * PIPX_SOURCE_ROUTING_INFO;
//
// This is used to query the maximum NicId over which outgoing type
// 20 packets should be sent. It will be less than or equal to
// the IPX_QUERY_MAXIMUM_NIC_ID value. What's excluded are down wan
// lines and dialin wan lines if DisableDialinNetbios bit 1 is set.
//
#define IPX_QUERY_MAX_TYPE_20_NIC_ID 7
#if defined(_PNP_POWER)
//
// This are used by NB to pass down these TDI queries which cannot
// be completed in NB.
//
#define IPX_QUERY_DATA_LINK_ADDRESS 8
#define IPX_QUERY_NETWORK_ADDRESS 9
#endif _PNP_POWER
#define IPX_QUERY_MEDIA_TYPE 10
#define IPX_QUERY_DEVICE_RELATION 11
//
// Output of a non-RIP bind.
//
typedef struct _IPX_INTERNAL_BIND_OUTPUT {
USHORT Version;
UCHAR Node[6];
UCHAR Network[4];
USHORT MacHeaderNeeded;
USHORT IncludedHeaderOffset;
IPX_LINE_INFO LineInfo;
IPX_INTERNAL_SEND SendHandler;
IPX_INTERNAL_FIND_ROUTE FindRouteHandler;
IPX_INTERNAL_QUERY QueryHandler;
IPX_INTERNAL_TRANSFER_DATA TransferDataHandler;
IPX_INTERNAL_PNP_COMPLETE PnPCompleteHandler;
} IPX_INTERNAL_BIND_OUTPUT, * PIPX_INTERNAL_BIND_OUTPUT;
//
// Lower driver functions provided only for RIP.
//
typedef UINT
(*IPX_INTERNAL_GET_SEGMENT) (
IN UCHAR Network[4]
);
typedef PIPX_ROUTE_ENTRY
(*IPX_INTERNAL_GET_ROUTE) (
IN UINT Segment,
IN UCHAR Network[4]
);
typedef BOOLEAN
(*IPX_INTERNAL_ADD_ROUTE) (
IN UINT Segment,
IN PIPX_ROUTE_ENTRY RouteEntry
);
typedef BOOLEAN
(*IPX_INTERNAL_DELETE_ROUTE) (
IN UINT Segment,
IN PIPX_ROUTE_ENTRY RouteEntry
);
typedef PIPX_ROUTE_ENTRY
(*IPX_INTERNAL_GET_FIRST_ROUTE) (
IN UINT Segment
);
typedef PIPX_ROUTE_ENTRY
(*IPX_INTERNAL_GET_NEXT_ROUTE) (
IN UINT Segment
);
typedef VOID
(*IPX_INTERNAL_INCREMENT_WAN_INACTIVITY) (
#ifdef _PNP_LATER
IN NIC_HANDLE NicHandle
#else
IN USHORT NicId
#endif
);
typedef ULONG
(*IPX_INTERNAL_QUERY_WAN_INACTIVITY) (
#ifdef _PNP_LATER
IN NIC_HANDLE NicHandle
#else
IN USHORT NicId
#endif
);
/*++
Routine Description:
This routine is called by the Kernel Forwarder to open an adapter
Arguments:
AdapterIndex - index of the adapter to open (NICid for now - will change to a struct
with a version number, signature and the NicId
FwdAdapterContext - Forwarder's context
IpxAdapterContext - our context (for now we use the NICid - for pnp will change
this to contain a signature and version #)
Return Value:
STATUS_INVALID_HANDLE if the AdapterIndex handle was invalid
STATUS_ADAPTER_ALREADY_OPENED if the Adapter is being opened a second time
STATUS_SUCCESS
--*/
typedef NTSTATUS
(*IPX_FW_OPEN_ADAPTER) (
IN NIC_HANDLE AdapterIndex,
IN ULONG_PTR FwdAdapterContext,
OUT PNIC_HANDLE IpxAdapterContext
);
/*++
Routine Description:
This routine is called by the Kernel Forwarder to close an adapter
Arguments:
IpxAdapterContext - our context (for now we use the NICid - for pnp will change
this to contain a signature and version#)
Return Value:
STATUS_ADAPTER_ALREADY_CLOSED - if the adapter is being closed a second time
STATUS_SUCCESS
--*/
typedef NTSTATUS
(*IPX_FW_CLOSE_ADAPTER) (
IN NIC_HANDLE IpxAdapterContext
);
/*++
Routine Description:
This routine is called by the Kernel Forwarder to indicate that a pending
internal send to it has completed.
Arguments:
LocalTarget - if Status is OK, this has the local target for the send.
Packet - A pointer to the NDIS_PACKET that we sent.
PacketLength - length of the packet (including the IPX header)
Status - the completion status of the send - STATUS_SUCCESS or STATUS_NETWORK_UNREACHABLE
Return Value:
none.
--*/
typedef VOID
(*IPX_FW_INTERNAL_SEND_COMPLETE) (
IN PIPX_LOCAL_TARGET LocalTarget,
IN PNDIS_PACKET Packet,
IN ULONG PacketLength,
IN NTSTATUS Status
);
//
// Describes a single network.
//
typedef struct _IPX_NIC_DATA {
USHORT NicId;
UCHAR Node[6];
UCHAR Network[4];
IPX_LINE_INFO LineInfo;
NDIS_MEDIUM DeviceType;
ULONG EnableWanRouter;
} IPX_NIC_DATA, * PIPX_NIC_DATA;
//
// Describes all networks.
//
typedef struct _IPX_NIC_INFO_BUFFER {
USHORT NicCount;
USHORT VirtualNicId;
UCHAR VirtualNetwork[4];
IPX_NIC_DATA NicData[1];
} IPX_NIC_INFO_BUFFER, * PIPX_NIC_INFO_BUFFER;
//
// Output from a RIP bind (the actual structure size is
// based on the number of IPX_NIC_DATA elements in the
// final IPX_NIC_INFO_BUFFER structure).
//
typedef struct _IPX_INTERNAL_BIND_RIP_OUTPUT {
USHORT Version;
USHORT MaximumNicCount;
USHORT MacHeaderNeeded;
USHORT IncludedHeaderOffset;
IPX_INTERNAL_SEND SendHandler;
UINT SegmentCount;
KSPIN_LOCK * SegmentLocks;
IPX_INTERNAL_GET_SEGMENT GetSegmentHandler;
IPX_INTERNAL_GET_ROUTE GetRouteHandler;
IPX_INTERNAL_ADD_ROUTE AddRouteHandler;
IPX_INTERNAL_DELETE_ROUTE DeleteRouteHandler;
IPX_INTERNAL_GET_FIRST_ROUTE GetFirstRouteHandler;
IPX_INTERNAL_GET_NEXT_ROUTE GetNextRouteHandler;
IPX_INTERNAL_INCREMENT_WAN_INACTIVITY IncrementWanInactivityHandler;
IPX_INTERNAL_QUERY_WAN_INACTIVITY QueryWanInactivityHandler;
IPX_INTERNAL_TRANSFER_DATA TransferDataHandler;
IPX_FW_OPEN_ADAPTER OpenAdapterHandler;
IPX_FW_CLOSE_ADAPTER CloseAdapterHandler;
IPX_FW_INTERNAL_SEND_COMPLETE InternalSendCompleteHandler;
IPX_NIC_INFO_BUFFER NicInfoBuffer;
} IPX_INTERNAL_BIND_RIP_OUTPUT, * PIPX_INTERNAL_BIND_RIP_OUTPUT;
//
// [FW] Used by the forwarder to fill up the localtarget
//
#ifdef _PNP_LATER
#define NIC_HANDLE_FROM_NIC(_nichandle, _nic) \
_nichandle.NicId = _nic; \
_nichandle.Signature = IPX_BINDING_SIGNATURE; \
if (_nic == 0) { \
_nichandle.Version = 0; \
} else { \
_nichandle.Version = IpxDevice->Bindings[_nic].Version; \
}
#else
#define NIC_HANDLE_FROM_NIC(_nichandle, _nic) \
_nichandle.NicId = (USHORT)_nic;
#endif
//
// VOID
// ADAPTER_CONTEXT_TO_LOCAL_TARGET(
// IN NIC_HANDLE _context;
// IN PIPX_LOCAL_TARGET _localtarget;
// );
//
#define ADAPTER_CONTEXT_TO_LOCAL_TARGET(_context, _localtarget) \
(_localtarget)->NicHandle.NicId = (_context).NicId;
//
// VOID
// CONSTANT_ADAPTER_CONTEXT_TO_LOCAL_TARGET(
// IN NIC_HANDLE _context;
// IN PIPX_LOCAL_TARGET _localtarget;
// );
//
#define CONSTANT_ADAPTER_CONTEXT_TO_LOCAL_TARGET(_context, _localtarget) \
(_localtarget)->NicHandle.NicId = (USHORT)(_context);
//
// [FW] Used to indicate to the Forwarder that a preferred NIC is not given
// in InternalSend
//
#define INVALID_CONTEXT_VALUE 0xffffffff
//
// [FW] This is the value returned (in FindRoute) to IPX from the Forwarder in case of a demand dial Nic.
// On an InternalSend, this is passed up to the FWD, which brings up the line and returns the good LocalTarget
//
#define DEMAND_DIAL_ADAPTER_CONTEXT 0xffffffff
//
// Adapter context used by the FWD to represent a send to the virtual net.
// IPX maps this to the loopback adapter.
//
#define VIRTUAL_NET_ADAPTER_CONTEXT 0x1 //0xfffffffe // -2
//
// Context passed up to the FWD on a loopback send.
//
#define VIRTUAL_NET_FORWARDER_CONTEXT 0x1 // 0xfffffffe // -2
//
// Special NIC id used by NB/SPX to send packets over all NICs.
//
#define ITERATIVE_NIC_ID 0xfffd // -3
#endif // _ISN_BIND_