windows-nt/Source/XPSP1/NT/net/published/inc/isnkrnl.w
2020-09-26 16:20:57 +08:00

548 lines
20 KiB
OpenEdge ABL
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*++
Copyright (c) Microsoft Corporation. All rights reserved.
Module Name:
isnkrnl.h
Abstract:
This header file contains interface definitions for NT clients
of the ISN IPX/SPX/Netbios stack.
Author:
Adam Barr (adamba) 10 November 1993
Revision History:
--*/
#include <packon.h>
//
// Defines a local target. The NicId is assigned by IPX
// for each adapter or WAN line it is bound to. The MacAddress
// is generally the address of the remote machine or the
// router that is used to get to the remote machine.
//
//
//
// [SanjayAn] Changed LocalTarget to include a NicHandle
//
#ifdef _PNP_POWER
typedef struct _NIC_HANDLE {
USHORT NicId;
#ifdef _PNP_LATER
ULONG Version;
CSHORT Signature;
#endif _PNP_LATER
} NIC_HANDLE, *PNIC_HANDLE;
typedef struct _IPX_LOCAL_TARGET {
union {
USHORT NicId;
NIC_HANDLE NicHandle;
};
UCHAR MacAddress[6];
} IPX_LOCAL_TARGET, *PIPX_LOCAL_TARGET;
#else
typedef USHORT NIC_HANDLE;
typedef PUSHORT PNIC_HANDLE;
typedef struct _IPX_LOCAL_TARGET {
USHORT NicId;
UCHAR MacAddress[6];
} IPX_LOCAL_TARGET, *PIPX_LOCAL_TARGET;
#endif _PNP_POWER
//
// Definition of the options on a TDI datagram. These
// can be passed in as the Options field of a send
// datagram. It is indicated as the Options on a receive
// datagram, and will be copied into the Options field
// of a posted receive datagram if there is room.
//
// The complete structure does not need to be passed.
// Only the packet type can be passed, or nothing.
//
typedef struct _IPX_DATAGRAM_OPTIONS {
UCHAR PacketType;
UCHAR Reserved;
IPX_LOCAL_TARGET LocalTarget;
} IPX_DATAGRAM_OPTIONS, *PIPX_DATAGRAM_OPTIONS;
//
// The extended address that some addresses want. If
// the proper ioctl is set (MIPX_SENDADDROPT) then
// this structure is passed as the remote address on
// send datagrams...
//
typedef struct _IPX_ADDRESS_EXTENDED {
TA_IPX_ADDRESS IpxAddress;
UCHAR PacketType;
} IPX_ADDRESS_EXTENDED, *PIPX_ADDRESS_EXTENDED;
//
// ...and this structure is passed on receive indications.
// The values for Flags are defined right after it.
// By using the MIPX_SETRCVFLAGS ioctl you can also
// enable this format for receive addresses without
// changing what is passed on sends.
//
typedef struct _IPX_ADDRESS_EXTENDED_FLAGS {
TA_IPX_ADDRESS IpxAddress;
UCHAR PacketType;
UCHAR Flags;
} IPX_ADDRESS_EXTENDED_FLAGS, *PIPX_ADDRESS_EXTENDED_FLAGS;
//
// Just appends Nic to the above structure.
//
typedef struct _IPX_ADDRESS_EXTENDED_FLAGS2 {
TA_IPX_ADDRESS IpxAddress;
UCHAR PacketType;
UCHAR Flags;
ULONG Nic;
} IPX_ADDRESS_EXTENDED_FLAGS2, *PIPX_ADDRESS_EXTENDED_FLAGS2;
#define IPX_EXTENDED_FLAG_BROADCAST 0x01 // the frame was sent as a broadcast
#define IPX_EXTENDED_FLAG_LOCAL 0x02 // the frame was sent from this machine
//
// The various states of the NICs (LAN/WAN)
//
#define NIC_CREATED 1
#define NIC_DELETED 2
#define NIC_CONNECTED 3
#define NIC_DISCONNECTED 4
#define NIC_LINE_DOWN 5
#define NIC_LINE_UP 6
#define NIC_CONFIGURED 7
//
// The mother of all hacks - tell the forwarder if it should shrink or
// expand all the NICIds...
//
#define NIC_OPCODE_DECREMENT_NICIDS 0x10
#define NIC_OPCODE_INCREMENT_NICIDS 0x20
//
// Move the isnipx.h definitions over here
//
// Frame types. For now these mirror those in isnipx.h.
//
#define MISN_FRAME_TYPE_ETHERNET_II 0
#define MISN_FRAME_TYPE_802_3 1
#define MISN_FRAME_TYPE_802_2 2
#define MISN_FRAME_TYPE_SNAP 3
#define MISN_FRAME_TYPE_ARCNET 4 // we ignore this
#define MISN_FRAME_TYPE_MAX 4 // of the four standard ones
#define ISN_FRAME_TYPE_AUTO 0xff
#include <packoff.h>
//***NIC Info ***
//
// For now, we assume that there will not be more than 256 bindings.
// This is a big enough number for most cases that we will encounter now
// or the foreseeable future. We allocate an array of ULONGS of the above
// dimension. This array stores in its first n elements pointers to the
// bindings created for the various LAN and WAN adapters.
//
#define IPX_MAXIMUM_BINDINGS 256
//
// This is the interface that the Router process in address space uses
// to open an address end point. Only one point can currently be opened.
// The ea buffer should have the end point information in exactly the same
// format as is used for TdiTransportAddress endpoint.
//
#define ROUTER_INTERFACE "RouterInterface"
#define ROUTER_INTERFACE_LENGTH (sizeof("RouterInterface") - 1)
//
// Max. no. of ports that the Router can open
//
#define IPX_RT_MAX_ADDRESSES 16
// Structure for MIPX_CONFIG Ioctl parameters
typedef struct _ISN_ACTION_GET_DETAILS {
USHORT NicId; // passed by caller
BOOLEAN BindingSet; // returns TRUE if in set
UCHAR Type; // 1 = lan, 2 = up wan, 3 = down wan
ULONG FrameType; // returns 0 through 3
ULONG NetworkNumber; // returns virtual net if NicId is 0
UCHAR Node[6]; // adapter's MAC address.
WCHAR AdapterName[64]; // terminated with Unicode NULL
} ISN_ACTION_GET_DETAILS, *PISN_ACTION_GET_DETAILS;
//
// IPX_NIC_INFO. One or more such structures can be retrieved by a user
// app through the MIPX_GETNEWNICS ioctl.
//
typedef struct _IPX_NIC_INFO {
ULONG InterfaceIndex; // relevant only for demand dial WAN interfaces
UCHAR RemoteNodeAddress[6]; //remote nic address (only for WAN)
ULONG LinkSpeed; //speed of link
ULONG PacketType; //packet type 802.3 or whatever
ULONG MaxPacketSize; //Max. pkt size allowed on the link
ULONG NdisMediumType; //Medium type
ULONG NdisMediumSubtype; //
BOOLEAN Status;
ULONG ConnectionId; // used to match TimeSinceLastActivity IOCtls
ULONG IpxwanConfigRequired; // 1 - IPXWAN Required
ISN_ACTION_GET_DETAILS Details;
} IPX_NIC_INFO, *PIPX_NIC_INFO;
//
// structure to be passed in the input buffer for the MIPX_GETNEWNICS IOCTL
//
typedef struct _IPX_NICS {
ULONG NoOfNics;
ULONG TotalNoOfNics;
ULONG fAllNicsDesired; //indicates that the client wants
//ipx to start afresh
UCHAR Data[1]; //memory holding an array of IPX_NIC_INFO
//structures starts here
} IPX_NICS, *PIPX_NICS;
//
// Enhanced OPTIONS structure for use with the MIPX_GETNEWNICS ioctl
//
typedef struct _IPX_DATAGRAM_OPTIONS2 {
IPX_DATAGRAM_OPTIONS DgrmOptions;
TDI_ADDRESS_IPX RemoteAddress;
ULONG LengthOfExtraOpInfo; //set it to the size of the extra
//option info.
char Data[1]; //for future extensibility
} IPX_DATAGRAM_OPTIONS2, *PIPX_DATAGRAM_OPTIONS2;
//
// Invalid NicId passed down only once so IPX can map the ConnectionId
// to a NicId, which is used later.
//
#define INVALID_NICID 0xffffffff
//
// Structure to be passed with the MIPX_QUERY_WAN_INACTIVITY IOCTL
//
typedef struct _IPX_QUERY_WAN_INACTIVITY {
ULONG ConnectionId;
USHORT NicId; // if equals INVALID_NICID, AdapterIndex is filled in
// adapter index; should change to NicHandle [ZZ]
ULONG WanInactivityCounter; // filled in on return
} IPX_QUERY_WAN_INACTIVITY, *PIPX_QUERY_WAN_INACTIVITY;
//
// Structure to be passed with the MIPX_IPXWAN_CONFIG_DONE IOCTL
//
typedef struct _IPXWAN_CONFIG_DONE {
USHORT NicId; // adapter index; should change to NicHandle [ZZ]
ULONG Network;
UCHAR LocalNode[6];
UCHAR RemoteNode[6];
} IPXWAN_CONFIG_DONE, *PIPXWAN_CONFIG_DONE;
//
// Definitions for TDI_ACTION calls supported by ISN.
// In general the structure defined is passed in the
// OutputBuffer (which becomes the MDL chain when
// the transport receives it) and is used for input
// and output as specified.
//
//
// This is the TransportId to use in the action header
// (it is the string "MISN").
//
#define ISN_ACTION_TRANSPORT_ID (('N' << 24) | ('S' << 16) | ('I' << 8) | ('M'))
//
// Get local target is used to force a re-RIP and also
// obtain the local target information if desired. The
// IpxAddress is passed on input and the LocalTarget
// is returned on output. The structure defined here
// goes in the Data section of an NWLINK_ACTION
// structure with the Option set to MIPX_LOCALTARGET.
//
typedef struct _ISN_ACTION_GET_LOCAL_TARGET {
TDI_ADDRESS_IPX IpxAddress;
IPX_LOCAL_TARGET LocalTarget;
} ISN_ACTION_GET_LOCAL_TARGET, *PISN_ACTION_GET_LOCAL_TARGET;
//
// Get network information is used to return information
// about the path to a network. The information may not
// be accurate since it only reflects what IPX knows
// about the first hop to the remote. Network is an
// input and LinkSpeed (in bytes per second) and
// MaximumPacketSize (not including the IPX header)
// are returned. The structure defined here goes
// in the Data section of an NWLINK_ACTION structure
// with the Options set to MIPX_NETWORKINFO.
//
typedef struct _ISN_ACTION_GET_NETWORK_INFO {
ULONG Network;
ULONG LinkSpeed;
ULONG MaximumPacketSize;
} ISN_ACTION_GET_NETWORK_INFO, *PISN_ACTION_GET_NETWORK_INFO;
//
// This is the structure that the streams IPX transport used
// for its action requests. Because of the way in which nwlink
// was implemented, when passing this structure in a TDI_ACTION
// it should be specified as the InputBuffer, not the output
// buffer.
//
// In the action header, the TransportId is "MIPX" and the
// ActionCode is 0. DatagramOption is TRUE for IPX ioctls
// and FALSE for SPX. The BufferLength includes the length
// of everything after it, which is sizeof(ULONG) for Option
// plus whatever Data is present. Option is one of the
// ioctl codes defined after the structure; in most cases
// Data is not needed.
//
typedef struct _NWLINK_ACTION {
TDI_ACTION_HEADER Header;
UCHAR OptionType;
ULONG BufferLength;
ULONG Option;
CHAR Data[1];
} NWLINK_ACTION, *PNWLINK_ACTION;
//
// Defines the values for OptionType (note that for
// NWLINK this is a BOOLEAN DatagramOption, so we
// define these to match, adding the control channel
// one for ISN only).
//
#define NWLINK_OPTION_CONNECTION 0 // action is on a connection
#define NWLINK_OPTION_ADDRESS 1 // action is on an address
#define NWLINK_OPTION_CONTROL 2 // action is on the control channel,
// may also be submitted on an
// open connection or address object
//
// The following IOCTLs are taken from nwlink; the only
// ones added for ISN are the ones in the 200 range.
//
/** Ioctls for IPX - (X) = User callable **/
/**
ioctls will values 100 - 150 were added for the NT port.
**/
#define I_MIPX (('I' << 24) | ('D' << 16) | ('P' << 8))
#define MIPX_SETNODEADDR (I_MIPX | 0) /* Set the node address */
#define MIPX_SETNETNUM (I_MIPX | 1) /* Set the network number */
#define MIPX_SETPTYPE (I_MIPX | 2) /* (X) Set the packet type */
#define MIPX_SENTTYPE (I_MIPX | 3) /* (X) Set the xport type */
#define MIPX_SETPKTSIZE (I_MIPX | 4) /* Set the packet size */
#define MIPX_SETSAP (I_MIPX | 5) /* Set the sap/type field */
#define MIPX_SENDOPTS (I_MIPX | 6) /* (X) Send options on recv */
#define MIPX_NOSENDOPTS (I_MIPX | 7) /* (X) Don't send options on recv */
#define MIPX_SENDSRC (I_MIPX | 8) /* (X) Send source address up */
#define MIPX_NOSENDSRC (I_MIPX | 9) /* (X) Don't Send source address up */
#define MIPX_CONVBCAST (I_MIPX | 10) /* Convert TKR bcast to func addr */
#define MIPX_NOCONVBCAST (I_MIPX | 11) /* Don't cnvrt TKR bcast to funcaddr */
#define MIPX_SETCARDTYPE (I_MIPX | 12) /* Set 802.3 or ETH type */
#define MIPX_STARGROUP (I_MIPX | 13) /* This is stargroup */
#define MIPX_SWAPLENGTH (I_MIPX | 14) /* Set flag for swapping 802.3 length */
#define MIPX_SENDDEST (I_MIPX | 15) /* (X) Send dest. address up */
#define MIPX_NOSENDDEST (I_MIPX | 16) /* (X) Don't send dest. address up */
#define MIPX_SENDFDEST (I_MIPX | 17) /* (X) Send final dest. address up */
#define MIPX_NOSENDFDEST (I_MIPX | 18) /* (X) Don't send final dest. up */
/** Added for NT port **/
#define MIPX_SETVERSION (I_MIPX | 100) /* Set card version */
#define MIPX_GETSTATUS (I_MIPX | 101)
#define MIPX_SENDADDROPT (I_MIPX | 102) /* (X) Send ptype w/addr on recv */
#define MIPX_NOSENDADDROPT (I_MIPX | 103) /* (X) Stop sending ptype on recv */
#define MIPX_CHECKSUM (I_MIPX | 104) /* Enable/Disable checksum */
#define MIPX_GETPKTSIZE (I_MIPX | 105) /* Get max packet size */
#define MIPX_SENDHEADER (I_MIPX | 106) /* Send header with data */
#define MIPX_NOSENDHEADER (I_MIPX | 107) /* Don't send header with data */
#define MIPX_SETCURCARD (I_MIPX | 108) /* Set current card for IOCTLs */
#define MIPX_SETMACTYPE (I_MIPX | 109) /* Set the Cards MAC type */
#define MIPX_DOSROUTE (I_MIPX | 110) /* Do source routing on this card*/
#define MIPX_NOSROUTE (I_MIPX | 111) /* Don't source routine the card*/
#define MIPX_SETRIPRETRY (I_MIPX | 112) /* Set RIP retry count */
#define MIPX_SETRIPTO (I_MIPX | 113) /* Set RIP timeout */
#define MIPX_SETTKRSAP (I_MIPX | 114) /* Set the token ring SAP */
#define MIPX_SETUSELLC (I_MIPX | 115) /* Put LLC hdr on packets */
#define MIPX_SETUSESNAP (I_MIPX | 116) /* Put SNAP hdr on packets */
#define MIPX_8023LEN (I_MIPX | 117) /* 1=make even, 0=dont make even*/
#define MIPX_SENDPTYPE (I_MIPX | 118) /* Send ptype in options on recv*/
#define MIPX_NOSENDPTYPE (I_MIPX | 119) /* Don't send ptype in options */
#define MIPX_FILTERPTYPE (I_MIPX | 120) /* Filter on recv ptype */
#define MIPX_NOFILTERPTYPE (I_MIPX | 121) /* Don't Filter on recv ptype */
#define MIPX_SETSENDPTYPE (I_MIPX | 122) /* Set pkt type to send with */
#define MIPX_GETCARDINFO (I_MIPX | 123) /* Get info on a card */
#define MIPX_SENDCARDNUM (I_MIPX | 124) /* Send card num up in options */
#define MIPX_NOSENDCARDNUM (I_MIPX | 125) /* Dont send card num in options*/
#define MIPX_SETROUTER (I_MIPX | 126) /* Set router enabled flag */
#define MIPX_SETRIPAGE (I_MIPX | 127) /* Set RIP age timeout */
#define MIPX_SETRIPUSAGE (I_MIPX | 128) /* Set RIP usage timeout */
#define MIPX_SETSROUTEUSAGE (I_MIPX| 129) /* Set the SROUTE usage timeout */
#define MIPX_SETINTNET (I_MIPX | 130) /* Set internal network number */
#define MIPX_NOVIRTADDR (I_MIPX | 131) /* Turn off virtual net num */
#define MIPX_VIRTADDR (I_MIPX | 132) /* Turn on virtual net num */
#define MIPX_GETNETINFO (I_MIPX | 135) /* Get info on a network num */
#define MIPX_SETDELAYTIME (I_MIPX | 136) /* Set cards delay time */
#define MIPX_SETROUTEADV (I_MIPX | 137) /* Route advertise timeout */
#define MIPX_SETSOCKETS (I_MIPX | 138) /* Set default sockets */
#define MIPX_SETLINKSPEED (I_MIPX | 139) /* Set the link speed for a card*/
#define MIPX_SETWANFLAG (I_MIPX | 140)
#define MIPX_GETCARDCHANGES (I_MIPX | 141) /* Wait for card changes */
#define MIPX_GETMAXADAPTERS (I_MIPX | 142)
#define MIPX_REUSEADDRESS (I_MIPX | 143)
#define MIPX_RERIPNETNUM (I_MIPX | 144) /* ReRip a network */
#define MIPX_GETNETINFO_NR (I_MIPX | 145) /* Get info on a net num - NO RIP */
#define MIPX_SETNIC (I_MIPX | 146)
#define MIPX_NOSETNIC (I_MIPX | 147)
/** For Source Routing Support **/
#define MIPX_SRCLEAR (I_MIPX | 200) /* Clear the source routing table*/
#define MIPX_SRDEF (I_MIPX | 201) /* 0=Single Rte, 1=All Routes */
#define MIPX_SRBCAST (I_MIPX | 202) /* 0=Single Rte, 1=All Routes */
#define MIPX_SRMULTI (I_MIPX | 203) /* 0=Single Rte, 1=All Routes */
#define MIPX_SRREMOVE (I_MIPX | 204) /* Remove a node from the table */
#define MIPX_SRLIST (I_MIPX | 205) /* Get the source routing table */
#define MIPX_SRGETPARMS (I_MIPX | 206) /* Get source routing parms */
#define MIPX_SETSHOULDPUT (I_MIPX | 210) /* Turn on should put call */
#define MIPX_DELSHOULDPUT (I_MIPX | 211) /* Turn off should put call */
#define MIPX_GETSHOULDPUT (I_MIPX | 212) /* Get ptr to mipx_shouldput */
/** Added for ISN **/
#define MIPX_RCVBCAST (I_MIPX | 300) /* (X) Enable broadcast reception */
#define MIPX_NORCVBCAST (I_MIPX | 301) /* (X) Disable broadcast reception */
#define MIPX_ADAPTERNUM (I_MIPX | 302) /* Get maximum adapter number */
#define MIPX_NOTIFYCARDINFO (I_MIPX | 303) /* Pend until card info changes */
#define MIPX_LOCALTARGET (I_MIPX | 304) /* Get local target for address */
#define MIPX_NETWORKINFO (I_MIPX | 305) /* Return info about remote net */
#define MIPX_ZEROSOCKET (I_MIPX | 306) /* Use 0 as source socket on sends */
#define MIPX_SETRCVFLAGS (I_MIPX | 307) /* Turn on flags in receive addr */
#define MIPX_NORCVFLAGS (I_MIPX | 308) /* Turn off flags in receive addr */
#define MIPX_CONFIG (I_MIPX | 309) /* used by IPXROUTE for config info */
#define MIPX_LINECHANGE (I_MIPX | 310) /* queued until WAN line goes up/down */
#define MIPX_GETCARDINFO2 (I_MIPX | 311) /* Get info, return real send size for token-ring */
#define MIPX_ADAPTERNUM2 (I_MIPX | 312) /* Max. number including duplicates */
//
// Used by a user mode process to get nic info defined by the IPX_NIC_INFO
// structure.
//
// NOTE NOTE NOTE
//
// This is supposed to be used only by the FWRDR process and nobody else.
// If some other app. uses it, the FWRDR will be affected
//
//
#define MIPX_GETNEWNICINFO (I_MIPX | 313) /*Get any new NIC info that might
*be there*/
//
// IOCTL to be used if the interface is ROUTER_INTERFACE
//
#define MIPX_SEND_DATAGRAM _TDI_CONTROL_CODE((I_MIPX | 314), METHOD_IN_DIRECT) // send dgram
#define MIPX_RCV_DATAGRAM _TDI_CONTROL_CODE((I_MIPX | 315), METHOD_OUT_DIRECT) // send dgram
#define MIPX_RT_CREATE (I_MIPX | 316)
#define MIPX_IPXWAN_CONFIG_DONE (I_MIPX | 317)
#define MIPX_QUERY_WAN_INACTIVITY (I_MIPX | 318)
/** Ioctls for SPX **/
#define I_MSPX (('S' << 24) | ('P' << 16) | ('P' << 8))
#define MSPX_SETADDR (I_MSPX | 0) /* Set the network address */
#define MSPX_SETPKTSIZE (I_MSPX | 1) /* Set the packet size per card */
#define MSPX_SETDATASTREAM (I_MSPX | 2) /* Set datastream type */
/** Added for NT port **/
#define MSPX_SETASLISTEN (I_MSPX | 100) /* Set as a listen socket */
#define MSPX_GETSTATUS (I_MSPX | 101) /* Get running status */
#define MSPX_GETQUEUEPTR (I_MSPX | 102) /* Get ptr to the streams queue */
#define MSPX_SETDATAACK (I_MSPX | 103) /* Set DATA ACK option */
#define MSPX_NODATAACK (I_MSPX | 104) /* Turn off DATA ACK option */
#define MSPX_SETMAXPKTSOCK (I_MSPX | 105) /* Set the packet size per socket */
#define MSPX_SETWINDOWCARD (I_MSPX | 106) /* Set window size for card */
#define MSPX_SETWINDOWSOCK (I_MSPX | 107) /* Set window size for 1 socket */
#define MSPX_SENDHEADER (I_MSPX | 108) /* Send header with data */
#define MSPX_NOSENDHEADER (I_MSPX | 109) /* Don't send header with data */
#define MSPX_GETPKTSIZE (I_MSPX | 110) /* Get the packet size per card */
#define MSPX_SETCONNCNT (I_MSPX | 111) /* Set the conn req count */
#define MSPX_SETCONNTO (I_MSPX | 112) /* Set the conn req timeout */
#define MSPX_SETALIVECNT (I_MSPX | 113) /* Set the keepalive count */
#define MSPX_SETALIVETO (I_MSPX | 114) /* Set the keepalive timeout */
#define MSPX_SETALWAYSEOM (I_MSPX | 115) /* Turn on always EOM flag */
#define MSPX_NOALWAYSEOM (I_MSPX | 116) /* Turn off always EOM flag */
#define MSPX_GETSTATS (I_MSPX | 119) /* Get connection stats */
#define MSPX_NOACKWAIT (I_MSPX | 120) /* Disable piggyback wait */
#define MSPX_ACKWAIT (I_MSPX | 121) /* Enable pback wait (default) */
//
// Taken out of isn\inc\bind.h
//
typedef struct _IPXCP_CONFIGURATION {
USHORT Version;
USHORT Length;
UCHAR Network[4];
UCHAR LocalNode[6];
UCHAR RemoteNode[6];
ULONG ConnectionClient; // 0 - Server, 1 - Client
ULONG InterfaceIndex;
ULONG ConnectionId; // used to match TimeSinceLastActivity IOCtls
ULONG IpxwanConfigRequired; // 1 - IPXWAN Required
} IPXCP_CONFIGURATION, *PIPXCP_CONFIGURATION;
#define IPXWAN_SOCKET (USHORT)0x490