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

325 lines
11 KiB
C
Raw 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) 1996 Microsoft Corporation. **/
/********************************************************************/
//***
//
// Filename: arapio.h
//
// Description: Contains all the defines, macros, structures that are needed
// for the ioctl interface between arap and the stack
//
// History: Sep 11, 1996 Shirish Koti Created original version.
//
//***
// range 0x800-0xfff is for private ioctls: pick something!
#define ARAP_IOCTL_BASE 0x900
#define ARAP_CTL(_req_, _method_) CTL_CODE( FILE_DEVICE_NETWORK, \
_req_ + ARAP_IOCTL_BASE, \
_method_, \
FILE_ANY_ACCESS )
//
// ioctl codes issued to the stack
//
#define IOCTL_ARAP_START ARAP_CTL( 1, METHOD_BUFFERED)
#define IOCTL_ARAP_EXCHANGE_PARMS ARAP_CTL( 2, METHOD_BUFFERED)
#define IOCTL_ARAP_SETUP_CONNECTION ARAP_CTL( 3, METHOD_BUFFERED)
#define IOCTL_ARAP_GET_ZONE_LIST ARAP_CTL( 4, METHOD_BUFFERED)
#define IOCTL_ARAP_MNP_CONN_INITIATE ARAP_CTL( 5, METHOD_BUFFERED)
#define IOCTL_ARAP_MNP_CONN_RESPOND ARAP_CTL( 6, METHOD_BUFFERED)
#define IOCTL_ARAP_GET_ADDR ARAP_CTL( 7, METHOD_BUFFERED)
#define IOCTL_ARAP_CONNECTION_UP ARAP_CTL( 8, METHOD_BUFFERED)
#define IOCTL_ARAP_SEND ARAP_CTL( 9, METHOD_BUFFERED)
#define IOCTL_ARAP_RECV ARAP_CTL( 10, METHOD_BUFFERED)
#define IOCTL_ARAP_SELECT ARAP_CTL( 11, METHOD_BUFFERED)
#define IOCTL_ARAP_GET_STATS ARAP_CTL( 12, METHOD_BUFFERED)
#define IOCTL_ARAP_DISCONNECT ARAP_CTL( 13, METHOD_BUFFERED)
#define IOCTL_ARAP_CONTINUE_SHUTDOWN ARAP_CTL( 14, METHOD_BUFFERED)
#define IOCTL_ARAP_SNIFF_PKTS ARAP_CTL( 15, METHOD_BUFFERED)
#define IOCTL_ATCP_SETUP_CONNECTION ARAP_CTL( 16, METHOD_BUFFERED)
#define IOCTL_ATCP_SUPPRESS_BCAST ARAP_CTL( 17, METHOD_BUFFERED)
#define IOCTL_ATCP_CLOSE_CONNECTION ARAP_CTL( 18, METHOD_BUFFERED)
#define IOCTL_ARAP_END ARAP_CTL( 19, METHOD_BUFFERED)
//
// 0x122404 IOCTL_ARAP_START
// 0x122408 IOCTL_ARAP_EXCHANGE_PARMS
// 0x12240c IOCTL_ARAP_SETUP_CONNECTION
// 0x122410 IOCTL_ARAP_GET_ZONE_LIST
// 0x122414 IOCTL_ARAP_MNP_CONN_INITIATE
// 0x122418 IOCTL_ARAP_MNP_CONN_RESPOND
// 0x12241c IOCTL_ARAP_GET_ADDR
// 0x122420 IOCTL_ARAP_CONNECTION_UP
// 0x122424 IOCTL_ARAP_SEND
// 0x122428 IOCTL_ARAP_RECV
// 0x12242c IOCTL_ARAP_SELECT
// 0x122430 IOCTL_ARAP_GET_STATS
// 0x122434 IOCTL_ARAP_DISCONNECT
// 0x122438 IOCTL_ARAP_CONTINUE_SHUTDOWN
// 0x12243c IOCTL_ARAP_SNIFF_PKTS
// 0x122440 IOCTL_ATCP_SETUP_CONNECTION
// 0x122444 IOCTL_ATCP_SUPPRESS_BCAST
// 0x122448 IOCTL_ATCP_CLOSE_CONNECTION
// 0x12244c IOCTL_ARAP_END
//
// Error codes used by the various ARAP components
//
#define ARAPERRBASE 40000
#define ARAPERR_NO_ERROR 0
#define ARAPERR_PENDING (ARAPERRBASE + 1)
#define ARAPERR_CANNOT_OPEN_STACK (ARAPERRBASE + 2)
#define ARAPERR_OUT_OF_RESOURCES (ARAPERRBASE + 3)
#define ARAPERR_SEND_FAILED (ARAPERRBASE + 4)
#define ARAPERR_LSA_ERROR (ARAPERRBASE + 5)
#define ARAPERR_PASSWD_NOT_AVAILABLE (ARAPERRBASE + 6)
#define ARAPERR_NO_DIALIN_PERMS (ARAPERRBASE + 7)
#define ARAPERR_AUTH_FAILURE (ARAPERRBASE + 8)
#define ARAPERR_PASSWORD_TOO_LONG (ARAPERRBASE + 9)
#define ARAPERR_COULDNT_GET_SAMHANDLE (ARAPERRBASE + 10)
#define ARAPERR_BAD_PASSWORD (ARAPERRBASE + 11)
#define ARAPERR_SET_PASSWD_FAILED (ARAPERRBASE + 12)
#define ARAPERR_CLIENT_OUT_OF_SYNC (ARAPERRBASE + 13)
#define ARAPERR_IOCTL_FAILURE (ARAPERRBASE + 14)
#define ARAPERR_UNEXPECTED_RESPONSE (ARAPERRBASE + 15)
#define ARAPERR_BAD_VERSION (ARAPERRBASE + 16)
#define ARAPERR_BAD_FORMAT (ARAPERRBASE + 17)
#define ARAPERR_BUF_TOO_SMALL (ARAPERRBASE + 18)
#define ARAPERR_FATAL_ERROR (ARAPERRBASE + 19)
#define ARAPERR_TIMEOUT (ARAPERRBASE + 20)
#define ARAPERR_IRP_IN_PROGRESS (ARAPERRBASE + 21)
#define ARAPERR_DISCONNECT_IN_PROGRESS (ARAPERRBASE + 22)
#define ARAPERR_LDISCONNECT_COMPLETE (ARAPERRBASE + 23)
#define ARAPERR_RDISCONNECT_COMPLETE (ARAPERRBASE + 24)
#define ARAPERR_NO_SUCH_CONNECTION (ARAPERRBASE + 25)
#define ARAPERR_STACK_NOT_UP (ARAPERRBASE + 26)
#define ARAPERR_NO_NETWORK_ADDR (ARAPERRBASE + 27)
#define ARAPERR_BAD_NETWORK_RANGE (ARAPERRBASE + 28)
#define ARAPERR_INVALID_STATE (ARAPERRBASE + 29)
#define ARAPERR_CONN_INACTIVE (ARAPERRBASE + 30)
#define ARAPERR_DATA (ARAPERRBASE + 31)
#define ARAPERR_STACK_SHUTDOWN_REQUEST (ARAPERRBASE + 32)
#define ARAPERR_SHUTDOWN_COMPLETE (ARAPERRBASE + 33)
#define ARAPERR_STACK_ROUTER_NOT_UP (ARAPERRBASE + 34)
#define ARAPERR_STACK_PNP_IN_PROGRESS (ARAPERRBASE + 35)
#define ARAPERR_STACK_IS_NOT_ACTIVE (ARAPERRBASE + 35)
#define ARAPERR_STACK_IS_ACTIVE (ARAPERRBASE + 36)
//
// max LTM can be 618 bytes, min is 604: let's be conservative on the way out,
// and liberal on incoming packets
//
#define ARAP_MAXPKT_SIZE_INCOMING 618
#define ARAP_MAXPKT_SIZE_OUTGOING 604
#define MAX_DOMAIN_LEN 15
#define MAX_ZONE_LENGTH 32
#define MAX_ENTITY_LENGTH 32
#define ZONESTR_LEN MAX_ZONE_LENGTH+2
#define NAMESTR_LEN MAX_ENTITY_LENGTH+2
#define MNP_SYN 0x16
#define MNP_DLE 0x10
#define MNP_SOH 0x1
#define MNP_ESC 0x1B
#define MNP_STX 0x2
#define MNP_ETX 0x3
#define ARAP_SNIFF_BUFF_SIZE 4080
typedef struct _NET_ADDR
{
USHORT ata_Network;
USHORT ata_Node;
} NET_ADDR, *PNET_ADDR;
typedef struct _NETWORKRANGE
{
USHORT LowEnd;
USHORT HighEnd;
} NETWORKRANGE, *PNETWORKRANGE;
typedef struct _HIDZONES
{
DWORD BufSize; // how big is the buffer containing zone names
DWORD NumZones; // number of zones "disallowed" for dial-in users
UCHAR ZonesNames[1]; // list of zones "disallowed" for dial-in users
} HIDZONES, *PHIDZONES;
typedef struct _ARAP_PARMS
{
DWORD LowVersion;
DWORD HighVersion;
DWORD accessFlags; // GuestAccess?|ManualPwd?|MultiPort?
DWORD NumPorts; // number of ras ports on the system
DWORD UserCallCBOk; // user can request callback
DWORD CallbackDelay; // seconds to wait before callback
DWORD PasswordRetries; // allow client to try pwd these many times
DWORD MinPwdLen; // min length of the pwd that server needs
DWORD MnpInactiveTime; // seconds of idle time before disconnect
DWORD MaxLTFrames; // max LT frames outstanding (rcv window)
BOOLEAN V42bisEnabled; //
BOOLEAN SmartBuffEnabled; //
BOOLEAN NetworkAccess; // access to network or only this server
BOOLEAN DynamicMode; // we want the stack to get node address
NETWORKRANGE NetRange;
BOOLEAN SniffMode; // give all pkts to ARAP to "sniff"
DWORD NumZones; // # of zones (info provided by the stack)
NET_ADDR ServerAddr; // atalk addr of the srvr (on default node)
UCHAR ServerZone[ZONESTR_LEN]; // space padded Pascal string
UCHAR ServerName[NAMESTR_LEN]; // space padded Pascal string
WCHAR ServerDomain[MAX_DOMAIN_LEN+1];
UNICODE_STRING GuestName;
} ARAP_PARMS, *PARAP_PARMS;
typedef struct _EXCHGPARMS
{
DWORD StatusCode;
ARAP_PARMS Parms;
HIDZONES HidZones;
} EXCHGPARMS, *PEXCHGPARMS;
typedef struct _ARAP_BIND_INFO
{
IN DWORD BufLen; // size of this structure
IN PVOID pDllContext;
IN BOOLEAN fThisIsPPP; // TRUE if PPP conn, FALSE if ARAP
IN NET_ADDR ClientAddr; // network addr of the remote client
OUT PVOID AtalkContext;
OUT DWORD ErrorCode;
} ARAP_BIND_INFO, *PARAP_BIND_INFO;
typedef struct _ARAP_SEND_RECV_INFO
{
PVOID AtalkContext;
PVOID pDllContext;
NET_ADDR ClientAddr;
DWORD IoctlCode;
DWORD StatusCode; // returned by the stack
DWORD DataLen;
BYTE Data[1];
} ARAP_SEND_RECV_INFO, *PARAP_SEND_RECV_INFO;
typedef struct _ARAP_ZONE
{
BYTE ZoneNameLen;
BYTE ZoneName[1];
} ARAP_ZONE, *PARAP_ZONE;
typedef struct _ZONESTAT
{
DWORD BufLen; // how big is this buffer
DWORD BytesNeeded; // how many bytes are needed
DWORD StatusCode; // returned by the stack
DWORD NumZones; // number of zones (in this buffer)
UCHAR ZoneNames[1]; // Names of the zones (Pascal strings)
} ZONESTAT, *PZONESTAT;
typedef struct _STAT_INFO
{
DWORD BytesSent;
DWORD BytesRcvd;
DWORD FramesSent;
DWORD FramesRcvd;
DWORD BytesTransmittedUncompressed;
DWORD BytesReceivedUncompressed;
DWORD BytesTransmittedCompressed;
DWORD BytesReceivedCompressed;
} STAT_INFO, *PSTAT_INFO;
typedef struct _ATCPINFO
{
NET_ADDR ServerAddr;
NET_ADDR DefaultRouterAddr;
UCHAR ServerZoneName[ZONESTR_LEN];
} ATCPINFO, *PATCPINFO;
typedef struct _ATCP_SUPPRESS_INFO
{
BOOLEAN SuppressRtmp;
BOOLEAN SuppressAllBcast;
} ATCP_SUPPRESS_INFO, *PATCP_SUPPRESS_INFO;
#define ARAP_SNIFF_SIGNATURE 0xfacebead
typedef struct _SNIFF_INFO
{
DWORD Signature;
DWORD TimeStamp;
USHORT Location;
USHORT FrameLen;
BYTE Frame[1];
} SNIFF_INFO, *PSNIFF_INFO;
//
// states for the Arap-Atcp engine
//
#define ENGINE_UNBORN 0 // nothing happened yet
#define ENGINE_DLL_ATTACHED 1 // dll loaded, and init for globals done
#define ENGINE_INIT_PENDING 2 // engine init work in progress
#define ENGINE_INIT_DONE 3 // engine init completed
#define ENGINE_STACK_OPEN_PENDING 4 // appletalk stack open is pending
#define ENGINE_STACK_OPENED 5 // appletalk stack has been opened
#define ENGINE_CONFIGURE_PENDING 6 // configuring appletalk stack in progress
#define ENGINE_RUNNING 7 // ready to accept arap connections
#define ENGINE_PNP_PENDING 8 // engine is undergoing a PnP change
#define ENGINE_STOPPING 9 // engine's stopping
//
// exports from rasarap.lib, used by ATCP
//
DWORD
ArapAtcpGetState(
IN VOID
);
HANDLE
ArapAtcpGetHandle(
IN VOID
);
DWORD
ArapAtcpPnPNotify(
IN VOID
);
DWORD
ArapAtcpStartEngine(
IN VOID
);