/********************************************************************/ /** 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 );