/*++ 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 // // 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_