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