|
|
/*++
Copyright (c) 1989 Microsoft Corporation
Module Name:
atalktdi.h
Abstract:
This file defines the interface that will be offered to the layers of the stack
Author:
Nikhil Kamkolkar (NikhilK) 8-Jun-1992
Revision History:
--*/
#ifndef _ATALKTDI_H
#define _ATALKTDI_H
//
// The provider names supported by the Appletalk stack
//
#define ATALKDDP_DEVICENAME L"\\Device\\AtalkDdp"
#define ATALKADSP_DEVICENAME L"\\Device\\AtalkAdsp"
#define ATALKASPS_DEVICENAME L"\\Device\\AtalkAspServer"
#define ATALKASPC_DEVICENAME L"\\Device\\AtalkAspClient"
#define ATALKPAP_DEVICENAME L"\\Device\\AtalkPap"
#define ATALKARAP_DEVICENAME L"\\Device\\AtalkArap"
//
// The following is passed in the TdiAction calls to reaffirm that
// the request is meant for the Appletalk transport.
//
#define MATK (*(ULONG *)"MATK")
//
// Options buffer for all the calls
//
typedef struct _OPTIONS_CONNINF { union { int ProtocolType; TRANSPORT_ADDRESS Address;
struct { TRANSPORT_ADDRESS RemoteAddress; USHORT WorkstationQuantum; USHORT ServerQuantum; } PapInfo; }; } OPTIONS_CONNINF, *POPTIONS_CONNINF; #define OPTIONS_LENGTH sizeof(OPTIONS_CONNINF)
typedef union { struct { USHORT Network; UCHAR Node; UCHAR Socket; }; ULONG Address; } ATALK_ADDRESS, *PATALK_ADDRESS;
//
// ACTION CODES:
// The NBP/ZIP primitives are available to all the providers. The action
// codes for those are defined first. Following this are the action
// codes specific to each provider. To insert a new action code, just
// tag it at the end of the action codes for a particular block (common/
// provider specific), and increment the max for that block.
//
// *IMPORTANT*
// These are tightly integrated with the dispatch table for the action
// routines in ATKINIT.C
//
#define COMMON_ACTIONBASE 0
#define MIN_COMMON_ACTIONCODE (COMMON_ACTIONBASE)
#define COMMON_ACTION_NBPLOOKUP (COMMON_ACTIONBASE)
#define COMMON_ACTION_NBPCONFIRM (COMMON_ACTIONBASE+0x01)
#define COMMON_ACTION_NBPREGISTER (COMMON_ACTIONBASE+0x02)
#define COMMON_ACTION_NBPREMOVE (COMMON_ACTIONBASE+0x03)
#define COMMON_ACTION_ZIPGETMYZONE (COMMON_ACTIONBASE+0x04)
#define COMMON_ACTION_ZIPGETZONELIST (COMMON_ACTIONBASE+0x05)
#define COMMON_ACTION_ZIPGETLZONES (COMMON_ACTIONBASE+0x06)
#define COMMON_ACTION_ZIPGETLZONESONADAPTER (COMMON_ACTIONBASE+0x07)
#define COMMON_ACTION_ZIPGETADAPTERDEFAULTS (COMMON_ACTIONBASE+0x08)
#define COMMON_ACTION_GETSTATISTICS (COMMON_ACTIONBASE+0x09)
#define MAX_COMMON_ACTIONCODE (COMMON_ACTIONBASE+0x09)
#define COMMON_ACTIONCODES (MAX_COMMON_ACTIONCODE - MIN_COMMON_ACTIONCODE + 1)
//
// Provider specific action codes
//
//
// DDP
//
// NONE
//
//
// ADSP
//
#define ADSP_ACTIONBASE (MAX_COMMON_ACTIONCODE + 0x01)
#define MIN_ADSPACTIONCODE (ADSP_ACTIONBASE)
#define ACTION_ADSPFORWARDRESET (ADSP_ACTIONBASE)
#define MAX_ADSPACTIONCODE (ADSP_ACTIONBASE)
#define ADSP_SPECIFIC_ACTIONCODES (MAX_ADSPACTIONCODE - MIN_ADSPACTIONCODE + 1)
//
// ASP Client
//
#define ASPC_ACTIONBASE (MAX_ADSPACTIONCODE + 0x01)
#define MIN_ASPCACTIONCODE (ATP_ACTIONBASE)
#define ACTION_ASPCGETSTATUS (ASPC_ACTIONBASE)
#define ACTION_ASPCCOMMAND (ASPC_ACTIONBASE+0x01)
#define ACTION_ASPCWRITE (ASPC_ACTIONBASE+0x02)
// The following 2 are for NBP, stole 2 slots here that were reserved
#define COMMON_ACTION_NBPREGISTER_BY_ADDR (ASPC_ACTIONBASE+0x03)
#define COMMON_ACTION_NBPREMOVE_BY_ADDR (ASPC_ACTIONBASE+0x04)
#define ACTION_ASPCRESERVED3 (ASPC_ACTIONBASE+0x05)
#define MAX_ASPCACTIONCODE (ASPC_ACTIONBASE+0x05)
#define ASPC_SPECIFIC_ACTIONCODES (MAX_ASPCACTIONCODE - MIN_ASPCACTIONCODE + 1)
//
// ASP Server
//
#define ASP_ACTIONBASE (MAX_ASPCACTIONCODE + 0x01)
#define MIN_ASPACTIONCODE (ASP_ACTIONBASE)
#define ACTION_ASP_BIND (ASP_ACTIONBASE)
#define MAX_ASPACTIONCODE (ASP_ACTIONBASE)
#define ASP_SPECIFIC_ACTIONCODES (MAX_ASPACTIONCODE - MIN_ASPACTIONCODE + 1)
//
// PAP
//
#define PAP_ACTIONBASE (MAX_ASPACTIONCODE + 0x01)
#define MIN_PAPACTIONCODE (PAP_ACTIONBASE)
#define ACTION_PAPGETSTATUSSRV (PAP_ACTIONBASE)
#define ACTION_PAPSETSTATUS (PAP_ACTIONBASE+0x01)
#define ACTION_PAPPRIMEREAD (PAP_ACTIONBASE+0x02)
#define MAX_PAPACTIONCODE (PAP_ACTIONBASE+0x02)
#define PAP_SPECIFIC_ACTIONCODES (MAX_PAPACTIONCODE - MIN_PAPACTIONCODE + 1)
#define MAX_ALLACTIONCODES (MAX_PAPACTIONCODE)
//
// STRUCTURE Definitions for the ACTION routines for all the providers
//
//
// NBP Interface
//
//
// **WARNING**
// The structure WSH_NBP_NAME is defined to be exactly like this in atalkwsh.h
// Change both if they ever need to be changed
//
#define MAX_ENTITY 32
typedef struct { UCHAR ObjectNameLen; UCHAR ObjectName[MAX_ENTITY]; UCHAR TypeNameLen; UCHAR TypeName[MAX_ENTITY]; UCHAR ZoneNameLen; UCHAR ZoneName[MAX_ENTITY]; } NBP_NAME, *PNBP_NAME;
typedef struct { ATALK_ADDRESS Address; USHORT Enumerator; NBP_NAME NbpName; } NBP_TUPLE, *PNBP_TUPLE;
//
// NBP Lookup
//
typedef struct { NBP_TUPLE LookupTuple; USHORT NoTuplesRead;
} NBP_LOOKUP_PARAMS, *PNBP_LOOKUP_PARAMS;
typedef struct { TDI_ACTION_HEADER ActionHeader; NBP_LOOKUP_PARAMS Params;
//
// NBP_TUPLE NbpTuples[]
//
} NBP_LOOKUP_ACTION, *PNBP_LOOKUP_ACTION;
//
// NBP Confirm
//
typedef struct { NBP_TUPLE ConfirmTuple;
} NBP_CONFIRM_PARAMS, *PNBP_CONFIRM_PARAMS;
typedef struct { TDI_ACTION_HEADER ActionHeader; NBP_CONFIRM_PARAMS Params;
} NBP_CONFIRM_ACTION, *PNBP_CONFIRM_ACTION;
//
// NBP Register/Deregister- Address Object
// Use the following for both register/deregister on their
// respective objects
//
typedef struct { union { NBP_TUPLE RegisterTuple; NBP_TUPLE RegisteredTuple; };
} NBP_REGDEREG_PARAMS, *PNBP_REGDEREG_PARAMS;
typedef struct { TDI_ACTION_HEADER ActionHeader; NBP_REGDEREG_PARAMS Params;
} NBP_REGDEREG_ACTION, *PNBP_REGDEREG_ACTION;
//
// ZIP Interface
//
//
// ZIP GetMyZone
//
typedef struct { TDI_ACTION_HEADER ActionHeader;
//
// CHAR ZoneName[]
// Maximum of MAX_ENTITYNAME+1
//
} ZIP_GETMYZONE_ACTION, *PZIP_GETMYZONE_ACTION;
//
// ZIP GetZoneList
//
typedef struct { LONG ZonesAvailable;
} ZIP_GETZONELIST_PARAMS, *PZIP_GETZONELIST_PARAMS;
typedef struct { TDI_ACTION_HEADER ActionHeader; ZIP_GETZONELIST_PARAMS Params;
//
// CHAR ZoneListBuffer[];
//
} ZIP_GETZONELIST_ACTION, *PZIP_GETZONELIST_ACTION;
//
// ZIP GetLocalZones
// This uses the same structure as that for the GetZoneList command
//
//
// ZIP GetLocalZonesOnAdapter
// This uses the same structure as for the GetZoneList command, with the
// condition that the adapter name follows the structure as a null
// terminated double-byte string. It will be overwritten upon return
// by the zone names.
//
//
// ZIP GetAdaptorDefaults (Network Range & Default Zone)
//
// The adapter name follows the structure as a null terminated double-byte
// string. This is replaced by the zone name.
typedef struct { USHORT NwRangeLowEnd; USHORT NwRangeHighEnd;
} ZIP_GETPORTDEF_PARAMS, *PZIP_GETPORTDEF_PARAMS;
typedef struct { TDI_ACTION_HEADER ActionHeader; ZIP_GETPORTDEF_PARAMS Params;
// INPUT:
// WCHAR AdaptorName
// Maximum of MAX_ENTITYNAME+1
//
// OUTPUT:
// BYTE DefZone[MAX_ENTITY+1];
} ZIP_GETPORTDEF_ACTION, *PZIP_GETPORTDEF_ACTION;
typedef struct { TDI_ACTION_HEADER ActionHeader;
// OUTPUT:
// Appletalk statistics structure
} GET_STATISTICS_ACTION, *PGET_STATISTICS_ACTION;
//
// DDP Interface
// NONE
//
//
// ADSP Interface- specific action routines for ADSP
//
//
// ADSP Forward Reset
//
typedef struct _ADSP_FORWARDRESET_ACTION { TDI_ACTION_HEADER ActionHeader; } ADSP_FORWARDRESET_ACTION, *PADSP_FORWARDRESET_ACTION;
//
// ASP Client Interface- specific action routines for ASP Client
//
//
// ASP GetStatus
//
typedef struct { TA_APPLETALK_ADDRESS ServerAddr;
} ASPC_GETSTATUS_PARAMS, *PASPC_GETSTATUS_PARAMS;
typedef struct { TDI_ACTION_HEADER ActionHeader; ASPC_GETSTATUS_PARAMS Params;
} ASPC_GETSTATUS_ACTION, *PASPC_GETSTATUS_ACTION;
//
// ASP Command or Write
//
typedef struct { USHORT CmdSize; USHORT WriteAndReplySize; // BYTE CmdBuff[CmdSize];
// BYTE WriteAndReplyBuf[ReplySize];
} ASPC_COMMAND_OR_WRITE_PARAMS, *PASPC_COMMAND_OR_WRITE_PARAMS;
typedef struct { TDI_ACTION_HEADER ActionHeader; ASPC_COMMAND_OR_WRITE_PARAMS Params;
} ASPC_COMMAND_OR_WRITE_ACTION, *PASPC_COMMAND_OR_WRITE_ACTION;
typedef struct { TDI_ACTION_HEADER ActionHeader;
} ASPC_RESERVED_ACTION, *PASPC_RESERVED_ACTION;
//
// ASP Server Interface- action routines specific to ASP Server
//
typedef PVOID CONNCTXT;
typedef struct { PUCHAR rq_RequestBuf; LONG rq_RequestSize; union { PMDL rq_WriteMdl; PMDL rq_ReplyMdl; }; PVOID rq_CacheMgrContext;
} REQUEST, *PREQUEST;
typedef VOID (FASTCALL *CLIENT_CLOSE_COMPLETION)( IN NTSTATUS Status, IN PVOID pCloseCtxt);
typedef VOID (FASTCALL *CLIENT_REPLY_COMPLETION)( IN NTSTATUS Status, IN PVOID pReplyCtxt, IN PREQUEST Request);
// Returns context to associate for this session
typedef CONNCTXT (FASTCALL *CLIENT_SESSION_NOTIFY)( IN PVOID pConnection, IN BOOLEAN fOverTcp);
typedef NTSTATUS (FASTCALL *CLIENT_REQUEST_NOTIFY)( IN NTSTATUS Status, IN PVOID ConnCtxt, IN PREQUEST Request);
// Returns MDL describing the buffer
typedef NTSTATUS (FASTCALL *CLIENT_GET_WRITEBUFFER)( IN PVOID pSda, IN PREQUEST pRequest);
typedef VOID (FASTCALL *CLIENT_ATTN_COMPLETION)( IN PVOID pContext);
typedef NTSTATUS (*ASP_CLOSE_CONN)( IN PVOID pConnection);
typedef NTSTATUS (*ASP_FREE_CONN)( IN PVOID pConnection);
typedef NTSTATUS (FASTCALL *ASP_LISTEN_CONTROL)( // Synchronous
IN PVOID pAspCtxt, IN BOOLEAN Active);
typedef NTSTATUS (*ASP_SET_STATUS)( // Synchronous
IN PVOID pAspCtxt, IN PUCHAR pStatus, IN USHORT StatusSize);
typedef NTSTATUS (FASTCALL *ASP_WRITE_CONTINUE)( IN PVOID PREQUEST);
typedef NTSTATUS (FASTCALL *ASP_REPLY)( IN PREQUEST pRequest, IN PUCHAR ResultCode);
typedef NTSTATUS (*ASP_SEND_ATTENTION)( IN PVOID pConnection, IN USHORT AttentionCode, IN PVOID pContext);
typedef struct { CLIENT_SESSION_NOTIFY clt_SessionNotify; // When a new session is established
CLIENT_REQUEST_NOTIFY clt_RequestNotify; // When a new request comes in
// Also on remote closes
CLIENT_GET_WRITEBUFFER clt_GetWriteBuffer; // For ASP Write command.
CLIENT_REPLY_COMPLETION clt_ReplyCompletion; // Completion routine for a reply
CLIENT_ATTN_COMPLETION clt_AttnCompletion; // Completion routine for send attention
CLIENT_CLOSE_COMPLETION clt_CloseCompletion; // Completion routine for a session close request
} ASP_CLIENT_ENTRIES, *PASP_CLIENT_ENTRIES;
typedef struct { ATALK_ADDRESS asp_AtalkAddr; // net addr of default adapter
PVOID asp_AspCtxt; ASP_SET_STATUS asp_SetStatus; ASP_CLOSE_CONN asp_CloseConn; ASP_FREE_CONN asp_FreeConn; ASP_LISTEN_CONTROL asp_ListenControl; ASP_WRITE_CONTINUE asp_WriteContinue; ASP_REPLY asp_Reply; ASP_SEND_ATTENTION asp_SendAttention; } ASP_XPORT_ENTRIES, *PASP_XPORT_ENTRIES;
//
// ASP Exchange entries
//
typedef struct { PASP_XPORT_ENTRIES pXportEntries; ASP_CLIENT_ENTRIES ClientEntries; } ASP_BIND_PARAMS, *PASP_BIND_PARAMS;
typedef struct { TDI_ACTION_HEADER ActionHeader; ASP_BIND_PARAMS Params; } ASP_BIND_ACTION, *PASP_BIND_ACTION;
//
// PAP Interface
//
//
// PAP GetStatus Using Server Address
//
typedef struct { TA_APPLETALK_ADDRESS ServerAddr;
} PAP_GETSTATUSSRV_PARAMS, *PPAP_GETSTATUSSRV_PARAMS;
typedef struct { TDI_ACTION_HEADER ActionHeader; PAP_GETSTATUSSRV_PARAMS Params;
} PAP_GETSTATUSSRV_ACTION, *PPAP_GETSTATUSSRV_ACTION;
//
// PAP SetStatus
//
typedef struct { TDI_ACTION_HEADER ActionHeader;
} PAP_SETSTATUS_ACTION, *PPAP_SETSTATUS_ACTION;
//
// PAP PrimeRead
//
typedef struct { TDI_ACTION_HEADER ActionHeader;
} PAP_PRIMEREAD_ACTION, *PPAP_PRIMEREAD_ACTION;
#else
; #endif
|