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

594 lines
12 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) 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