summaryrefslogtreecommitdiffstats
path: root/public/sdk/inc/dlcapi.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--public/sdk/inc/dlcapi.h908
1 files changed, 908 insertions, 0 deletions
diff --git a/public/sdk/inc/dlcapi.h b/public/sdk/inc/dlcapi.h
new file mode 100644
index 000000000..f43fc1553
--- /dev/null
+++ b/public/sdk/inc/dlcapi.h
@@ -0,0 +1,908 @@
+/*++
+
+Copyright (c) 1991-1996 Microsoft Corporation
+
+Module Name:
+
+ dlcapi.h
+
+Abstract:
+
+ This module defines 32-bit Windows/NT DLC structures and manifests
+
+Revision History:
+
+--*/
+
+#ifndef _DLCAPI_
+#define _DLCAPI_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+//
+// DLC Command Codes
+//
+
+#define LLC_DIR_INTERRUPT 0x00
+#define LLC_DIR_OPEN_ADAPTER 0x03
+#define LLC_DIR_CLOSE_ADAPTER 0x04
+#define LLC_DIR_SET_MULTICAST_ADDRESS 0x05
+#define LLC_DIR_SET_GROUP_ADDRESS 0x06
+#define LLC_DIR_SET_FUNCTIONAL_ADDRESS 0x07
+#define LLC_DIR_READ_LOG 0x08
+#define LLC_TRANSMIT_FRAMES 0x09
+#define LLC_TRANSMIT_DIR_FRAME 0x0A
+#define LLC_TRANSMIT_I_FRAME 0x0B
+#define LLC_TRANSMIT_UI_FRAME 0x0D
+#define LLC_TRANSMIT_XID_CMD 0x0E
+#define LLC_TRANSMIT_XID_RESP_FINAL 0x0F
+#define LLC_TRANSMIT_XID_RESP_NOT_FINAL 0x10
+#define LLC_TRANSMIT_TEST_CMD 0x11
+#define LLC_DLC_RESET 0x14
+#define LLC_DLC_OPEN_SAP 0x15
+#define LLC_DLC_CLOSE_SAP 0x16
+#define LLC_DLC_REALLOCATE_STATIONS 0x17
+#define LLC_DLC_OPEN_STATION 0x19
+#define LLC_DLC_CLOSE_STATION 0x1A
+#define LLC_DLC_CONNECT_STATION 0x1B
+#define LLC_DLC_MODIFY 0x1C
+#define LLC_DLC_FLOW_CONTROL 0x1D
+#define LLC_DLC_STATISTICS 0x1E
+#define LLC_DIR_INITIALIZE 0x20
+#define LLC_DIR_STATUS 0x21
+#define LLC_DIR_TIMER_SET 0x22
+#define LLC_DIR_TIMER_CANCEL 0x23
+#define LLC_BUFFER_GET 0x26
+#define LLC_BUFFER_FREE 0x27
+#define LLC_RECEIVE 0x28
+#define LLC_RECEIVE_CANCEL 0x29
+#define LLC_RECEIVE_MODIFY 0x2A
+#define LLC_DIR_TIMER_CANCEL_GROUP 0x2C
+#define LLC_DIR_SET_EXCEPTION_FLAGS 0x2D
+#define LLC_BUFFER_CREATE 0x30
+#define LLC_READ 0x31
+#define LLC_READ_CANCEL 0x32
+#define LLC_DLC_SET_THRESHOLD 0x33
+#define LLC_DIR_CLOSE_DIRECT 0x34
+#define LLC_DIR_OPEN_DIRECT 0x35
+#define LLC_MAX_DLC_COMMAND 0x37
+
+//
+// forward definitions
+//
+
+union _LLC_PARMS;
+typedef union _LLC_PARMS LLC_PARMS, *PLLC_PARMS;
+
+//
+// Parameters. Can be pointer to a parameter table (32-bit flat address),
+// a single 32-bit ULONG, 2 16-bit USHORTs or 4 8-bit BYTEs
+//
+
+typedef union {
+
+ PLLC_PARMS pParameterTable; // pointer to the parameter table
+
+ struct {
+ USHORT usStationId; // Station id
+ USHORT usParameter; // optional parameter
+ } dlc;
+
+ struct {
+ USHORT usParameter0; // first optional parameter
+ USHORT usParameter1; // second optional parameter
+ } dir;
+
+ UCHAR auchBuffer[4]; // group/functional address
+
+ ULONG ulParameter;
+
+} CCB_PARMS;
+
+//
+// LLC_CCB - the Command Control Block structure
+//
+
+typedef struct _LLC_CCB {
+ UCHAR uchAdapterNumber; // Adapter 0 or 1
+ UCHAR uchDlcCommand; // DLC command
+ UCHAR uchDlcStatus; // DLC command completion code
+ UCHAR uchReserved1; // reserved for DLC DLL
+ struct _LLC_CCB* pNext; // CCB chain
+ ULONG ulCompletionFlag; // used in command completion
+ CCB_PARMS u; // parameters
+ HANDLE hCompletionEvent; // event for command completion
+ UCHAR uchReserved2; // reserved for DLC DLL
+ UCHAR uchReadFlag; // set when special READ CCB chained
+ USHORT usReserved3; // reserved for DLC DLL
+} LLC_CCB, *PLLC_CCB;
+
+//
+// transmit/receive buffers
+//
+
+union _LLC_BUFFER;
+typedef union _LLC_BUFFER LLC_BUFFER, *PLLC_BUFFER;
+
+typedef struct {
+ PLLC_BUFFER pNextBuffer; // next DLC buffer in frame
+ USHORT cbFrame; // length of the whole received frame
+ USHORT cbBuffer; // length of this segment
+ USHORT offUserData; // offset of data from descriptor header
+ USHORT cbUserData; // length of the data
+} LLC_NEXT_BUFFER;
+
+typedef struct {
+ PLLC_BUFFER pNextBuffer; // next buffer of frame
+ USHORT cbFrame; // length of entire frame
+ USHORT cbBuffer; // length of this buffer
+ USHORT offUserData; // user data in this struct
+ USHORT cbUserData; // length of user data
+ USHORT usStationId; // ssnn station id
+ UCHAR uchOptions; // option byte from RECEIVE param tbl
+ UCHAR uchMsgType; // the message type
+ USHORT cBuffersLeft; // number of basic buffer units left
+ UCHAR uchRcvFS; // the reveived frame status
+ UCHAR uchAdapterNumber; // adapter number
+ PLLC_BUFFER pNextFrame; // pointer to next frame
+ UCHAR cbLanHeader; // length of the lan header
+ UCHAR cbDlcHeader; // length of the DLC header
+ UCHAR auchLanHeader[32]; // lan header of the received frame
+ UCHAR auchDlcHeader[4]; // dlc header of the received frame
+ USHORT usPadding; // data begins from offset 64 !!!
+} LLC_NOT_CONTIGUOUS_BUFFER;
+
+typedef struct {
+ PLLC_BUFFER pNextBuffer; // next buffer of frame
+ USHORT cbFrame; // length of entire frame
+ USHORT cbBuffer; // length of this buffer
+ USHORT offUserData; // user data in this struct
+ USHORT cbUserData; // length of user data
+ USHORT usStationId; // ssnn station id
+ UCHAR uchOptions; // option byte from RECEIVE param tbl
+ UCHAR uchMsgType; // the message type
+ USHORT cBuffersLeft; // number of basic buffer units left
+ UCHAR uchRcvFS; // the reveived frame status
+ UCHAR uchAdapterNumber; // adapter number
+ PLLC_BUFFER pNextFrame; // pointer to next frame
+} LLC_CONTIGUOUS_BUFFER;
+
+//
+// Received frames are returned in these data structures
+//
+
+union _LLC_BUFFER {
+
+ PLLC_BUFFER pNext;
+
+ LLC_NEXT_BUFFER Next;
+
+ struct LlcNextBuffer {
+ LLC_NEXT_BUFFER Header;
+ UCHAR auchData[];
+ } Buffer;
+
+ LLC_NOT_CONTIGUOUS_BUFFER NotContiguous;
+
+ struct {
+ LLC_NOT_CONTIGUOUS_BUFFER Header;
+ UCHAR auchData[];
+ } NotCont;
+
+ LLC_CONTIGUOUS_BUFFER Contiguous;
+
+ struct {
+ LLC_CONTIGUOUS_BUFFER Header;
+ UCHAR auchData[];
+ } Cont;
+
+};
+
+//
+// This structure is used by BUFFER.GET, BUFFER.FREE and TRANSMIT
+//
+
+struct _LLC_XMIT_BUFFER;
+typedef struct _LLC_XMIT_BUFFER LLC_XMIT_BUFFER, *PLLC_XMIT_BUFFER;
+
+struct _LLC_XMIT_BUFFER {
+ PLLC_XMIT_BUFFER pNext; // next buffer (or NULL)
+ USHORT usReserved1; //
+ USHORT cbBuffer; // length of transmitted data
+ USHORT usReserved2; //
+ USHORT cbUserData; // length of optional header
+ UCHAR auchData[]; // optional header and transmitted data
+};
+
+#define LLC_XMIT_BUFFER_SIZE sizeof(LLC_XMIT_BUFFER)
+
+//
+// CCB parameter tables
+//
+
+typedef struct {
+ HANDLE hBufferPool; // handle of new buffer pool
+ PVOID pBuffer; // any buffer in memory
+ ULONG cbBufferSize; // buffer size in bytes
+ ULONG cbMinimumSizeThreshold; // minimum locked size
+} LLC_BUFFER_CREATE_PARMS, *PLLC_BUFFER_CREATE_PARMS;
+
+typedef struct {
+ USHORT usReserved1; // Station id is not used
+ USHORT cBuffersLeft; // free 256 buffer segments
+ ULONG ulReserved;
+ PLLC_XMIT_BUFFER pFirstBuffer; // buffer chain
+} LLC_BUFFER_FREE_PARMS, *PLLC_BUFFER_FREE_PARMS;
+
+typedef struct {
+ USHORT usReserved1; // Station id is not used
+ USHORT cBuffersLeft; // free 256 buffer segments
+
+ //
+ // cBuffersToGet: number of buffers to get. If 0, the returned buffer list
+ // may consist of segment of different size
+ //
+
+ USHORT cBuffersToGet;
+
+ //
+ // cbBufferSize: size of the requested buffers. This will be rounded up to
+ // the next largest segment size: 256, 512, 1024, 2048 or 4096
+ //
+
+ USHORT cbBufferSize;
+ PLLC_XMIT_BUFFER pFirstBuffer;
+} LLC_BUFFER_GET_PARMS, *PLLC_BUFFER_GET_PARMS;
+
+//
+// parameter table for DLC.CONNECT.STATION
+//
+
+typedef struct {
+ USHORT usStationId; // SAP or direct station ID, defines the pool
+ USHORT usReserved;
+ PUCHAR pRoutingInfo; // offset to the routing info
+} LLC_DLC_CONNECT_PARMS, *PLLC_DLC_CONNECT_PARMS;
+
+//
+// DLC_FLOW_CONTROL Options:
+//
+
+#define LLC_RESET_LOCAL_BUSY_USER 0x80
+#define LLC_RESET_LOCAL_BUSY_BUFFER 0xC0
+#define LLC_SET_LOCAL_BUSY_USER 0
+
+typedef struct {
+ USHORT usRes;
+ USHORT usStationId; // SAP or link station id
+ UCHAR uchT1; // response timer
+ UCHAR uchT2; // aknowledgment timer
+ UCHAR uchTi; // inactivity timer
+ UCHAR uchMaxOut; // max transmits without ack
+ UCHAR uchMaxIn; // max receives without ack
+ UCHAR uchMaxOutIncr; // dynamic window increment value
+ UCHAR uchMaxRetryCnt; // N2 value (retries)
+ UCHAR uchReserved1;
+ USHORT usMaxInfoFieldLength; // Only for link stations, NEW!!!
+ UCHAR uchAccessPriority; // token ring access priority
+ UCHAR auchReserved3[4];
+ UCHAR cGroupCount; // number of group SAPs of this SAP
+ PUCHAR pGroupList; // offset to the group list
+} LLC_DLC_MODIFY_PARMS, *PLLC_DLC_MODIFY_PARMS;
+
+#define LLC_XID_HANDLING_IN_APPLICATION 0x08
+#define LLC_XID_HANDLING_IN_DLC 0
+#define LLC_INDIVIDUAL_SAP 0x04
+#define LLC_GROUP_SAP 0x02
+#define LLC_MEMBER_OF_GROUP_SAP 0x01
+
+typedef struct {
+ USHORT usStationId; // SAP or link station id
+ USHORT usUserStatValue; // reserved for user
+ UCHAR uchT1; // response timer
+ UCHAR uchT2; // aknowledgment timer
+ UCHAR uchTi; // inactivity timer
+ UCHAR uchMaxOut; // max tramists without ack
+ UCHAR uchMaxIn; // max receives without ack
+ UCHAR uchMaxOutIncr; // dynamic window increment value
+ UCHAR uchMaxRetryCnt; // N2 value (retries)
+ UCHAR uchMaxMembers; // maximum members for group SAP
+ USHORT usMaxI_Field; // maximum length of the Info field
+ UCHAR uchSapValue; // SAP value to be assigned
+ UCHAR uchOptionsPriority; // SAP options and access priority
+ UCHAR uchcStationCount; // maximum number of link stations in sap
+ UCHAR uchReserved2[2]; //
+ UCHAR cGroupCount; // number of group SAPs of this SAP
+ PUCHAR pGroupList; // offset to the group list
+ ULONG DlcStatusFlags; // User notify flag for DLC status changes
+ UCHAR uchReserved3[8]; // reserved
+ UCHAR cLinkStationsAvail; // total number of available link stations
+} LLC_DLC_OPEN_SAP_PARMS, *PLLC_DLC_OPEN_SAP_PARMS;
+
+typedef struct {
+ USHORT usSapStationId; // SAP station id
+ USHORT usLinkStationId; // Link station id
+ UCHAR uchT1; // response timer
+ UCHAR uchT2; // aknowledgment timer
+ UCHAR uchTi; // inactivity timer
+ UCHAR uchMaxOut; // max tramists without ack
+ UCHAR uchMaxIn; // max receives without ack
+ UCHAR uchMaxOutIncr; // dynamic window increment value
+ UCHAR uchMaxRetryCnt; // N2 value (retries)
+ UCHAR uchRemoteSap; // remote SAP of the link
+ USHORT usMaxI_Field; // max I field length
+ UCHAR uchAccessPriority; // token ring access priority
+ PVOID pRemoteNodeAddress; // pointer to the destination address
+} LLC_DLC_OPEN_STATION_PARMS, *PLLC_DLC_OPEN_STATION_PARMS;
+
+#define LLC_INCREASE_LINK_STATIONS 0
+#define LLC_DECREASE_LINK_STATIONS 0x80
+
+typedef struct {
+ USHORT usStationId; // ID of affected SAP
+ UCHAR uchOption; // increase of decrease indicator
+ UCHAR uchStationCount;
+ UCHAR uchStationsAvailOnAdapter;
+ UCHAR uchStationsAvailOnSap;
+ UCHAR uchTotalStationsOnAdapter;
+ UCHAR uchTotalStationsOnSap;
+} LLC_DLC_REALLOCATE_PARMS, *PLLC_DLC_REALLOCATE_PARMS;
+
+typedef struct {
+ USHORT usStationId; // SAP station ID
+ USHORT cBufferThreshold; // SAP buffer pool Threshold number
+ PVOID AlertEvent; // alerting event
+} LLC_DLC_SET_THRESHOLD_PARMS, *PLLC_DLC_SET_THRESHOLD_PARMS;
+
+typedef struct {
+ PVOID TraceBuffer; // trace buffer
+ ULONG TraceBufferSize; // trace buffer size
+ ULONG TraceFlags; // various trace flags
+} LLC_TRACE_INITIALIZE_PARMS, *PLLC_TRACE_INITIALIZE_PARMS;
+
+#define LLC_DLC_RESET_STATISTICS 0x80
+#define LLC_DLC_READ_STATISTICS 0
+
+typedef struct {
+ ULONG cTransmittedFrames;
+ ULONG cReceivedFrames;
+ ULONG cDiscardedFrames;
+ ULONG cDataLost;
+ USHORT cBuffersAvailable;
+} DLC_SAP_LOG, *PDLC_SAP_LOG;
+
+typedef struct {
+ USHORT cI_FramesTransmitted;
+ USHORT cI_FramesReceived;
+ UCHAR cI_FrameReceiveErrors;
+ UCHAR cI_FrameTransmissionErrors;
+ USHORT cT1_ExpirationCount; // Note: not OUT data xfer mode
+ UCHAR uchLastCmdRespReceived;
+ UCHAR uchLastCmdRespTransmitted;
+ UCHAR uchPrimaryState;
+ UCHAR uchSecondaryState;
+ UCHAR uchSendStateVariable;
+ UCHAR uchReceiveStateVariable;
+ UCHAR uchLastNr; // last received NR
+ UCHAR cbLanHeader;
+ UCHAR auchLanHeader[32];
+} DLC_LINK_LOG, *PDLC_LINK_LOG;
+
+typedef union {
+ DLC_SAP_LOG Sap;
+ DLC_LINK_LOG Link;
+} LLC_DLC_LOG_BUFFER, *PLLC_DLC_LOG_BUFFER;
+
+typedef struct {
+ USHORT usStationId; // ID of a SAP or a link station
+ USHORT cbLogBufSize; //
+ PLLC_DLC_LOG_BUFFER pLogBuf; // offset to the log buffer
+ USHORT usActLogLength; // length of returned log
+ UCHAR uchOptions; // command options (bit7 resets log params)
+} LLC_DLC_STATISTICS_PARMS, *PLLC_DLC_STATISTICS_PARMS;
+
+typedef struct {
+ USHORT usBringUps; // Token Ring adapter bring up error code
+ UCHAR Reserved[30]; // everything else specific to DOS or OS/2
+} LLC_DIR_INITIALIZE_PARMS, *PLLC_DIR_INITIALIZE_PARMS;
+
+typedef struct {
+ USHORT usOpenErrorCode; // open adapter errors detected
+ USHORT usOpenOptions; // various options
+ UCHAR auchNodeAddress[6]; // adapters LAN address
+ UCHAR auchGroupAddress[4]; // multicast address added in the open
+ UCHAR auchFunctionalAddress[4]; // added token ring functional address
+ USHORT usReserved1;
+ USHORT usReserved2;
+ USHORT usMaxFrameSize; // maximum frame size defined in NDIS
+ USHORT usReserved3[4];
+ USHORT usBringUps; // Bring up errors, TR only
+ USHORT InitWarnings;
+ USHORT usReserved4[3];
+} LLC_ADAPTER_OPEN_PARMS, *PLLC_ADAPTER_OPEN_PARMS;
+
+typedef struct {
+ UCHAR uchDlcMaxSaps;
+ UCHAR uchDlcMaxStations;
+ UCHAR uchDlcMaxGroupSaps;
+ UCHAR uchDlcMaxGroupMembers;
+ UCHAR uchT1_TickOne; // Short timer interval (for 1 - 5)
+ UCHAR uchT2_TickOne;
+ UCHAR uchTi_TickOne;
+ UCHAR uchT1_TickTwo; // Long timer interval (for 6 - 10)
+ UCHAR uchT2_TickTwo;
+ UCHAR uchTi_TickTwo;
+} LLC_DLC_PARMS, *PLLC_DLC_PARMS;
+
+//
+// The ethernet mode selects the LAN header format of ethernet. SNA
+// applications should use the default parameter, that has been defined in the
+// registry. The applications using connectionless DLC services should select
+// the ethernet LLC LAN header format they are using (usually 802.3)
+//
+
+typedef enum {
+ LLC_ETHERNET_TYPE_DEFAULT, // use the parameter value set in registry
+ LLC_ETHERNET_TYPE_AUTO, // automatic header type selction for links
+ LLC_ETHERNET_TYPE_802_3, // use always 802.3 lan headers
+ LLC_ETHERNET_TYPE_DIX // use always LLC on DIX SNA type.
+} LLC_ETHERNET_TYPE, *PLLC_ETHERNET_TYPE;
+
+typedef struct {
+ PVOID hBufferPool;
+ PVOID pSecurityDescriptor;
+ LLC_ETHERNET_TYPE LlcEthernetType;
+} LLC_EXTENDED_ADAPTER_PARMS, *PLLC_EXTENDED_ADAPTER_PARMS;
+
+typedef struct {
+ PLLC_ADAPTER_OPEN_PARMS pAdapterParms; // ADAPTER_PARMS
+ PLLC_EXTENDED_ADAPTER_PARMS pExtendedParms; // DIRECT_PARMS
+ PLLC_DLC_PARMS pDlcParms; // DLC_PARMS
+ PVOID pReserved1; // NCB_PARMS
+} LLC_DIR_OPEN_ADAPTER_PARMS, *PLLC_DIR_OPEN_ADAPTER_PARMS;
+
+typedef struct {
+ UCHAR auchMulticastAddress[6]; // 48 bit multicast address
+} LLC_DIR_MULTICAST_ADDRESS, *PLLC_DIR_MULTICAST_ADDRESS;
+
+#define LLC_DIRECT_OPTIONS_ALL_MACS 0x1880
+
+typedef struct {
+ USHORT Reserved[4];
+ USHORT usOpenOptions;
+ USHORT usEthernetType;
+ ULONG ulProtocolTypeMask;
+ ULONG ulProtocolTypeMatch;
+ USHORT usProtocolTypeOffset;
+} LLC_DIR_OPEN_DIRECT_PARMS, *PLLC_DIR_OPEN_DIRECT_PARMS;
+
+typedef struct {
+ UCHAR cLineError;
+ UCHAR cInternalError;
+ UCHAR cBurstError;
+ UCHAR cAC_Error;
+ UCHAR cAbortDelimiter;
+ UCHAR uchReserved1;
+ UCHAR cLostFrame;
+ UCHAR cReceiveCongestion;
+ UCHAR cFrameCopiedError;
+ UCHAR cFrequencyError;
+ UCHAR cTokenError;
+ UCHAR uchReserved2;
+ UCHAR uchReserved3;
+ UCHAR uchReserved4;
+} LLC_ADAPTER_LOG_TR, *PLLC_ADAPTER_LOG_TR;
+
+typedef struct {
+ UCHAR cCRC_Error;
+ UCHAR uchReserved1;
+ UCHAR cAlignmentError;
+ UCHAR uchReserved2;
+ UCHAR cTransmitError;
+ UCHAR uchReserved3;
+ UCHAR cCollisionError;
+ UCHAR cReceiveCongestion;
+ UCHAR uchReserved[6];
+} LLC_ADAPTER_LOG_ETH, *PLLC_ADAPTER_LOG_ETH;
+
+typedef union {
+ LLC_ADAPTER_LOG_TR Tr;
+ LLC_ADAPTER_LOG_ETH Eth;
+} LLC_ADAPTER_LOG, *PLLC_ADAPTER_LOG;
+
+typedef struct {
+ ULONG cTransmittedFrames;
+ ULONG cReceivedFrames;
+ ULONG cDiscardedFrames;
+ ULONG cDataLost;
+ USHORT cBuffersAvailable;
+} LLC_DIRECT_LOG, *PLLC_DIRECT_LOG;
+
+typedef union {
+ LLC_ADAPTER_LOG Adapter;
+ LLC_DIRECT_LOG Dir;
+
+ struct {
+ LLC_ADAPTER_LOG Adapter;
+ LLC_DIRECT_LOG Dir;
+ } both;
+
+} LLC_DIR_READ_LOG_BUFFER, *PLLC_DIR_READ_LOG_BUFFER;
+
+#define LLC_DIR_READ_LOG_ADAPTER 0
+#define LLC_DIR_READ_LOG_DIRECT 1
+#define LLC_DIR_READ_LOG_BOTH 2
+
+typedef struct {
+ USHORT usTypeId; // 0=adapter, 1=direct, 2=both logs
+ USHORT cbLogBuffer; // size of log buffer
+ PLLC_DIR_READ_LOG_BUFFER pLogBuffer;// pointer to log buffer
+ USHORT cbActualLength; // returned size of log buffer
+} LLC_DIR_READ_LOG_PARMS, *PLLC_DIR_READ_LOG_PARMS;
+
+typedef struct {
+ ULONG ulAdapterCheckFlag;
+ ULONG ulNetworkStatusFlag;
+ ULONG ulPcErrorFlag;
+ ULONG ulSystemActionFlag;
+} LLC_DIR_SET_EFLAG_PARMS, *PLLC_DIR_SET_EFLAG_PARMS;
+
+#define LLC_ADAPTER_ETHERNET 0x0010
+#define LLC_ADAPTER_TOKEN_RING 0x0040
+
+typedef struct {
+ UCHAR auchPermanentAddress[6]; // permanent encoded address
+ UCHAR auchNodeAddress[6]; // adapter's network address
+ UCHAR auchGroupAddress[4]; // adapter's group address
+ UCHAR auchFunctAddr[4]; // adapter's functional address
+ UCHAR uchMaxSap; // maximum allowable SAP
+ UCHAR uchOpenSaps; // number of currently open saps
+ UCHAR uchMaxStations; // max number of stations (always 253)
+ UCHAR uchOpenStation; // number of open stations (only up to 253)
+ UCHAR uchAvailStations; // number of available stations (always 253)
+ UCHAR uchAdapterConfig; // adapter configuration flags
+ UCHAR auchReserved1[10]; // microcode level
+ ULONG ulReserved1;
+ ULONG ulReserved2;
+ ULONG ulMaxFrameLength; // maximum frame length (only in Windows/Nt)
+ USHORT usLastNetworkStatus;
+ USHORT usAdapterType; // THIS BYTE IS NOT USED IN DOS DLC !!!
+} LLC_DIR_STATUS_PARMS, *PLLC_DIR_STATUS_PARMS;
+
+
+#define LLC_OPTION_READ_STATION 0
+#define LLC_OPTION_READ_SAP 1
+#define LLC_OPTION_READ_ALL 2
+
+#define LLC_EVENT_SYSTEM_ACTION 0x0040
+#define LLC_EVENT_NETWORK_STATUS 0x0020
+#define LLC_EVENT_CRITICAL_EXCEPTION 0x0010
+#define LLC_EVENT_STATUS_CHANGE 0x0008
+#define LLC_EVENT_RECEIVE_DATA 0x0004
+#define LLC_EVENT_TRANSMIT_COMPLETION 0x0002
+#define LLC_EVENT_COMMAND_COMPLETION 0x0001
+#define LLC_READ_ALL_EVENTS 0x007F
+
+//
+// LLC_STATUS_CHANGE indications
+// The returned status value may be an inclusive-OR of several flags
+//
+
+#define LLC_INDICATE_LINK_LOST 0x8000
+#define LLC_INDICATE_DM_DISC_RECEIVED 0x4000
+#define LLC_INDICATE_FRMR_RECEIVED 0x2000
+#define LLC_INDICATE_FRMR_SENT 0x1000
+#define LLC_INDICATE_RESET 0x0800
+#define LLC_INDICATE_CONNECT_REQUEST 0x0400
+#define LLC_INDICATE_REMOTE_BUSY 0x0200
+#define LLC_INDICATE_REMOTE_READY 0x0100
+#define LLC_INDICATE_TI_TIMER_EXPIRED 0x0080
+#define LLC_INDICATE_DLC_COUNTER_OVERFLOW 0x0040
+#define LLC_INDICATE_ACCESS_PRTY_LOWERED 0x0020
+#define LLC_INDICATE_LOCAL_STATION_BUSY 0x0001
+
+typedef struct {
+ USHORT usStationId;
+ UCHAR uchOptionIndicator;
+ UCHAR uchEventSet;
+ UCHAR uchEvent;
+ UCHAR uchCriticalSubset;
+ ULONG ulNotificationFlag;
+
+ union {
+
+ struct {
+ USHORT usCcbCount;
+ PLLC_CCB pCcbCompletionList;
+ USHORT usBufferCount;
+ PLLC_BUFFER pFirstBuffer;
+ USHORT usReceivedFrameCount;
+ PLLC_BUFFER pReceivedFrame;
+ USHORT usEventErrorCode;
+ USHORT usEventErrorData[3];
+ } Event;
+
+ struct {
+ USHORT usStationId;
+ USHORT usDlcStatusCode;
+ UCHAR uchFrmrData[5];
+ UCHAR uchAccessPritority;
+ UCHAR uchRemoteNodeAddress[6];
+ UCHAR uchRemoteSap;
+ UCHAR uchReserved;
+ USHORT usUserStatusValue;
+ } Status;
+
+ } Type;
+
+} LLC_READ_PARMS, *PLLC_READ_PARMS;
+
+//
+// This data structure gives the best performance in Windows/Nt: The DLC driver
+// must copy the CCB and the parameter table. If the driver knows that the
+// parameter table is concatenated to the CCB, it can copy both structures at
+// once. NOTE: The pointer to the parameter table MUST still be present in the
+// CCB
+//
+
+typedef struct {
+ LLC_CCB Ccb;
+ LLC_READ_PARMS Parms;
+} LLC_READ_COMMAND, *PLLC_READ_COMMAND;
+
+//
+// New receive types for direct stations, these types are ignored if the direct
+// station was opened with a specific ethernet type
+//
+
+#define LLC_DIR_RCV_ALL_TR_FRAMES 0
+#define LLC_DIR_RCV_ALL_MAC_FRAMES 1
+#define LLC_DIR_RCV_ALL_8022_FRAMES 2
+#define LLC_DIR_RCV_ALL_FRAMES 4
+#define LLC_DIR_RCV_ALL_ETHERNET_TYPES 5
+
+#define LLC_CONTIGUOUS_MAC 0x80
+#define LLC_CONTIGUOUS_DATA 0x40
+#define LLC_NOT_CONTIGUOUS_DATA 0x00
+
+//
+// LLC_BREAK (0x20) is not supported by Windows/Nt
+//
+
+#define LLC_RCV_READ_INDIVIDUAL_FRAMES 0
+#define LLC_RCV_CHAIN_FRAMES_ON_LINK 1
+#define LLC_RCV_CHAIN_FRAMES_ON_SAP 2
+
+typedef struct {
+ USHORT usStationId; // SAP, link station or direct id
+ USHORT usUserLength; // length of user data in buffer header
+ ULONG ulReceiveFlag; // the received data handler
+ PLLC_BUFFER pFirstBuffer; // first buffer in the pool
+ UCHAR uchOptions; // defines how the frame is received
+ UCHAR auchReserved1[3];
+ UCHAR uchRcvReadOption; // defines if rcv frames are chained
+} LLC_RECEIVE_PARMS, *PLLC_RECEIVE_PARMS;
+
+#define LLC_CHAIN_XMIT_COMMANDS_ON_LINK 0
+#define LLC_COMPLETE_SINGLE_XMIT_FRAME 1
+#define LLC_CHAIN_XMIT_COMMANDS_ON_SAP 2
+
+typedef struct {
+ USHORT usStationId; // SAP, link station or direct id
+ UCHAR uchTransmitFs; // token-ring frame status
+ UCHAR uchRemoteSap; // remote destination SAP
+ PLLC_XMIT_BUFFER pXmitQueue1; // first link list of frame segments
+ PLLC_XMIT_BUFFER pXmitQueue2; // another segment list returuned to pool
+ USHORT cbBuffer1; // length of buffer 1
+ USHORT cbBuffer2; // length of buffer 2
+ PVOID pBuffer1; // yet another segment
+ PVOID pBuffer2; // this is the last segment of frame
+ UCHAR uchXmitReadOption; // defines completion event for READ
+} LLC_TRANSMIT_PARMS, *PLLC_TRANSMIT_PARMS;
+
+#define LLC_FIRST_DATA_SEGMENT 0x01
+#define LLC_NEXT_DATA_SEGMENT 0x02
+
+typedef struct {
+ UCHAR eSegmentType; // defines if first or next segment of frame
+ UCHAR boolFreeBuffer; // if set, this buffer is released to pool
+ USHORT cbBuffer; // length of this buffer
+ PVOID pBuffer;
+} LLC_TRANSMIT_DESCRIPTOR, *PLLC_TRANSMIT_DESCRIPTOR;
+
+//
+// The frames types returned in the first receive buffer or used with the
+// TRANSMIT_FRAMES command. A direct station may also send only ethernet
+// frames. The ethernet types are only for transmit. Types 0x0019 - 0x05DC
+// are reserved
+//
+
+enum _LLC_FRAME_TYPES { // Purpose:
+ LLC_DIRECT_TRANSMIT = 0x0000, // transmit
+ LLC_DIRECT_MAC = 0x0002, // receive
+ LLC_I_FRAME = 0x0004, // receive & transmit
+ LLC_UI_FRAME = 0x0006, // receive & transmit
+ LLC_XID_COMMAND_POLL = 0x0008, // receive & transmit
+ LLC_XID_COMMAND_NOT_POLL = 0x000A, // receive & transmit
+ LLC_XID_RESPONSE_FINAL = 0x000C, // receive & transmit
+ LLC_XID_RESPONSE_NOT_FINAL = 0x000E, // receive & transmit
+ LLC_TEST_RESPONSE_FINAL = 0x0010, // receive & transmit
+ LLC_TEST_RESPONSE_NOT_FINAL = 0x0012, // receive & transmit
+ LLC_DIRECT_8022 = 0x0014, // receive (direct station)
+ LLC_TEST_COMMAND_POLL = 0x0016, // transmit
+ LLC_DIRECT_ETHERNET_TYPE = 0x0018, // receive (direct station)
+ LLC_LAST_FRAME_TYPE = 0x001a, // reserved
+ LLC_FIRST_ETHERNET_TYPE = 0x05DD // transmit (>)
+};
+
+typedef struct {
+ LLC_CCB Ccb; // use this as transmit CCB
+ USHORT usStationId;
+ USHORT usFrameType; // DLC frame or ethernet type
+ UCHAR uchRemoteSap; // used with UI, TEST, XID frames
+ UCHAR uchXmitReadOption;
+ UCHAR Reserved2[2];
+ ULONG cXmitBufferCount;
+ LLC_TRANSMIT_DESCRIPTOR aXmitBuffer[1];
+} LLC_TRANSMIT2_COMMAND, *PLLC_TRANSMIT2_COMMAND;
+
+//
+// LLC_TRANSMIT2_VAR_PARMS - this macro allocates space for variable length
+// descriptor array, eg: LLC_TRANSMIT2_VAR_PARMS(8) TransmitParms;
+//
+
+#define LLC_TRANSMIT2_VAR_PARMS(a)\
+struct {\
+ LLC_CCB Ccb;\
+ USHORT usStationId;\
+ USHORT usFrameType;\
+ UCHAR uchRemoteSap;\
+ UCHAR uchXmitReadOption;\
+ UCHAR uchReserved2[2];\
+ ULONG cXmitBufferCount;\
+ LLC_TRANSMIT_DESCRIPTOR XmitBuffer[(a)];\
+}
+
+//
+// LLC_PARMS - All CCB parameter tables can be referred to using this union
+//
+
+union _LLC_PARMS {
+ LLC_BUFFER_FREE_PARMS BufferFree;
+ LLC_BUFFER_GET_PARMS BufferGet;
+ LLC_DLC_CONNECT_PARMS DlcConnectStation;
+ LLC_DLC_MODIFY_PARMS DlcModify;
+ LLC_DLC_OPEN_SAP_PARMS DlcOpenSap;
+ LLC_DLC_OPEN_STATION_PARMS DlcOpenStation;
+ LLC_DLC_REALLOCATE_PARMS DlcReallocate;
+ LLC_DLC_SET_THRESHOLD_PARMS DlcSetThreshold;
+ LLC_DLC_STATISTICS_PARMS DlcStatistics;
+ LLC_DIR_INITIALIZE_PARMS DirInitialize;
+ LLC_DIR_OPEN_ADAPTER_PARMS DirOpenAdapter;
+ LLC_DIR_OPEN_DIRECT_PARMS DirOpenDirect;
+ LLC_DIR_READ_LOG_PARMS DirReadLog;
+ LLC_DIR_SET_EFLAG_PARMS DirSetEventFlag;
+ LLC_DIR_STATUS_PARMS DirStatus;
+ LLC_READ_PARMS Read;
+ LLC_RECEIVE_PARMS Receive;
+ LLC_TRANSMIT_PARMS Transmit;
+ LLC_TRANSMIT2_COMMAND Transmit2;
+ LLC_TRACE_INITIALIZE_PARMS TraceInitialize;
+};
+
+//
+// LLC_STATUS - enumerates the return codes which appear in the CCB uchDlcStatus
+// field
+//
+
+typedef enum _LLC_STATUS {
+ LLC_STATUS_SUCCESS = 0x00,
+ LLC_STATUS_INVALID_COMMAND = 0x01,
+ LLC_STATUS_DUPLICATE_COMMAND = 0x02,
+ LLC_STATUS_ADAPTER_OPEN = 0x03,
+ LLC_STATUS_ADAPTER_CLOSED = 0x04,
+ LLC_STATUS_PARAMETER_MISSING = 0x05,
+ LLC_STATUS_INVALID_OPTION = 0x06,
+ LLC_STATUS_COMMAND_CANCELLED_FAILURE = 0x07,
+ LLC_STATUS_ACCESS_DENIED = 0x08, // not used in Windows/Nt
+ LLC_STATUS_ADAPTER_NOT_INITIALIZED = 0x09, // not used in Windows/Nt
+ LLC_STATUS_CANCELLED_BY_USER = 0x0A,
+ LLC_STATUS_COMMAND_CANCELLED_CLOSED = 0x0B, // not used in Windows/Nt
+ LLC_STATUS_SUCCESS_NOT_OPEN = 0x0C,
+ LLC_STATUS_TIMER_ERROR = 0x11,
+ LLC_STATUS_NO_MEMORY = 0x12,
+ LLC_STATUS_INVALID_LOG_ID = 0x13, // not used in Windows/Nt
+ LLC_STATUS_LOST_LOG_DATA = 0x15,
+ LLC_STATUS_BUFFER_SIZE_EXCEEDED = 0x16,
+ LLC_STATUS_INVALID_BUFFER_LENGTH = 0x18,
+ LLC_STATUS_INADEQUATE_BUFFERS = 0x19,
+ LLC_STATUS_USER_LENGTH_TOO_LARGE = 0x1A,
+ LLC_STATUS_INVALID_PARAMETER_TABLE = 0x1B,
+ LLC_STATUS_INVALID_POINTER_IN_CCB = 0x1C,
+ LLC_STATUS_INVALID_ADAPTER = 0x1D,
+ LLC_STATUS_LOST_DATA_NO_BUFFERS = 0x20,
+ LLC_STATUS_LOST_DATA_INADEQUATE_SPACE = 0x21,
+ LLC_STATUS_TRANSMIT_ERROR_FS = 0x22,
+ LLC_STATUS_TRANSMIT_ERROR = 0x23,
+ LLC_STATUS_UNAUTHORIZED_MAC = 0x24, // not used in Windows/Nt
+ LLC_STATUS_MAX_COMMANDS_EXCEEDED = 0x25, // not used in Windows/Nt
+ LLC_STATUS_LINK_NOT_TRANSMITTING = 0x27,
+ LLC_STATUS_INVALID_FRAME_LENGTH = 0x28,
+ LLC_STATUS_INADEQUATE_RECEIVE = 0x30, // not used in Windows/Nt
+ LLC_STATUS_INVALID_NODE_ADDRESS = 0x32,
+ LLC_STATUS_INVALID_RCV_BUFFER_LENGTH = 0x33,
+ LLC_STATUS_INVALID_XMIT_BUFFER_LENGTH = 0x34,
+ LLC_STATUS_INVALID_STATION_ID = 0x40,
+ LLC_STATUS_LINK_PROTOCOL_ERROR = 0x41,
+ LLC_STATUS_PARMETERS_EXCEEDED_MAX = 0x42,
+ LLC_STATUS_INVALID_SAP_VALUE = 0x43,
+ LLC_STATUS_INVALID_ROUTING_INFO = 0x44,
+ LLC_STATUS_RESOURCES_NOT_AVAILABLE = 0x46, // not used in Windows/Nt
+ LLC_STATUS_LINK_STATIONS_OPEN = 0x47,
+ LLC_STATUS_INCOMPATIBLE_COMMANDS = 0x4A,
+ LLC_STATUS_OUTSTANDING_COMMANDS = 0x4C, // not used in Windows/Nt
+ LLC_STATUS_CONNECT_FAILED = 0x4D,
+ LLC_STATUS_INVALID_REMOTE_ADDRESS = 0x4F,
+ LLC_STATUS_CCB_POINTER_FIELD = 0x50,
+ LLC_STATUS_INVALID_APPLICATION_ID = 0x52, // not used in Windows/Nt
+ LLC_STATUS_NO_SYSTEM_PROCESS = 0x56, // not used in Windows/Nt
+ LLC_STATUS_INADEQUATE_LINKS = 0x57,
+ LLC_STATUS_INVALID_PARAMETER_1 = 0x58,
+ LLC_STATUS_DIRECT_STATIONS_NOT_ASSIGNED = 0x5C,
+ LLC_STATUS_DEVICE_DRIVER_NOT_INSTALLED = 0x5d,
+ LLC_STATUS_ADAPTER_NOT_INSTALLED = 0x5e,
+ LLC_STATUS_CHAINED_DIFFERENT_ADAPTERS = 0x5f,
+ LLC_STATUS_INIT_COMMAND_STARTED = 0x60,
+ LLC_STATUS_TOO_MANY_USERS = 0x61, // not used in Windows/Nt
+ LLC_STATUS_CANCELLED_BY_SYSTEM_ACTION = 0x62,
+ LLC_STATUS_DIR_STATIONS_NOT_AVAILABLE = 0x63, // not used in Windows/Nt
+ LLC_STATUS_NO_GDT_SELECTORS = 0x65,
+ LLC_STATUS_MEMORY_LOCK_FAILED = 0x69,
+
+ //
+ // New NT DLC specific error codes begin from 0x80
+ // These error codes are for new Windows/Nt DLC apps.
+ //
+
+ LLC_STATUS_INVALID_BUFFER_ADDRESS = 0x80,
+ LLC_STATUS_BUFFER_ALREADY_RELEASED = 0x81,
+ LLC_STATUS_BIND_ERROR = 0xA0, // not used in Windows/Nt
+ LLC_STATUS_INVALID_VERSION = 0xA1,
+ LLC_STATUS_NT_ERROR_STATUS = 0xA2,
+ LLC_STATUS_PENDING = 0xFF
+} LLC_STATUS;
+
+#define LLC_STATUS_MAX_ERROR 0xFF
+
+//
+// ACSLAN_STATUS - status codes which are returned from AcsLan
+//
+
+typedef enum {
+ ACSLAN_STATUS_COMMAND_ACCEPTED = 0,
+ ACSLAN_STATUS_INVALID_CCB_POINTER = 1,
+ ACSLAN_STATUS_CCB_IN_ERROR = 2,
+ ACSLAN_STATUS_CHAINED_CCB_IN_ERROR = 3,
+ ACSLAN_STATUS_SYSTEM_ERROR = 4,
+ ACSLAN_STATUS_SYSTEM_STATUS = 5,
+ ACSLAN_STATUS_INVALID_COMMAND = 6
+} ACSLAN_STATUS;
+
+//
+// prototypes
+//
+
+ACSLAN_STATUS
+APIENTRY
+AcsLan(
+ IN OUT PLLC_CCB pCcb,
+ OUT PLLC_CCB* ppBadCcb
+ );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // _DLCAPI_