|
|
1.1 root 1: /*++
2:
3: Copyright (c) 1991-1993 Microsoft Corporation
4:
5: Module Name:
6:
7: dlcapi.h
8:
9: Abstract:
10:
11: This module defines 32-bit Windows/NT DLC structures and manifests
12:
13: Revision History:
14:
15: --*/
16:
17: #ifndef _DLCAPI_
18: #define _DLCAPI_
19:
20: #ifdef __cplusplus
21: extern "C" {
22: #endif
23:
24: //
25: // DLC Command Codes
26: //
27:
28: #define LLC_DIR_INTERRUPT 0x00
29: #define LLC_DIR_OPEN_ADAPTER 0x03
30: #define LLC_DIR_CLOSE_ADAPTER 0x04
31: #define LLC_DIR_SET_MULTICAST_ADDRESS 0x05
32: #define LLC_DIR_SET_GROUP_ADDRESS 0x06
33: #define LLC_DIR_SET_FUNCTIONAL_ADDRESS 0x07
34: #define LLC_DIR_READ_LOG 0x08
35: #define LLC_TRANSMIT_FRAMES 0x09
36: #define LLC_TRANSMIT_DIR_FRAME 0x0A
37: #define LLC_TRANSMIT_I_FRAME 0x0B
38: #define LLC_TRANSMIT_UI_FRAME 0x0D
39: #define LLC_TRANSMIT_XID_CMD 0x0E
40: #define LLC_TRANSMIT_XID_RESP_FINAL 0x0F
41: #define LLC_TRANSMIT_XID_RESP_NOT_FINAL 0x10
42: #define LLC_TRANSMIT_TEST_CMD 0x11
43: #define LLC_DLC_RESET 0x14
44: #define LLC_DLC_OPEN_SAP 0x15
45: #define LLC_DLC_CLOSE_SAP 0x16
46: #define LLC_DLC_REALLOCATE_STATIONS 0x17
47: #define LLC_DLC_OPEN_STATION 0x19
48: #define LLC_DLC_CLOSE_STATION 0x1A
49: #define LLC_DLC_CONNECT_STATION 0x1B
50: #define LLC_DLC_MODIFY 0x1C
51: #define LLC_DLC_FLOW_CONTROL 0x1D
52: #define LLC_DLC_STATISTICS 0x1E
53: #define LLC_DIR_INITIALIZE 0x20
54: #define LLC_DIR_STATUS 0x21
55: #define LLC_DIR_TIMER_SET 0x22
56: #define LLC_DIR_TIMER_CANCEL 0x23
57: #define LLC_BUFFER_GET 0x26
58: #define LLC_BUFFER_FREE 0x27
59: #define LLC_RECEIVE 0x28
60: #define LLC_RECEIVE_CANCEL 0x29
61: #define LLC_RECEIVE_MODIFY 0x2A
62: #define LLC_DIR_TIMER_CANCEL_GROUP 0x2C
63: #define LLC_DIR_SET_EXCEPTION_FLAGS 0x2D
64: #define LLC_BUFFER_CREATE 0x30
65: #define LLC_READ 0x31
66: #define LLC_READ_CANCEL 0x32
67: #define LLC_DLC_SET_THRESHOLD 0x33
68: #define LLC_DIR_CLOSE_DIRECT 0x34
69: #define LLC_DIR_OPEN_DIRECT 0x35
70: #define LLC_MAX_DLC_COMMAND 0x37
71:
72: //
73: // forward definitions
74: //
75:
76: union _LLC_PARMS;
77: typedef union _LLC_PARMS LLC_PARMS, *PLLC_PARMS;
78:
79: //
80: // Parameters. Can be pointer to a parameter table (32-bit flat address),
81: // a single 32-bit ULONG, 2 16-bit USHORTs or 4 8-bit BYTEs
82: //
83:
84: typedef union {
85:
86: PLLC_PARMS pParameterTable; // pointer to the parameter table
87:
88: struct {
89: USHORT usStationId; // Station id
90: USHORT usParameter; // optional parameter
91: } dlc;
92:
93: struct {
94: USHORT usParameter0; // first optional parameter
95: USHORT usParameter1; // second optional parameter
96: } dir;
97:
98: UCHAR auchBuffer[4]; // group/functional address
99:
100: ULONG ulParameter;
101:
102: } CCB_PARMS;
103:
104: //
105: // LLC_CCB - the Command Control Block structure
106: //
107:
108: typedef struct _LLC_CCB {
109: UCHAR uchAdapterNumber; // Adapter 0 or 1
110: UCHAR uchDlcCommand; // DLC command
111: UCHAR uchDlcStatus; // DLC command completion code
112: UCHAR uchReserved1; // reserved for DLC DLL
113: struct _LLC_CCB* pNext; // CCB chain
114: ULONG ulCompletionFlag; // used in command completion
115: CCB_PARMS u; // parameters
116: HANDLE hCompletionEvent; // event for command completion
117: UCHAR uchReserved2; // reserved for DLC DLL
118: UCHAR uchReadFlag; // set when special READ CCB chained
119: USHORT usReserved3; // reserved for DLC DLL
120: } LLC_CCB, *PLLC_CCB;
121:
122: //
123: // transmit/receive buffers
124: //
125:
126: union _LLC_BUFFER;
127: typedef union _LLC_BUFFER LLC_BUFFER, *PLLC_BUFFER;
128:
129: typedef struct {
130: PLLC_BUFFER pNextBuffer; // next DLC buffer in frame
131: USHORT cbFrame; // length of the whole received frame
132: USHORT cbBuffer; // length of this segment
133: USHORT offUserData; // offset of data from descriptor header
134: USHORT cbUserData; // length of the data
135: } LLC_NEXT_BUFFER;
136:
137: typedef struct {
138: PLLC_BUFFER pNextBuffer; // next buffer of frame
139: USHORT cbFrame; // length of entire frame
140: USHORT cbBuffer; // length of this buffer
141: USHORT offUserData; // user data in this struct
142: USHORT cbUserData; // length of user data
143: USHORT usStationId; // ssnn station id
144: UCHAR uchOptions; // option byte from RECEIVE param tbl
145: UCHAR uchMsgType; // the message type
146: USHORT cBuffersLeft; // number of basic buffer units left
147: UCHAR uchRcvFS; // the reveived frame status
148: UCHAR uchAdapterNumber; // adapter number
149: PLLC_BUFFER pNextFrame; // pointer to next frame
150: UCHAR cbLanHeader; // length of the lan header
151: UCHAR cbDlcHeader; // length of the DLC header
152: UCHAR auchLanHeader[32]; // lan header of the received frame
153: UCHAR auchDlcHeader[4]; // dlc header of the received frame
154: USHORT usPadding; // data begins from offset 64 !!!
155: } LLC_NOT_CONTIGUOUS_BUFFER;
156:
157: typedef struct {
158: PLLC_BUFFER pNextBuffer; // next buffer of frame
159: USHORT cbFrame; // length of entire frame
160: USHORT cbBuffer; // length of this buffer
161: USHORT offUserData; // user data in this struct
162: USHORT cbUserData; // length of user data
163: USHORT usStationId; // ssnn station id
164: UCHAR uchOptions; // option byte from RECEIVE param tbl
165: UCHAR uchMsgType; // the message type
166: USHORT cBuffersLeft; // number of basic buffer units left
167: UCHAR uchRcvFS; // the reveived frame status
168: UCHAR uchAdapterNumber; // adapter number
169: PLLC_BUFFER pNextFrame; // pointer to next frame
170: } LLC_CONTIGUOUS_BUFFER;
171:
172: //
173: // Received frames are returned in these data structures
174: //
175:
176: union _LLC_BUFFER {
177:
178: PLLC_BUFFER pNext;
179:
180: LLC_NEXT_BUFFER Next;
181:
182: struct LlcNextBuffer {
183: LLC_NEXT_BUFFER Header;
184: UCHAR auchData[];
185: } Buffer;
186:
187: LLC_NOT_CONTIGUOUS_BUFFER NotContiguous;
188:
189: struct {
190: LLC_NOT_CONTIGUOUS_BUFFER Header;
191: UCHAR auchData[];
192: } NotCont;
193:
194: LLC_CONTIGUOUS_BUFFER Contiguous;
195:
196: struct {
197: LLC_CONTIGUOUS_BUFFER Header;
198: UCHAR auchData[];
199: } Cont;
200:
201: };
202:
203: //
204: // This structure is used by BUFFER.GET, BUFFER.FREE and TRANSMIT
205: //
206:
207: struct _LLC_XMIT_BUFFER;
208: typedef struct _LLC_XMIT_BUFFER LLC_XMIT_BUFFER, *PLLC_XMIT_BUFFER;
209:
210: struct _LLC_XMIT_BUFFER {
211: PLLC_XMIT_BUFFER pNext; // next buffer (or NULL)
212: USHORT usReserved1; //
213: USHORT cbBuffer; // length of transmitted data
214: USHORT usReserved2; //
215: USHORT cbUserData; // length of optional header
216: UCHAR auchData[]; // optional header and transmitted data
217: };
218:
219: #define LLC_XMIT_BUFFER_SIZE sizeof(LLC_XMIT_BUFFER)
220:
221: //
222: // CCB parameter tables
223: //
224:
225: typedef struct {
226: HANDLE hBufferPool; // handle of new buffer pool
227: PVOID pBuffer; // any buffer in memory
228: ULONG cbBufferSize; // buffer size in bytes
229: ULONG cbMinimumSizeThreshold; // minimum locked size
230: } LLC_BUFFER_CREATE_PARMS, *PLLC_BUFFER_CREATE_PARMS;
231:
232: typedef struct {
233: USHORT usReserved1; // Station id is not used
234: USHORT cBuffersLeft; // free 256 buffer segments
235: ULONG ulReserved;
236: PLLC_XMIT_BUFFER pFirstBuffer; // buffer chain
237: } LLC_BUFFER_FREE_PARMS, *PLLC_BUFFER_FREE_PARMS;
238:
239: typedef struct {
240: USHORT usReserved1; // Station id is not used
241: USHORT cBuffersLeft; // free 256 buffer segments
242:
243: //
244: // cBuffersToGet: number of buffers to get. If 0, the returned buffer list
245: // may consist of segment of different size
246: //
247:
248: USHORT cBuffersToGet;
249:
250: //
251: // cbBufferSize: size of the requested buffers. This will be rounded up to
252: // the next largest segment size: 256, 512, 1024, 2048 or 4096
253: //
254:
255: USHORT cbBufferSize;
256: PLLC_XMIT_BUFFER pFirstBuffer;
257: } LLC_BUFFER_GET_PARMS, *PLLC_BUFFER_GET_PARMS;
258:
259: //
260: // parameter table for DLC.CONNECT.STATION
261: //
262:
263: typedef struct {
264: USHORT usStationId; // SAP or direct station ID, defines the pool
265: USHORT usReserved;
266: PUCHAR pRoutingInfo; // offset to the routing info
267: } LLC_DLC_CONNECT_PARMS, *PLLC_DLC_CONNECT_PARMS;
268:
269: //
270: // DLC_FLOW_CONTROL Options:
271: //
272:
273: #define LLC_RESET_LOCAL_BUSY_USER 0x80
274: #define LLC_RESET_LOCAL_BUSY_BUFFER 0xC0
275: #define LLC_SET_LOCAL_BUSY_USER 0
276:
277: typedef struct {
278: USHORT usRes;
279: USHORT usStationId; // SAP or link station id
280: UCHAR uchT1; // response timer
281: UCHAR uchT2; // aknowledgment timer
282: UCHAR uchTi; // inactivity timer
283: UCHAR uchMaxOut; // max transmits without ack
284: UCHAR uchMaxIn; // max receives without ack
285: UCHAR uchMaxOutIncr; // dynamic window increment value
286: UCHAR uchMaxRetryCnt; // N2 value (retries)
287: UCHAR uchReserved1;
288: USHORT usMaxInfoFieldLength; // Only for link stations, NEW!!!
289: UCHAR uchAccessPriority; // token ring access priority
290: UCHAR auchReserved3[4];
291: UCHAR cGroupCount; // number of group SAPs of this SAP
292: PUCHAR pGroupList; // offset to the group list
293: } LLC_DLC_MODIFY_PARMS, *PLLC_DLC_MODIFY_PARMS;
294:
295: #define LLC_XID_HANDLING_IN_APPLICATION 0x08
296: #define LLC_XID_HANDLING_IN_DLC 0
297: #define LLC_INDIVIDUAL_SAP 0x04
298: #define LLC_GROUP_SAP 0x02
299: #define LLC_MEMBER_OF_GROUP_SAP 0x01
300:
301: typedef struct {
302: USHORT usStationId; // SAP or link station id
303: USHORT usUserStatValue; // reserved for user
304: UCHAR uchT1; // response timer
305: UCHAR uchT2; // aknowledgment timer
306: UCHAR uchTi; // inactivity timer
307: UCHAR uchMaxOut; // max tramists without ack
308: UCHAR uchMaxIn; // max receives without ack
309: UCHAR uchMaxOutIncr; // dynamic window increment value
310: UCHAR uchMaxRetryCnt; // N2 value (retries)
311: UCHAR uchMaxMembers; // maximum members for group SAP
312: USHORT usMaxI_Field; // maximum length of the Info field
313: UCHAR uchSapValue; // SAP value to be assigned
314: UCHAR uchOptionsPriority; // SAP options and access priority
315: UCHAR uchcStationCount; // maximum number of link stations in sap
316: UCHAR uchReserved2[2]; //
317: UCHAR cGroupCount; // number of group SAPs of this SAP
318: PUCHAR pGroupList; // offset to the group list
319: ULONG DlcStatusFlags; // User notify flag for DLC status changes
320: UCHAR uchReserved3[8]; // reserved
321: UCHAR cLinkStationsAvail; // total number of available link stations
322: } LLC_DLC_OPEN_SAP_PARMS, *PLLC_DLC_OPEN_SAP_PARMS;
323:
324: typedef struct {
325: USHORT usSapStationId; // SAP station id
326: USHORT usLinkStationId; // Link station id
327: UCHAR uchT1; // response timer
328: UCHAR uchT2; // aknowledgment timer
329: UCHAR uchTi; // inactivity timer
330: UCHAR uchMaxOut; // max tramists without ack
331: UCHAR uchMaxIn; // max receives without ack
332: UCHAR uchMaxOutIncr; // dynamic window increment value
333: UCHAR uchMaxRetryCnt; // N2 value (retries)
334: UCHAR uchRemoteSap; // remote SAP of the link
335: USHORT usMaxI_Field; // max I field length
336: UCHAR uchAccessPriority; // token ring access priority
337: PVOID pRemoteNodeAddress; // pointer to the destination address
338: } LLC_DLC_OPEN_STATION_PARMS, *PLLC_DLC_OPEN_STATION_PARMS;
339:
340: #define LLC_INCREASE_LINK_STATIONS 0
341: #define LLC_DECREASE_LINK_STATIONS 0x80
342:
343: typedef struct {
344: USHORT usStationId; // ID of affected SAP
345: UCHAR uchOption; // increase of decrease indicator
346: UCHAR uchStationCount;
347: UCHAR uchStationsAvailOnAdapter;
348: UCHAR uchStationsAvailOnSap;
349: UCHAR uchTotalStationsOnAdapter;
350: UCHAR uchTotalStationsOnSap;
351: } LLC_DLC_REALLOCATE_PARMS, *PLLC_DLC_REALLOCATE_PARMS;
352:
353: typedef struct {
354: USHORT usStationId; // SAP station ID
355: USHORT cBufferThreshold; // SAP buffer pool Threshold number
356: PVOID AlertEvent; // alerting event
357: } LLC_DLC_SET_THRESHOLD_PARMS, *PLLC_DLC_SET_THRESHOLD_PARMS;
358:
359: typedef struct {
360: PVOID TraceBuffer; // trace buffer
361: ULONG TraceBufferSize; // trace buffer size
362: ULONG TraceFlags; // various trace flags
363: } LLC_TRACE_INITIALIZE_PARMS, *PLLC_TRACE_INITIALIZE_PARMS;
364:
365: #define LLC_DLC_RESET_STATISTICS 0x80
366: #define LLC_DLC_READ_STATISTICS 0
367:
368: typedef struct {
369: ULONG cTransmittedFrames;
370: ULONG cReceivedFrames;
371: ULONG cDiscardedFrames;
372: ULONG cDataLost;
373: USHORT cBuffersAvailable;
374: } DLC_SAP_LOG, *PDLC_SAP_LOG;
375:
376: typedef struct {
377: USHORT cI_FramesTransmitted;
378: USHORT cI_FramesReceived;
379: UCHAR cI_FrameReceiveErrors;
380: UCHAR cI_FrameTransmissionErrors;
381: USHORT cT1_ExpirationCount; // Note: not OUT data xfer mode
382: UCHAR uchLastCmdRespReceived;
383: UCHAR uchLastCmdRespTransmitted;
384: UCHAR uchPrimaryState;
385: UCHAR uchSecondaryState;
386: UCHAR uchSendStateVariable;
387: UCHAR uchReceiveStateVariable;
388: UCHAR uchLastNr; // last received NR
389: UCHAR cbLanHeader;
390: UCHAR auchLanHeader[32];
391: } DLC_LINK_LOG, *PDLC_LINK_LOG;
392:
393: typedef union {
394: DLC_SAP_LOG Sap;
395: DLC_LINK_LOG Link;
396: } LLC_DLC_LOG_BUFFER, *PLLC_DLC_LOG_BUFFER;
397:
398: typedef struct {
399: USHORT usStationId; // ID of a SAP or a link station
400: USHORT cbLogBufSize; //
401: PLLC_DLC_LOG_BUFFER pLogBuf; // offset to the log buffer
402: USHORT usActLogLength; // length of returned log
403: UCHAR uchOptions; // command options (bit7 resets log params)
404: } LLC_DLC_STATISTICS_PARMS, *PLLC_DLC_STATISTICS_PARMS;
405:
406: typedef struct {
407: USHORT usBringUps; // Token Ring adapter bring up error code
408: UCHAR Reserved[30]; // everything else specific to DOS or OS/2
409: } LLC_DIR_INITIALIZE_PARMS, *PLLC_DIR_INITIALIZE_PARMS;
410:
411: typedef struct {
412: USHORT usOpenErrorCode; // open adapter errors detected
413: USHORT usOpenOptions; // various options
414: UCHAR auchNodeAddress[6]; // adapters LAN address
415: UCHAR auchGroupAddress[4]; // multicast address added in the open
416: UCHAR auchFunctionalAddress[4]; // added token ring functional address
417: USHORT usReserved1;
418: USHORT usReserved2;
419: USHORT usMaxFrameSize; // maximum frame size defined in NDIS
420: USHORT usReserved3[4];
421: USHORT usBringUps; // Bring up errors, TR only
422: USHORT InitWarnings;
423: USHORT usReserved4[3];
424: } LLC_ADAPTER_OPEN_PARMS, *PLLC_ADAPTER_OPEN_PARMS;
425:
426: typedef struct {
427: UCHAR uchDlcMaxSaps;
428: UCHAR uchDlcMaxStations;
429: UCHAR uchDlcMaxGroupSaps;
430: UCHAR uchDlcMaxGroupMembers;
431: UCHAR uchT1_TickOne; // Short timer interval (for 1 - 5)
432: UCHAR uchT2_TickOne;
433: UCHAR uchTi_TickOne;
434: UCHAR uchT1_TickTwo; // Long timer interval (for 6 - 10)
435: UCHAR uchT2_TickTwo;
436: UCHAR uchTi_TickTwo;
437: } LLC_DLC_PARMS, *PLLC_DLC_PARMS;
438:
439: //
440: // The ethernet mode selects the LAN header format of ethernet. SNA
441: // applications should use the default parameter, that has been defined in the
442: // registry. The applications using connectionless DLC services should select
443: // the ethernet LLC LAN header format they are using (usually 802.3)
444: //
445:
446: typedef enum {
447: LLC_ETHERNET_TYPE_DEFAULT, // use the parameter value set in registry
448: LLC_ETHERNET_TYPE_AUTO, // automatic header type selction for links
449: LLC_ETHERNET_TYPE_802_3, // use always 802.3 lan headers
450: LLC_ETHERNET_TYPE_DIX // use always LLC on DIX SNA type.
451: } LLC_ETHERNET_TYPE, *PLLC_ETHERNET_TYPE;
452:
453: typedef struct {
454: PVOID hBufferPool;
455: PVOID pSecurityDescriptor;
456: LLC_ETHERNET_TYPE LlcEthernetType;
457: } LLC_EXTENDED_ADAPTER_PARMS, *PLLC_EXTENDED_ADAPTER_PARMS;
458:
459: typedef struct {
460: PLLC_ADAPTER_OPEN_PARMS pAdapterParms; // ADAPTER_PARMS
461: PLLC_EXTENDED_ADAPTER_PARMS pExtendedParms; // DIRECT_PARMS
462: PLLC_DLC_PARMS pDlcParms; // DLC_PARMS
463: PVOID pReserved1; // NCB_PARMS
464: } LLC_DIR_OPEN_ADAPTER_PARMS, *PLLC_DIR_OPEN_ADAPTER_PARMS;
465:
466: typedef struct {
467: UCHAR auchMulticastAddress[6]; // 48 bit multicast address
468: } LLC_DIR_MULTICAST_ADDRESS, *PLLC_DIR_MULTICAST_ADDRESS;
469:
470: #define LLC_DIRECT_OPTIONS_ALL_MACS 0x1880
471:
472: typedef struct {
473: USHORT Reserved[4];
474: USHORT usOpenOptions;
475: USHORT usEthernetType;
476: ULONG ulProtocolTypeMask;
477: ULONG ulProtocolTypeMatch;
478: USHORT usProtocolTypeOffset;
479: } LLC_DIR_OPEN_DIRECT_PARMS, *PLLC_DIR_OPEN_DIRECT_PARMS;
480:
481: typedef struct {
482: UCHAR cLineError;
483: UCHAR cInternalError;
484: UCHAR cBurstError;
485: UCHAR cAC_Error;
486: UCHAR cAbortDelimiter;
487: UCHAR uchReserved1;
488: UCHAR cLostFrame;
489: UCHAR cReceiveCongestion;
490: UCHAR cFrameCopiedError;
491: UCHAR cFrequencyError;
492: UCHAR cTokenError;
493: UCHAR uchReserved2;
494: UCHAR uchReserved3;
495: UCHAR uchReserved4;
496: } LLC_ADAPTER_LOG_TR, *PLLC_ADAPTER_LOG_TR;
497:
498: typedef struct {
499: UCHAR cCRC_Error;
500: UCHAR uchReserved1;
501: UCHAR cAlignmentError;
502: UCHAR uchReserved2;
503: UCHAR cTransmitError;
504: UCHAR uchReserved3;
505: UCHAR cCollisionError;
506: UCHAR cReceiveCongestion;
507: UCHAR uchReserved[6];
508: } LLC_ADAPTER_LOG_ETH, *PLLC_ADAPTER_LOG_ETH;
509:
510: typedef union {
511: LLC_ADAPTER_LOG_TR Tr;
512: LLC_ADAPTER_LOG_ETH Eth;
513: } LLC_ADAPTER_LOG, *PLLC_ADAPTER_LOG;
514:
515: typedef struct {
516: ULONG cTransmittedFrames;
517: ULONG cReceivedFrames;
518: ULONG cDiscardedFrames;
519: ULONG cDataLost;
520: USHORT cBuffersAvailable;
521: } LLC_DIRECT_LOG, *PLLC_DIRECT_LOG;
522:
523: typedef union {
524: LLC_ADAPTER_LOG Adapter;
525: LLC_DIRECT_LOG Dir;
526:
527: struct {
528: LLC_ADAPTER_LOG Adapter;
529: LLC_DIRECT_LOG Dir;
530: } both;
531:
532: } LLC_DIR_READ_LOG_BUFFER, *PLLC_DIR_READ_LOG_BUFFER;
533:
534: #define LLC_DIR_READ_LOG_ADAPTER 0
535: #define LLC_DIR_READ_LOG_DIRECT 1
536: #define LLC_DIR_READ_LOG_BOTH 2
537:
538: typedef struct {
539: USHORT usTypeId; // 0=adapter, 1=direct, 2=both logs
540: USHORT cbLogBuffer; // size of log buffer
541: PLLC_DIR_READ_LOG_BUFFER pLogBuffer;// pointer to log buffer
542: USHORT cbActualLength; // returned size of log buffer
543: } LLC_DIR_READ_LOG_PARMS, *PLLC_DIR_READ_LOG_PARMS;
544:
545: typedef struct {
546: ULONG ulAdapterCheckFlag;
547: ULONG ulNetworkStatusFlag;
548: ULONG ulPcErrorFlag;
549: ULONG ulSystemActionFlag;
550: } LLC_DIR_SET_EFLAG_PARMS, *PLLC_DIR_SET_EFLAG_PARMS;
551:
552: #define LLC_ADAPTER_ETHERNET 0x0010
553: #define LLC_ADAPTER_TOKEN_RING 0x0040
554:
555: typedef struct {
556: UCHAR auchPermanentAddress[6]; // permanent encoded address
557: UCHAR auchNodeAddress[6]; // adapter's network address
558: UCHAR auchGroupAddress[4]; // adapter's group address
559: UCHAR auchFunctAddr[4]; // adapter's functional address
560: UCHAR uchMaxSap; // maximum allowable SAP
561: UCHAR uchOpenSaps; // number of currently open saps
562: UCHAR uchMaxStations; // max number of stations (always 253)
563: UCHAR uchOpenStation; // number of open stations (only up to 253)
564: UCHAR uchAvailStations; // number of available stations (always 253)
565: UCHAR uchAdapterConfig; // adapter configuration flags
566: UCHAR auchReserved1[10]; // microcode level
567: ULONG ulReserved1;
568: ULONG ulReserved2;
569: ULONG ulMaxFrameLength; // maximum frame length (only in Windows/Nt)
570: USHORT usLastNetworkStatus;
571: USHORT usAdapterType; // THIS BYTE IS NOT USED IN DOS DLC !!!
572: } LLC_DIR_STATUS_PARMS, *PLLC_DIR_STATUS_PARMS;
573:
574:
575: #define LLC_OPTION_READ_STATION 0
576: #define LLC_OPTION_READ_SAP 1
577: #define LLC_OPTION_READ_ALL 2
578:
579: #define LLC_EVENT_SYSTEM_ACTION 0x0040
580: #define LLC_EVENT_NETWORK_STATUS 0x0020
581: #define LLC_EVENT_CRITICAL_EXCEPTION 0x0010
582: #define LLC_EVENT_STATUS_CHANGE 0x0008
583: #define LLC_EVENT_RECEIVE_DATA 0x0004
584: #define LLC_EVENT_TRANSMIT_COMPLETION 0x0002
585: #define LLC_EVENT_COMMAND_COMPLETION 0x0001
586: #define LLC_READ_ALL_EVENTS 0x007F
587:
588: //
589: // LLC_STATUS_CHANGE indications
590: // The returned status value may be an inclusive-OR of several flags
591: //
592:
593: #define LLC_INDICATE_LINK_LOST 0x8000
594: #define LLC_INDICATE_DM_DISC_RECEIVED 0x4000
595: #define LLC_INDICATE_FRMR_RECEIVED 0x2000
596: #define LLC_INDICATE_FRMR_SENT 0x1000
597: #define LLC_INDICATE_RESET 0x0800
598: #define LLC_INDICATE_CONNECT_REQUEST 0x0400
599: #define LLC_INDICATE_REMOTE_BUSY 0x0200
600: #define LLC_INDICATE_REMOTE_READY 0x0100
601: #define LLC_INDICATE_TI_TIMER_EXPIRED 0x0080
602: #define LLC_INDICATE_DLC_COUNTER_OVERFLOW 0x0040
603: #define LLC_INDICATE_ACCESS_PRTY_LOWERED 0x0020
604: #define LLC_INDICATE_LOCAL_STATION_BUSY 0x0001
605:
606: typedef struct {
607: USHORT usStationId;
608: UCHAR uchOptionIndicator;
609: UCHAR uchEventSet;
610: UCHAR uchEvent;
611: UCHAR uchCriticalSubset;
612: ULONG ulNotificationFlag;
613:
614: union {
615:
616: struct {
617: USHORT usCcbCount;
618: PLLC_CCB pCcbCompletionList;
619: USHORT usBufferCount;
620: PLLC_BUFFER pFirstBuffer;
621: USHORT usReceivedFrameCount;
622: PLLC_BUFFER pReceivedFrame;
623: USHORT usEventErrorCode;
624: USHORT usEventErrorData[3];
625: } Event;
626:
627: struct {
628: USHORT usStationId;
629: USHORT usDlcStatusCode;
630: UCHAR uchFrmrData[5];
631: UCHAR uchAccessPritority;
632: UCHAR uchRemoteNodeAddress[6];
633: UCHAR uchRemoteSap;
634: UCHAR uchReserved;
635: USHORT usUserStatusValue;
636: } Status;
637:
638: } Type;
639:
640: } LLC_READ_PARMS, *PLLC_READ_PARMS;
641:
642: //
643: // This data structure gives the best performance in Windows/Nt: The DLC driver
644: // must copy the CCB and the parameter table. If the driver knows that the
645: // parameter table is concatenated to the CCB, it can copy both structures at
646: // once. NOTE: The pointer to the parameter table MUST still be present in the
647: // CCB
648: //
649:
650: typedef struct {
651: LLC_CCB Ccb;
652: LLC_READ_PARMS Parms;
653: } LLC_READ_COMMAND, *PLLC_READ_COMMAND;
654:
655: //
656: // New receive types for direct stations, these types are ignored if the direct
657: // station was opened with a specific ethernet type
658: //
659:
660: #define LLC_DIR_RCV_ALL_TR_FRAMES 0
661: #define LLC_DIR_RCV_ALL_MAC_FRAMES 1
662: #define LLC_DIR_RCV_ALL_8022_FRAMES 2
663: #define LLC_DIR_RCV_ALL_FRAMES 4
664: #define LLC_DIR_RCV_ALL_ETHERNET_TYPES 5
665:
666: #define LLC_CONTIGUOUS_MAC 0x80
667: #define LLC_CONTIGUOUS_DATA 0x40
668: #define LLC_NOT_CONTIGUOUS_DATA 0x00
669:
670: //
671: // LLC_BREAK (0x20) is not supported by Windows/Nt
672: //
673:
674: #define LLC_RCV_READ_INDIVIDUAL_FRAMES 0
675: #define LLC_RCV_CHAIN_FRAMES_ON_LINK 1
676: #define LLC_RCV_CHAIN_FRAMES_ON_SAP 2
677:
678: typedef struct {
679: USHORT usStationId; // SAP, link station or direct id
680: USHORT usUserLength; // length of user data in buffer header
681: ULONG ulReceiveFlag; // the received data handler
682: PLLC_BUFFER pFirstBuffer; // first buffer in the pool
683: UCHAR uchOptions; // defines how the frame is received
684: UCHAR auchReserved1[3];
685: UCHAR uchRcvReadOption; // defines if rcv frames are chained
686: } LLC_RECEIVE_PARMS, *PLLC_RECEIVE_PARMS;
687:
688: #define LLC_CHAIN_XMIT_COMMANDS_ON_LINK 0
689: #define LLC_COMPLETE_SINGLE_XMIT_FRAME 1
690: #define LLC_CHAIN_XMIT_COMMANDS_ON_SAP 2
691:
692: typedef struct {
693: USHORT usStationId; // SAP, link station or direct id
694: UCHAR uchTransmitFs; // token-ring frame status
695: UCHAR uchRemoteSap; // remote destination SAP
696: PLLC_XMIT_BUFFER pXmitQueue1; // first link list of frame segments
697: PLLC_XMIT_BUFFER pXmitQueue2; // another segment list returuned to pool
698: USHORT cbBuffer1; // length of buffer 1
699: USHORT cbBuffer2; // length of buffer 2
700: PVOID pBuffer1; // yet another segment
701: PVOID pBuffer2; // this is the last segment of frame
702: UCHAR uchXmitReadOption; // defines completion event for READ
703: } LLC_TRANSMIT_PARMS, *PLLC_TRANSMIT_PARMS;
704:
705: #define LLC_FIRST_DATA_SEGMENT 0x01
706: #define LLC_NEXT_DATA_SEGMENT 0x02
707:
708: typedef struct {
709: UCHAR eSegmentType; // defines if first or next segment of frame
710: UCHAR boolFreeBuffer; // if set, this buffer is released to pool
711: USHORT cbBuffer; // length of this buffer
712: PVOID pBuffer;
713: } LLC_TRANSMIT_DESCRIPTOR, *PLLC_TRANSMIT_DESCRIPTOR;
714:
715: //
716: // The frames types returned in the first receive buffer or used with the
717: // TRANSMIT_FRAMES command. A direct station may also send only ethernet
718: // frames. The ethernet types are only for transmit. Types 0x0019 - 0x05DC
719: // are reserved
720: //
721:
722: enum _LLC_FRAME_TYPES { // Purpose:
723: LLC_DIRECT_TRANSMIT = 0x0000, // transmit
724: LLC_DIRECT_MAC = 0x0002, // receive
725: LLC_I_FRAME = 0x0004, // receive & transmit
726: LLC_UI_FRAME = 0x0006, // receive & transmit
727: LLC_XID_COMMAND_POLL = 0x0008, // receive & transmit
728: LLC_XID_COMMAND_NOT_POLL = 0x000A, // receive & transmit
729: LLC_XID_RESPONSE_FINAL = 0x000C, // receive & transmit
730: LLC_XID_RESPONSE_NOT_FINAL = 0x000E, // receive & transmit
731: LLC_TEST_RESPONSE_FINAL = 0x0010, // receive & transmit
732: LLC_TEST_RESPONSE_NOT_FINAL = 0x0012, // receive & transmit
733: LLC_DIRECT_8022 = 0x0014, // receive (direct station)
734: LLC_TEST_COMMAND_POLL = 0x0016, // transmit
735: LLC_DIRECT_ETHERNET_TYPE = 0x0018, // receive (direct station)
736: LLC_LAST_FRAME_TYPE = 0x001a, // reserved
737: LLC_FIRST_ETHERNET_TYPE = 0x05DD // transmit (>)
738: };
739:
740: typedef struct {
741: LLC_CCB Ccb; // use this as transmit CCB
742: USHORT usStationId;
743: USHORT usFrameType; // DLC frame or ethernet type
744: UCHAR uchRemoteSap; // used with UI, TEST, XID frames
745: UCHAR uchXmitReadOption;
746: UCHAR Reserved2[2];
747: ULONG cXmitBufferCount;
748: LLC_TRANSMIT_DESCRIPTOR aXmitBuffer[1];
749: } LLC_TRANSMIT2_COMMAND, *PLLC_TRANSMIT2_COMMAND;
750:
751: //
752: // LLC_TRANSMIT2_VAR_PARMS - this macro allocates space for variable length
753: // descriptor array, eg: LLC_TRANSMIT2_VAR_PARMS(8) TransmitParms;
754: //
755:
756: #define LLC_TRANSMIT2_VAR_PARMS(a)\
757: struct {\
758: LLC_CCB Ccb;\
759: USHORT usStationId;\
760: USHORT usFrameType;\
761: UCHAR uchRemoteSap;\
762: UCHAR uchXmitReadOption;\
763: UCHAR uchReserved2[2];\
764: ULONG cXmitBufferCount;\
765: LLC_TRANSMIT_DESCRIPTOR XmitBuffer[(a)];\
766: }
767:
768: //
769: // LLC_PARMS - All CCB parameter tables can be referred to using this union
770: //
771:
772: union _LLC_PARMS {
773: LLC_BUFFER_FREE_PARMS BufferFree;
774: LLC_BUFFER_GET_PARMS BufferGet;
775: LLC_DLC_CONNECT_PARMS DlcConnectStation;
776: LLC_DLC_MODIFY_PARMS DlcModify;
777: LLC_DLC_OPEN_SAP_PARMS DlcOpenSap;
778: LLC_DLC_OPEN_STATION_PARMS DlcOpenStation;
779: LLC_DLC_REALLOCATE_PARMS DlcReallocate;
780: LLC_DLC_SET_THRESHOLD_PARMS DlcSetThreshold;
781: LLC_DLC_STATISTICS_PARMS DlcStatistics;
782: LLC_DIR_INITIALIZE_PARMS DirInitialize;
783: LLC_DIR_OPEN_ADAPTER_PARMS DirOpenAdapter;
784: LLC_DIR_OPEN_DIRECT_PARMS DirOpenDirect;
785: LLC_DIR_READ_LOG_PARMS DirReadLog;
786: LLC_DIR_SET_EFLAG_PARMS DirSetEventFlag;
787: LLC_DIR_STATUS_PARMS DirStatus;
788: LLC_READ_PARMS Read;
789: LLC_RECEIVE_PARMS Receive;
790: LLC_TRANSMIT_PARMS Transmit;
791: LLC_TRANSMIT2_COMMAND Transmit2;
792: LLC_TRACE_INITIALIZE_PARMS TraceInitialize;
793: };
794:
795: //
796: // LLC_STATUS - enumerates the return codes which appear in the CCB uchDlcStatus
797: // field
798: //
799:
800: typedef enum _LLC_STATUS {
801: LLC_STATUS_SUCCESS = 0x00,
802: LLC_STATUS_INVALID_COMMAND = 0x01,
803: LLC_STATUS_DUPLICATE_COMMAND = 0x02,
804: LLC_STATUS_ADAPTER_OPEN = 0x03,
805: LLC_STATUS_ADAPTER_CLOSED = 0x04,
806: LLC_STATUS_PARAMETER_MISSING = 0x05,
807: LLC_STATUS_INVALID_OPTION = 0x06,
808: LLC_STATUS_COMMAND_CANCELLED_FAILURE = 0x07,
809: LLC_STATUS_ACCESS_DENIED = 0x08, // not used in Windows/Nt
810: LLC_STATUS_ADAPTER_NOT_INITIALIZED = 0x09, // not used in Windows/Nt
811: LLC_STATUS_CANCELLED_BY_USER = 0x0A,
812: LLC_STATUS_COMMAND_CANCELLED_CLOSED = 0x0B, // not used in Windows/Nt
813: LLC_STATUS_SUCCESS_NOT_OPEN = 0x0C,
814: LLC_STATUS_TIMER_ERROR = 0x11,
815: LLC_STATUS_NO_MEMORY = 0x12,
816: LLC_STATUS_INVALID_LOG_ID = 0x13, // not used in Windows/Nt
817: LLC_STATUS_LOST_LOG_DATA = 0x15,
818: LLC_STATUS_BUFFER_SIZE_EXCEEDED = 0x16,
819: LLC_STATUS_INVALID_BUFFER_LENGTH = 0x18,
820: LLC_STATUS_INADEQUATE_BUFFERS = 0x19,
821: LLC_STATUS_USER_LENGTH_TOO_LARGE = 0x1A,
822: LLC_STATUS_INVALID_PARAMETER_TABLE = 0x1B,
823: LLC_STATUS_INVALID_POINTER_IN_CCB = 0x1C,
824: LLC_STATUS_INVALID_ADAPTER = 0x1D,
825: LLC_STATUS_LOST_DATA_NO_BUFFERS = 0x20,
826: LLC_STATUS_LOST_DATA_INADEQUATE_SPACE = 0x21,
827: LLC_STATUS_TRANSMIT_ERROR_FS = 0x22,
828: LLC_STATUS_TRANSMIT_ERROR = 0x23,
829: LLC_STATUS_UNAUTHORIZED_MAC = 0x24, // not used in Windows/Nt
830: LLC_STATUS_MAX_COMMANDS_EXCEEDED = 0x25, // not used in Windows/Nt
831: LLC_STATUS_LINK_NOT_TRANSMITTING = 0x27,
832: LLC_STATUS_INVALID_FRAME_LENGTH = 0x28,
833: LLC_STATUS_INADEQUATE_RECEIVE = 0x30, // not used in Windows/Nt
834: LLC_STATUS_INVALID_NODE_ADDRESS = 0x32,
835: LLC_STATUS_INVALID_RCV_BUFFER_LENGTH = 0x33,
836: LLC_STATUS_INVALID_XMIT_BUFFER_LENGTH = 0x34,
837: LLC_STATUS_INVALID_STATION_ID = 0x40,
838: LLC_STATUS_LINK_PROTOCOL_ERROR = 0x41,
839: LLC_STATUS_PARMETERS_EXCEEDED_MAX = 0x42,
840: LLC_STATUS_INVALID_SAP_VALUE = 0x43,
841: LLC_STATUS_INVALID_ROUTING_INFO = 0x44,
842: LLC_STATUS_RESOURCES_NOT_AVAILABLE = 0x46, // not used in Windows/Nt
843: LLC_STATUS_LINK_STATIONS_OPEN = 0x47,
844: LLC_STATUS_INCOMPATIBLE_COMMANDS = 0x4A,
845: LLC_STATUS_OUTSTANDING_COMMANDS = 0x4C, // not used in Windows/Nt
846: LLC_STATUS_CONNECT_FAILED = 0x4D,
847: LLC_STATUS_INVALID_REMOTE_ADDRESS = 0x4F,
848: LLC_STATUS_CCB_POINTER_FIELD = 0x50,
849: LLC_STATUS_INVALID_APPLICATION_ID = 0x52, // not used in Windows/Nt
850: LLC_STATUS_NO_SYSTEM_PROCESS = 0x56, // not used in Windows/Nt
851: LLC_STATUS_INADEQUATE_LINKS = 0x57,
852: LLC_STATUS_INVALID_PARAMETER_1 = 0x58,
853: LLC_STATUS_DIRECT_STATIONS_NOT_ASSIGNED = 0x5C,
854: LLC_STATUS_DEVICE_DRIVER_NOT_INSTALLED = 0x5d,
855: LLC_STATUS_ADAPTER_NOT_INSTALLED = 0x5e,
856: LLC_STATUS_CHAINED_DIFFERENT_ADAPTERS = 0x5f,
857: LLC_STATUS_INIT_COMMAND_STARTED = 0x60,
858: LLC_STATUS_TOO_MANY_USERS = 0x61, // not used in Windows/Nt
859: LLC_STATUS_CANCELLED_BY_SYSTEM_ACTION = 0x62,
860: LLC_STATUS_DIR_STATIONS_NOT_AVAILABLE = 0x63, // not used in Windows/Nt
861: LLC_STATUS_NO_GDT_SELECTORS = 0x65,
862: LLC_STATUS_MEMORY_LOCK_FAILED = 0x69,
863:
864: //
865: // New NT DLC specific error codes begin from 0x80
866: // These error codes are for new Windows/Nt DLC apps.
867: //
868:
869: LLC_STATUS_INVALID_BUFFER_ADDRESS = 0x80,
870: LLC_STATUS_BUFFER_ALREADY_RELEASED = 0x81,
871: LLC_STATUS_BIND_ERROR = 0xA0, // not used in Windows/Nt
872: LLC_STATUS_INVALID_VERSION = 0xA1,
873: LLC_STATUS_NT_ERROR_STATUS = 0xA2,
874: LLC_STATUS_PENDING = 0xFF
875: } LLC_STATUS;
876:
877: #define LLC_STATUS_MAX_ERROR 0xFF
878:
879: //
880: // ACSLAN_STATUS - status codes which are returned from AcsLan
881: //
882:
883: typedef enum {
884: ACSLAN_STATUS_COMMAND_ACCEPTED = 0,
885: ACSLAN_STATUS_INVALID_CCB_POINTER = 1,
886: ACSLAN_STATUS_CCB_IN_ERROR = 2,
887: ACSLAN_STATUS_CHAINED_CCB_IN_ERROR = 3,
888: ACSLAN_STATUS_SYSTEM_ERROR = 4,
889: ACSLAN_STATUS_SYSTEM_STATUS = 5,
890: ACSLAN_STATUS_INVALID_COMMAND = 6
891: } ACSLAN_STATUS;
892:
893: //
894: // prototypes
895: //
896:
897: ACSLAN_STATUS
898: APIENTRY
899: AcsLan(
900: IN OUT PLLC_CCB pCcb,
901: OUT PLLC_CCB* ppBadCcb
902: );
903:
904: #ifdef __cplusplus
905: }
906: #endif
907:
908: #endif // _DLCAPI_
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.