|
|
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.