1 /**
2  * This file has no copyright assigned and is placed in the Public Domain.
3  * This file is part of the mingw-w64 runtime package.
4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5  */
6 #ifndef _DLCAPI_
7 #define _DLCAPI_
8 
9 #ifdef __cplusplus
10 extern "C" {
11 #endif
12 
13 #define LLC_DIR_INTERRUPT 0x00
14 #define LLC_DIR_OPEN_ADAPTER 0x03
15 #define LLC_DIR_CLOSE_ADAPTER 0x04
16 #define LLC_DIR_SET_MULTICAST_ADDRESS 0x05
17 #define LLC_DIR_SET_GROUP_ADDRESS 0x06
18 #define LLC_DIR_SET_FUNCTIONAL_ADDRESS 0x07
19 #define LLC_DIR_READ_LOG 0x08
20 #define LLC_TRANSMIT_FRAMES 0x09
21 #define LLC_TRANSMIT_DIR_FRAME 0x0A
22 #define LLC_TRANSMIT_I_FRAME 0x0B
23 #define LLC_TRANSMIT_UI_FRAME 0x0D
24 #define LLC_TRANSMIT_XID_CMD 0x0E
25 #define LLC_TRANSMIT_XID_RESP_FINAL 0x0F
26 #define LLC_TRANSMIT_XID_RESP_NOT_FINAL 0x10
27 #define LLC_TRANSMIT_TEST_CMD 0x11
28 #define LLC_DLC_RESET 0x14
29 #define LLC_DLC_OPEN_SAP 0x15
30 #define LLC_DLC_CLOSE_SAP 0x16
31 #define LLC_DLC_REALLOCATE_STATIONS 0x17
32 #define LLC_DLC_OPEN_STATION 0x19
33 #define LLC_DLC_CLOSE_STATION 0x1A
34 #define LLC_DLC_CONNECT_STATION 0x1B
35 #define LLC_DLC_MODIFY 0x1C
36 #define LLC_DLC_FLOW_CONTROL 0x1D
37 #define LLC_DLC_STATISTICS 0x1E
38 #define LLC_DIR_INITIALIZE 0x20
39 #define LLC_DIR_STATUS 0x21
40 #define LLC_DIR_TIMER_SET 0x22
41 #define LLC_DIR_TIMER_CANCEL 0x23
42 #define LLC_BUFFER_GET 0x26
43 #define LLC_BUFFER_FREE 0x27
44 #define LLC_RECEIVE 0x28
45 #define LLC_RECEIVE_CANCEL 0x29
46 #define LLC_RECEIVE_MODIFY 0x2A
47 #define LLC_DIR_TIMER_CANCEL_GROUP 0x2C
48 #define LLC_DIR_SET_EXCEPTION_FLAGS 0x2D
49 #define LLC_BUFFER_CREATE 0x30
50 #define LLC_READ 0x31
51 #define LLC_READ_CANCEL 0x32
52 #define LLC_DLC_SET_THRESHOLD 0x33
53 #define LLC_DIR_CLOSE_DIRECT 0x34
54 #define LLC_DIR_OPEN_DIRECT 0x35
55 #define LLC_MAX_DLC_COMMAND 0x37
56 
57   union _LLC_PARMS;
58   typedef union _LLC_PARMS LLC_PARMS,*PLLC_PARMS;
59 
60   typedef union {
61     PLLC_PARMS pParameterTable;
62     struct {
63       USHORT usStationId;
64       USHORT usParameter;
65     } dlc;
66     struct {
67       USHORT usParameter0;
68       USHORT usParameter1;
69     } dir;
70     UCHAR auchBuffer[4];
71     ULONG ulParameter;
72   } CCB_PARMS;
73 
74   typedef struct _LLC_CCB {
75     UCHAR uchAdapterNumber;
76     UCHAR uchDlcCommand;
77     UCHAR uchDlcStatus;
78     UCHAR uchReserved1;
79     struct _LLC_CCB *pNext;
80     ULONG ulCompletionFlag;
81     CCB_PARMS u;
82     HANDLE hCompletionEvent;
83     UCHAR uchReserved2;
84     UCHAR uchReadFlag;
85     USHORT usReserved3;
86   } LLC_CCB,*PLLC_CCB;
87 
88   union _LLC_BUFFER;
89   typedef union _LLC_BUFFER LLC_BUFFER,*PLLC_BUFFER;
90 
91   typedef struct {
92     PLLC_BUFFER pNextBuffer;
93     USHORT cbFrame;
94     USHORT cbBuffer;
95     USHORT offUserData;
96     USHORT cbUserData;
97   } LLC_NEXT_BUFFER;
98 
99   typedef struct {
100     PLLC_BUFFER pNextBuffer;
101     USHORT cbFrame;
102     USHORT cbBuffer;
103     USHORT offUserData;
104     USHORT cbUserData;
105     USHORT usStationId;
106     UCHAR uchOptions;
107     UCHAR uchMsgType;
108     USHORT cBuffersLeft;
109     UCHAR uchRcvFS;
110     UCHAR uchAdapterNumber;
111     PLLC_BUFFER pNextFrame;
112     UCHAR cbLanHeader;
113     UCHAR cbDlcHeader;
114     UCHAR auchLanHeader[32];
115     UCHAR auchDlcHeader[4];
116     USHORT usPadding;
117   } LLC_NOT_CONTIGUOUS_BUFFER;
118 
119   typedef struct {
120     PLLC_BUFFER pNextBuffer;
121     USHORT cbFrame;
122     USHORT cbBuffer;
123     USHORT offUserData;
124     USHORT cbUserData;
125     USHORT usStationId;
126     UCHAR uchOptions;
127     UCHAR uchMsgType;
128     USHORT cBuffersLeft;
129     UCHAR uchRcvFS;
130     UCHAR uchAdapterNumber;
131     PLLC_BUFFER pNextFrame;
132   } LLC_CONTIGUOUS_BUFFER;
133 
134   union _LLC_BUFFER {
135     PLLC_BUFFER pNext;
136     LLC_NEXT_BUFFER Next;
137     struct LlcNextBuffer {
138       LLC_NEXT_BUFFER Header;
139       UCHAR auchData[];
140     } Buffer;
141     LLC_NOT_CONTIGUOUS_BUFFER NotContiguous;
142     struct {
143       LLC_NOT_CONTIGUOUS_BUFFER Header;
144       UCHAR auchData[];
145     } NotCont;
146     LLC_CONTIGUOUS_BUFFER Contiguous;
147     struct {
148       LLC_CONTIGUOUS_BUFFER Header;
149       UCHAR auchData[];
150     } Cont;
151   };
152 
153   struct _LLC_XMIT_BUFFER;
154   typedef struct _LLC_XMIT_BUFFER LLC_XMIT_BUFFER,*PLLC_XMIT_BUFFER;
155 
156   struct _LLC_XMIT_BUFFER {
157     PLLC_XMIT_BUFFER pNext;
158     USHORT usReserved1;
159     USHORT cbBuffer;
160     USHORT usReserved2;
161     USHORT cbUserData;
162     UCHAR auchData[];
163   };
164 
165 #define LLC_XMIT_BUFFER_SIZE sizeof(LLC_XMIT_BUFFER)
166 
167   typedef struct {
168     HANDLE hBufferPool;
169     PVOID pBuffer;
170     ULONG cbBufferSize;
171     ULONG cbMinimumSizeThreshold;
172   } LLC_BUFFER_CREATE_PARMS,*PLLC_BUFFER_CREATE_PARMS;
173 
174   typedef struct {
175     USHORT usReserved1;
176     USHORT cBuffersLeft;
177     ULONG ulReserved;
178     PLLC_XMIT_BUFFER pFirstBuffer;
179   } LLC_BUFFER_FREE_PARMS,*PLLC_BUFFER_FREE_PARMS;
180 
181   typedef struct {
182     USHORT usReserved1;
183     USHORT cBuffersLeft;
184     USHORT cBuffersToGet;
185     USHORT cbBufferSize;
186     PLLC_XMIT_BUFFER pFirstBuffer;
187   } LLC_BUFFER_GET_PARMS,*PLLC_BUFFER_GET_PARMS;
188 
189   typedef struct {
190     USHORT usStationId;
191     USHORT usReserved;
192     PUCHAR pRoutingInfo;
193   } LLC_DLC_CONNECT_PARMS,*PLLC_DLC_CONNECT_PARMS;
194 
195 #define LLC_RESET_LOCAL_BUSY_USER 0x80
196 #define LLC_RESET_LOCAL_BUSY_BUFFER 0xC0
197 #define LLC_SET_LOCAL_BUSY_USER 0
198 
199   typedef struct {
200     USHORT usRes;
201     USHORT usStationId;
202     UCHAR uchT1;
203     UCHAR uchT2;
204     UCHAR uchTi;
205     UCHAR uchMaxOut;
206     UCHAR uchMaxIn;
207     UCHAR uchMaxOutIncr;
208     UCHAR uchMaxRetryCnt;
209     UCHAR uchReserved1;
210     USHORT usMaxInfoFieldLength;
211     UCHAR uchAccessPriority;
212     UCHAR auchReserved3[4];
213     UCHAR cGroupCount;
214     PUCHAR pGroupList;
215   } LLC_DLC_MODIFY_PARMS,*PLLC_DLC_MODIFY_PARMS;
216 
217 #define LLC_XID_HANDLING_IN_APPLICATION 0x08
218 #define LLC_XID_HANDLING_IN_DLC 0
219 #define LLC_INDIVIDUAL_SAP 0x04
220 #define LLC_GROUP_SAP 0x02
221 #define LLC_MEMBER_OF_GROUP_SAP 0x01
222 
223   typedef struct {
224     USHORT usStationId;
225     USHORT usUserStatValue;
226     UCHAR uchT1;
227     UCHAR uchT2;
228     UCHAR uchTi;
229     UCHAR uchMaxOut;
230     UCHAR uchMaxIn;
231     UCHAR uchMaxOutIncr;
232     UCHAR uchMaxRetryCnt;
233     UCHAR uchMaxMembers;
234     USHORT usMaxI_Field;
235     UCHAR uchSapValue;
236     UCHAR uchOptionsPriority;
237     UCHAR uchcStationCount;
238     UCHAR uchReserved2[2];
239     UCHAR cGroupCount;
240     PUCHAR pGroupList;
241     ULONG DlcStatusFlags;
242     UCHAR uchReserved3[8];
243     UCHAR cLinkStationsAvail;
244   } LLC_DLC_OPEN_SAP_PARMS,*PLLC_DLC_OPEN_SAP_PARMS;
245 
246   typedef struct {
247     USHORT usSapStationId;
248     USHORT usLinkStationId;
249     UCHAR uchT1;
250     UCHAR uchT2;
251     UCHAR uchTi;
252     UCHAR uchMaxOut;
253     UCHAR uchMaxIn;
254     UCHAR uchMaxOutIncr;
255     UCHAR uchMaxRetryCnt;
256     UCHAR uchRemoteSap;
257     USHORT usMaxI_Field;
258     UCHAR uchAccessPriority;
259     PVOID pRemoteNodeAddress;
260   } LLC_DLC_OPEN_STATION_PARMS,*PLLC_DLC_OPEN_STATION_PARMS;
261 
262 #define LLC_INCREASE_LINK_STATIONS 0
263 #define LLC_DECREASE_LINK_STATIONS 0x80
264 
265   typedef struct {
266     USHORT usStationId;
267     UCHAR uchOption;
268     UCHAR uchStationCount;
269     UCHAR uchStationsAvailOnAdapter;
270     UCHAR uchStationsAvailOnSap;
271     UCHAR uchTotalStationsOnAdapter;
272     UCHAR uchTotalStationsOnSap;
273   } LLC_DLC_REALLOCATE_PARMS,*PLLC_DLC_REALLOCATE_PARMS;
274 
275   typedef struct {
276     USHORT usStationId;
277     USHORT cBufferThreshold;
278     PVOID AlertEvent;
279   } LLC_DLC_SET_THRESHOLD_PARMS,*PLLC_DLC_SET_THRESHOLD_PARMS;
280 
281   typedef struct {
282     PVOID TraceBuffer;
283     ULONG TraceBufferSize;
284     ULONG TraceFlags;
285   } LLC_TRACE_INITIALIZE_PARMS,*PLLC_TRACE_INITIALIZE_PARMS;
286 
287 #define LLC_DLC_RESET_STATISTICS 0x80
288 #define LLC_DLC_READ_STATISTICS 0
289 
290   typedef struct {
291     ULONG cTransmittedFrames;
292     ULONG cReceivedFrames;
293     ULONG cDiscardedFrames;
294     ULONG cDataLost;
295     USHORT cBuffersAvailable;
296   } DLC_SAP_LOG,*PDLC_SAP_LOG;
297 
298   typedef struct {
299     USHORT cI_FramesTransmitted;
300     USHORT cI_FramesReceived;
301     UCHAR cI_FrameReceiveErrors;
302     UCHAR cI_FrameTransmissionErrors;
303     USHORT cT1_ExpirationCount;
304     UCHAR uchLastCmdRespReceived;
305     UCHAR uchLastCmdRespTransmitted;
306     UCHAR uchPrimaryState;
307     UCHAR uchSecondaryState;
308     UCHAR uchSendStateVariable;
309     UCHAR uchReceiveStateVariable;
310     UCHAR uchLastNr;
311     UCHAR cbLanHeader;
312     UCHAR auchLanHeader[32];
313   } DLC_LINK_LOG,*PDLC_LINK_LOG;
314 
315   typedef union {
316     DLC_SAP_LOG Sap;
317     DLC_LINK_LOG Link;
318   } LLC_DLC_LOG_BUFFER,*PLLC_DLC_LOG_BUFFER;
319 
320   typedef struct {
321     USHORT usStationId;
322     USHORT cbLogBufSize;
323     PLLC_DLC_LOG_BUFFER pLogBuf;
324     USHORT usActLogLength;
325     UCHAR uchOptions;
326   } LLC_DLC_STATISTICS_PARMS,*PLLC_DLC_STATISTICS_PARMS;
327 
328   typedef struct {
329     USHORT usBringUps;
330     UCHAR Reserved[30];
331   } LLC_DIR_INITIALIZE_PARMS,*PLLC_DIR_INITIALIZE_PARMS;
332 
333   typedef struct {
334     USHORT usOpenErrorCode;
335     USHORT usOpenOptions;
336     UCHAR auchNodeAddress[6];
337     UCHAR auchGroupAddress[4];
338     UCHAR auchFunctionalAddress[4];
339     USHORT usReserved1;
340     USHORT usReserved2;
341     USHORT usMaxFrameSize;
342     USHORT usReserved3[4];
343     USHORT usBringUps;
344     USHORT InitWarnings;
345     USHORT usReserved4[3];
346   } LLC_ADAPTER_OPEN_PARMS,*PLLC_ADAPTER_OPEN_PARMS;
347 
348   typedef struct {
349     UCHAR uchDlcMaxSaps;
350     UCHAR uchDlcMaxStations;
351     UCHAR uchDlcMaxGroupSaps;
352     UCHAR uchDlcMaxGroupMembers;
353     UCHAR uchT1_TickOne;
354     UCHAR uchT2_TickOne;
355     UCHAR uchTi_TickOne;
356     UCHAR uchT1_TickTwo;
357     UCHAR uchT2_TickTwo;
358     UCHAR uchTi_TickTwo;
359   } LLC_DLC_PARMS,*PLLC_DLC_PARMS;
360 
361   typedef enum {
362     LLC_ETHERNET_TYPE_DEFAULT,LLC_ETHERNET_TYPE_AUTO,LLC_ETHERNET_TYPE_802_3,LLC_ETHERNET_TYPE_DIX
363   } LLC_ETHERNET_TYPE,*PLLC_ETHERNET_TYPE;
364 
365   typedef struct {
366     PVOID hBufferPool;
367     PVOID pSecurityDescriptor;
368     LLC_ETHERNET_TYPE LlcEthernetType;
369   } LLC_EXTENDED_ADAPTER_PARMS,*PLLC_EXTENDED_ADAPTER_PARMS;
370 
371   typedef struct {
372     PLLC_ADAPTER_OPEN_PARMS pAdapterParms;
373     PLLC_EXTENDED_ADAPTER_PARMS pExtendedParms;
374     PLLC_DLC_PARMS pDlcParms;
375     PVOID pReserved1;
376   } LLC_DIR_OPEN_ADAPTER_PARMS,*PLLC_DIR_OPEN_ADAPTER_PARMS;
377 
378   typedef struct {
379     UCHAR auchMulticastAddress[6];
380   } LLC_DIR_MULTICAST_ADDRESS,*PLLC_DIR_MULTICAST_ADDRESS;
381 
382 #define LLC_DIRECT_OPTIONS_ALL_MACS 0x1880
383 
384   typedef struct {
385     USHORT Reserved[4];
386     USHORT usOpenOptions;
387     USHORT usEthernetType;
388     ULONG ulProtocolTypeMask;
389     ULONG ulProtocolTypeMatch;
390     USHORT usProtocolTypeOffset;
391   } LLC_DIR_OPEN_DIRECT_PARMS,*PLLC_DIR_OPEN_DIRECT_PARMS;
392 
393   typedef struct {
394     UCHAR cLineError;
395     UCHAR cInternalError;
396     UCHAR cBurstError;
397     UCHAR cAC_Error;
398     UCHAR cAbortDelimiter;
399     UCHAR uchReserved1;
400     UCHAR cLostFrame;
401     UCHAR cReceiveCongestion;
402     UCHAR cFrameCopiedError;
403     UCHAR cFrequencyError;
404     UCHAR cTokenError;
405     UCHAR uchReserved2;
406     UCHAR uchReserved3;
407     UCHAR uchReserved4;
408   } LLC_ADAPTER_LOG_TR,*PLLC_ADAPTER_LOG_TR;
409 
410   typedef struct {
411     UCHAR cCRC_Error;
412     UCHAR uchReserved1;
413     UCHAR cAlignmentError;
414     UCHAR uchReserved2;
415     UCHAR cTransmitError;
416     UCHAR uchReserved3;
417     UCHAR cCollisionError;
418     UCHAR cReceiveCongestion;
419     UCHAR uchReserved[6];
420   } LLC_ADAPTER_LOG_ETH,*PLLC_ADAPTER_LOG_ETH;
421 
422   typedef union {
423     LLC_ADAPTER_LOG_TR Tr;
424     LLC_ADAPTER_LOG_ETH Eth;
425   } LLC_ADAPTER_LOG,*PLLC_ADAPTER_LOG;
426 
427   typedef struct {
428     ULONG cTransmittedFrames;
429     ULONG cReceivedFrames;
430     ULONG cDiscardedFrames;
431     ULONG cDataLost;
432     USHORT cBuffersAvailable;
433   } LLC_DIRECT_LOG,*PLLC_DIRECT_LOG;
434 
435   typedef union {
436     LLC_ADAPTER_LOG Adapter;
437     LLC_DIRECT_LOG Dir;
438     struct {
439       LLC_ADAPTER_LOG Adapter;
440       LLC_DIRECT_LOG Dir;
441     } both;
442   } LLC_DIR_READ_LOG_BUFFER,*PLLC_DIR_READ_LOG_BUFFER;
443 
444 #define LLC_DIR_READ_LOG_ADAPTER 0
445 #define LLC_DIR_READ_LOG_DIRECT 1
446 #define LLC_DIR_READ_LOG_BOTH 2
447 
448   typedef struct {
449     USHORT usTypeId;
450     USHORT cbLogBuffer;
451     PLLC_DIR_READ_LOG_BUFFER pLogBuffer;
452     USHORT cbActualLength;
453   } LLC_DIR_READ_LOG_PARMS,*PLLC_DIR_READ_LOG_PARMS;
454 
455   typedef struct {
456     ULONG ulAdapterCheckFlag;
457     ULONG ulNetworkStatusFlag;
458     ULONG ulPcErrorFlag;
459     ULONG ulSystemActionFlag;
460   } LLC_DIR_SET_EFLAG_PARMS,*PLLC_DIR_SET_EFLAG_PARMS;
461 
462 #define LLC_ADAPTER_ETHERNET 0x0010
463 #define LLC_ADAPTER_TOKEN_RING 0x0040
464 
465   typedef struct {
466     UCHAR auchPermanentAddress[6];
467     UCHAR auchNodeAddress[6];
468     UCHAR auchGroupAddress[4];
469     UCHAR auchFunctAddr[4];
470     UCHAR uchMaxSap;
471     UCHAR uchOpenSaps;
472     UCHAR uchMaxStations;
473     UCHAR uchOpenStation;
474     UCHAR uchAvailStations;
475     UCHAR uchAdapterConfig;
476     UCHAR auchReserved1[10];
477     ULONG ulReserved1;
478     ULONG ulReserved2;
479     ULONG ulMaxFrameLength;
480     USHORT usLastNetworkStatus;
481     USHORT usAdapterType;
482   } LLC_DIR_STATUS_PARMS,*PLLC_DIR_STATUS_PARMS;
483 
484 #define LLC_OPTION_READ_STATION 0
485 #define LLC_OPTION_READ_SAP 1
486 #define LLC_OPTION_READ_ALL 2
487 
488 #define LLC_EVENT_SYSTEM_ACTION 0x0040
489 #define LLC_EVENT_NETWORK_STATUS 0x0020
490 #define LLC_EVENT_CRITICAL_EXCEPTION 0x0010
491 #define LLC_EVENT_STATUS_CHANGE 0x0008
492 #define LLC_EVENT_RECEIVE_DATA 0x0004
493 #define LLC_EVENT_TRANSMIT_COMPLETION 0x0002
494 #define LLC_EVENT_COMMAND_COMPLETION 0x0001
495 #define LLC_READ_ALL_EVENTS 0x007F
496 
497 #define LLC_INDICATE_LINK_LOST 0x8000
498 #define LLC_INDICATE_DM_DISC_RECEIVED 0x4000
499 #define LLC_INDICATE_FRMR_RECEIVED 0x2000
500 #define LLC_INDICATE_FRMR_SENT 0x1000
501 #define LLC_INDICATE_RESET 0x0800
502 #define LLC_INDICATE_CONNECT_REQUEST 0x0400
503 #define LLC_INDICATE_REMOTE_BUSY 0x0200
504 #define LLC_INDICATE_REMOTE_READY 0x0100
505 #define LLC_INDICATE_TI_TIMER_EXPIRED 0x0080
506 #define LLC_INDICATE_DLC_COUNTER_OVERFLOW 0x0040
507 #define LLC_INDICATE_ACCESS_PRTY_LOWERED 0x0020
508 #define LLC_INDICATE_LOCAL_STATION_BUSY 0x0001
509 
510   typedef struct {
511     USHORT usStationId;
512     UCHAR uchOptionIndicator;
513     UCHAR uchEventSet;
514     UCHAR uchEvent;
515     UCHAR uchCriticalSubset;
516     ULONG ulNotificationFlag;
517     union {
518       struct {
519 	USHORT usCcbCount;
520 	PLLC_CCB pCcbCompletionList;
521 	USHORT usBufferCount;
522 	PLLC_BUFFER pFirstBuffer;
523 	USHORT usReceivedFrameCount;
524 	PLLC_BUFFER pReceivedFrame;
525 	USHORT usEventErrorCode;
526 	USHORT usEventErrorData[3];
527       } Event;
528       struct {
529 	USHORT usStationId;
530 	USHORT usDlcStatusCode;
531 	UCHAR uchFrmrData[5];
532 	UCHAR uchAccessPritority;
533 	UCHAR uchRemoteNodeAddress[6];
534 	UCHAR uchRemoteSap;
535 	UCHAR uchReserved;
536 	USHORT usUserStatusValue;
537       } Status;
538     } Type;
539   } LLC_READ_PARMS,*PLLC_READ_PARMS;
540 
541   typedef struct {
542     LLC_CCB Ccb;
543     LLC_READ_PARMS Parms;
544   } LLC_READ_COMMAND,*PLLC_READ_COMMAND;
545 
546 #define LLC_DIR_RCV_ALL_TR_FRAMES 0
547 #define LLC_DIR_RCV_ALL_MAC_FRAMES 1
548 #define LLC_DIR_RCV_ALL_8022_FRAMES 2
549 #define LLC_DIR_RCV_ALL_FRAMES 4
550 #define LLC_DIR_RCV_ALL_ETHERNET_TYPES 5
551 
552 #define LLC_CONTIGUOUS_MAC 0x80
553 #define LLC_CONTIGUOUS_DATA 0x40
554 #define LLC_NOT_CONTIGUOUS_DATA 0x00
555 
556 #define LLC_RCV_READ_INDIVIDUAL_FRAMES 0
557 #define LLC_RCV_CHAIN_FRAMES_ON_LINK 1
558 #define LLC_RCV_CHAIN_FRAMES_ON_SAP 2
559 
560   typedef struct {
561     USHORT usStationId;
562     USHORT usUserLength;
563     ULONG ulReceiveFlag;
564     PLLC_BUFFER pFirstBuffer;
565     UCHAR uchOptions;
566     UCHAR auchReserved1[3];
567     UCHAR uchRcvReadOption;
568   } LLC_RECEIVE_PARMS,*PLLC_RECEIVE_PARMS;
569 
570 #define LLC_CHAIN_XMIT_COMMANDS_ON_LINK 0
571 #define LLC_COMPLETE_SINGLE_XMIT_FRAME 1
572 #define LLC_CHAIN_XMIT_COMMANDS_ON_SAP 2
573 
574   typedef struct {
575     USHORT usStationId;
576     UCHAR uchTransmitFs;
577     UCHAR uchRemoteSap;
578     PLLC_XMIT_BUFFER pXmitQueue1;
579     PLLC_XMIT_BUFFER pXmitQueue2;
580     USHORT cbBuffer1;
581     USHORT cbBuffer2;
582     PVOID pBuffer1;
583     PVOID pBuffer2;
584     UCHAR uchXmitReadOption;
585   } LLC_TRANSMIT_PARMS,*PLLC_TRANSMIT_PARMS;
586 
587 #define LLC_FIRST_DATA_SEGMENT 0x01
588 #define LLC_NEXT_DATA_SEGMENT 0x02
589 
590   typedef struct {
591     UCHAR eSegmentType;
592     UCHAR boolFreeBuffer;
593     USHORT cbBuffer;
594     PVOID pBuffer;
595   } LLC_TRANSMIT_DESCRIPTOR,*PLLC_TRANSMIT_DESCRIPTOR;
596 
597   enum _LLC_FRAME_TYPES {
598     LLC_DIRECT_TRANSMIT = 0x0000,LLC_DIRECT_MAC = 0x0002,LLC_I_FRAME = 0x0004,LLC_UI_FRAME = 0x0006,LLC_XID_COMMAND_POLL = 0x0008,
599     LLC_XID_COMMAND_NOT_POLL = 0x000A,LLC_XID_RESPONSE_FINAL = 0x000C,LLC_XID_RESPONSE_NOT_FINAL = 0x000E,LLC_TEST_RESPONSE_FINAL = 0x0010,
600     LLC_TEST_RESPONSE_NOT_FINAL = 0x0012,LLC_DIRECT_8022 = 0x0014,LLC_TEST_COMMAND_POLL = 0x0016,LLC_DIRECT_ETHERNET_TYPE = 0x0018,
601     LLC_LAST_FRAME_TYPE = 0x001a,LLC_FIRST_ETHERNET_TYPE = 0x05DD
602   };
603 
604   typedef struct {
605     LLC_CCB Ccb;
606     USHORT usStationId;
607     USHORT usFrameType;
608     UCHAR uchRemoteSap;
609     UCHAR uchXmitReadOption;
610     UCHAR Reserved2[2];
611     ULONG cXmitBufferCount;
612     LLC_TRANSMIT_DESCRIPTOR aXmitBuffer[1];
613   } LLC_TRANSMIT2_COMMAND,*PLLC_TRANSMIT2_COMMAND;
614 
615 #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)];}
616 
617   union _LLC_PARMS {
618     LLC_BUFFER_FREE_PARMS BufferFree;
619     LLC_BUFFER_GET_PARMS BufferGet;
620     LLC_DLC_CONNECT_PARMS DlcConnectStation;
621     LLC_DLC_MODIFY_PARMS DlcModify;
622     LLC_DLC_OPEN_SAP_PARMS DlcOpenSap;
623     LLC_DLC_OPEN_STATION_PARMS DlcOpenStation;
624     LLC_DLC_REALLOCATE_PARMS DlcReallocate;
625     LLC_DLC_SET_THRESHOLD_PARMS DlcSetThreshold;
626     LLC_DLC_STATISTICS_PARMS DlcStatistics;
627     LLC_DIR_INITIALIZE_PARMS DirInitialize;
628     LLC_DIR_OPEN_ADAPTER_PARMS DirOpenAdapter;
629     LLC_DIR_OPEN_DIRECT_PARMS DirOpenDirect;
630     LLC_DIR_READ_LOG_PARMS DirReadLog;
631     LLC_DIR_SET_EFLAG_PARMS DirSetEventFlag;
632     LLC_DIR_STATUS_PARMS DirStatus;
633     LLC_READ_PARMS Read;
634     LLC_RECEIVE_PARMS Receive;
635     LLC_TRANSMIT_PARMS Transmit;
636     LLC_TRANSMIT2_COMMAND Transmit2;
637     LLC_TRACE_INITIALIZE_PARMS TraceInitialize;
638   };
639 
640   typedef enum _LLC_STATUS {
641     LLC_STATUS_SUCCESS = 0x00,LLC_STATUS_INVALID_COMMAND = 0x01,LLC_STATUS_DUPLICATE_COMMAND = 0x02,LLC_STATUS_ADAPTER_OPEN = 0x03,
642     LLC_STATUS_ADAPTER_CLOSED = 0x04,LLC_STATUS_PARAMETER_MISSING = 0x05,LLC_STATUS_INVALID_OPTION = 0x06,LLC_STATUS_COMMAND_CANCELLED_FAILURE = 0x07,
643     LLC_STATUS_ACCESS_DENIED = 0x08,LLC_STATUS_ADAPTER_NOT_INITIALIZED = 0x09,LLC_STATUS_CANCELLED_BY_USER = 0x0A,
644     LLC_STATUS_COMMAND_CANCELLED_CLOSED = 0x0B,LLC_STATUS_SUCCESS_NOT_OPEN = 0x0C,LLC_STATUS_TIMER_ERROR = 0x11,LLC_STATUS_NO_MEMORY = 0x12,
645     LLC_STATUS_INVALID_LOG_ID = 0x13,LLC_STATUS_LOST_LOG_DATA = 0x15,LLC_STATUS_BUFFER_SIZE_EXCEEDED = 0x16,LLC_STATUS_INVALID_BUFFER_LENGTH = 0x18,
646     LLC_STATUS_INADEQUATE_BUFFERS = 0x19,LLC_STATUS_USER_LENGTH_TOO_LARGE = 0x1A,LLC_STATUS_INVALID_PARAMETER_TABLE = 0x1B,
647     LLC_STATUS_INVALID_POINTER_IN_CCB = 0x1C,LLC_STATUS_INVALID_ADAPTER = 0x1D,LLC_STATUS_LOST_DATA_NO_BUFFERS = 0x20,
648     LLC_STATUS_LOST_DATA_INADEQUATE_SPACE = 0x21,LLC_STATUS_TRANSMIT_ERROR_FS = 0x22,LLC_STATUS_TRANSMIT_ERROR = 0x23,
649     LLC_STATUS_UNAUTHORIZED_MAC = 0x24,LLC_STATUS_MAX_COMMANDS_EXCEEDED = 0x25,LLC_STATUS_LINK_NOT_TRANSMITTING = 0x27,
650     LLC_STATUS_INVALID_FRAME_LENGTH = 0x28,LLC_STATUS_INADEQUATE_RECEIVE = 0x30,LLC_STATUS_INVALID_NODE_ADDRESS = 0x32,
651     LLC_STATUS_INVALID_RCV_BUFFER_LENGTH = 0x33,LLC_STATUS_INVALID_XMIT_BUFFER_LENGTH = 0x34,LLC_STATUS_INVALID_STATION_ID = 0x40,
652     LLC_STATUS_LINK_PROTOCOL_ERROR = 0x41,LLC_STATUS_PARMETERS_EXCEEDED_MAX = 0x42,LLC_STATUS_INVALID_SAP_VALUE = 0x43,
653     LLC_STATUS_INVALID_ROUTING_INFO = 0x44,LLC_STATUS_RESOURCES_NOT_AVAILABLE = 0x46,LLC_STATUS_LINK_STATIONS_OPEN = 0x47,
654     LLC_STATUS_INCOMPATIBLE_COMMANDS = 0x4A,LLC_STATUS_OUTSTANDING_COMMANDS = 0x4C,LLC_STATUS_CONNECT_FAILED = 0x4D,
655     LLC_STATUS_INVALID_REMOTE_ADDRESS = 0x4F,LLC_STATUS_CCB_POINTER_FIELD = 0x50,LLC_STATUS_INVALID_APPLICATION_ID = 0x52,
656     LLC_STATUS_NO_SYSTEM_PROCESS = 0x56,LLC_STATUS_INADEQUATE_LINKS = 0x57,LLC_STATUS_INVALID_PARAMETER_1 = 0x58,
657     LLC_STATUS_DIRECT_STATIONS_NOT_ASSIGNED = 0x5C,LLC_STATUS_DEVICE_DRIVER_NOT_INSTALLED = 0x5d,LLC_STATUS_ADAPTER_NOT_INSTALLED = 0x5e,
658     LLC_STATUS_CHAINED_DIFFERENT_ADAPTERS = 0x5f,LLC_STATUS_INIT_COMMAND_STARTED = 0x60,LLC_STATUS_TOO_MANY_USERS = 0x61,
659     LLC_STATUS_CANCELLED_BY_SYSTEM_ACTION = 0x62,LLC_STATUS_DIR_STATIONS_NOT_AVAILABLE = 0x63,LLC_STATUS_NO_GDT_SELECTORS = 0x65,
660     LLC_STATUS_MEMORY_LOCK_FAILED = 0x69,LLC_STATUS_INVALID_BUFFER_ADDRESS = 0x80,LLC_STATUS_BUFFER_ALREADY_RELEASED = 0x81,
661     LLC_STATUS_BIND_ERROR = 0xA0,LLC_STATUS_INVALID_VERSION = 0xA1,LLC_STATUS_NT_ERROR_STATUS = 0xA2,LLC_STATUS_PENDING = 0xFF
662   } LLC_STATUS;
663 
664 #define LLC_STATUS_MAX_ERROR 0xFF
665 
666   typedef enum {
667     ACSLAN_STATUS_COMMAND_ACCEPTED = 0,ACSLAN_STATUS_INVALID_CCB_POINTER = 1,ACSLAN_STATUS_CCB_IN_ERROR = 2,ACSLAN_STATUS_CHAINED_CCB_IN_ERROR = 3,
668     ACSLAN_STATUS_SYSTEM_ERROR = 4,ACSLAN_STATUS_SYSTEM_STATUS = 5,ACSLAN_STATUS_INVALID_COMMAND = 6
669   } ACSLAN_STATUS;
670 
671   ACSLAN_STATUS WINAPI AcsLan(PLLC_CCB pCcb,PLLC_CCB *ppBadCcb);
672   LLC_STATUS WINAPI GetAdapterNameFromNumber(UINT AdapterNumber,LPTSTR pNdisName);
673   LLC_STATUS WINAPI GetAdapterNumberFromName(LPTSTR pNdisName,UINT *AdapterNumber);
674 
675 #ifdef __cplusplus
676 }
677 #endif
678 #endif
679