/*++
Copyright (c) 1991 Microsoft Corporation
Module Name:
dldef.h
Abstract:
This module defines all internal constants in data link driver.
Author:
Antti Saarenheimo (o-anttis) 25-MAY-1991
Revision History:
--*/
#define DEBUG_VERSION 1
//
// Marks for FSM compiler
//
#define FSM_DATA
#define FSM_PREDICATE_CASES
#define FSM_ACTION_CASES
#define FSM_CONST
#define MAX_NDIS_PACKETS 5 // 5 for XID/TEST and 5 for others
#define LLC_OPEN_TIMEOUT 1200 // 60 seconds (enough for tr open?)
#define DEFAULT_TR_ACCESS 0x50
#define NON_MAC_FRAME 0x40
//
// 2nd source routing control bit
//
#define SRC_ROUTING_LF_MASK 0x70
#define MAX_TR_LAN_HEADER_SIZE 32
#define LLC_MAX_LAN_HEADER 32
#define MAX_TR_SRC_ROUTING_INFO 18
//
// the next status values are used internally by DLCAPI driver:
//
#define CONFIRM_CONNECT 0x0008
#define CONFIRM_DISCONNECT 0x0004
#define CONFIRM_CONNECT_FAILED 0x0002
//
// The following structures define I-frame, U-frame, and S-frame DLC headers.
//
#define LLC_SSAP_RESPONSE 0x0001 // if (ssap & LLC_SSAP_RESP),it's a response.
#define LLC_DSAP_GROUP 0x0001 // Dsap lowest bit set when group sap
#define LLC_SSAP_GLOBAL 0x00ff // the global SAP.
#define LLC_SSAP_NULL 0x0000 // the null SAP.
#define LLC_SSAP_MASK 0x00fe // mask to wipe out the response bit.
#define LLC_DSAP_MASK 0x00fe // mask to wipe out the group SAP bit.
#define LLC_RR 0x01 // command code for RR.
#define LLC_RNR 0x05 // command code for RNR.
#define LLC_REJ 0x09 // command code for REJ.
#define LLC_SABME 0x6f // command code for SABME.
#define LLC_DISC 0x43 // command code for DISC.
#define LLC_UA 0x63 // command code for UA.
#define LLC_DM 0x0f // command code for DM.
#define LLC_FRMR 0x87 // command code for FRMR.
#define LLC_UI 0x03 // command code for UI.
#define LLC_XID 0xaf // command code for XID.
#define LLC_TEST 0xe3 // command code for TEST.
#define IEEE_802_XID_ID 0x81 // IEEE 802.2 XID identifier
#define LLC_CLASS_II 3 // we support LLC Class II
#define LLC_S_U_TYPE_MASK 3
#define LLC_U_TYPE 3
#define LLC_U_TYPE_BIT 2
#define LLC_S_TYPE 1
#define LLC_NOT_I_FRAME 0x01
#define LLC_U_INDICATOR 0x03 // (cmd & LLC_U_IND) == LLC_U_IND --> U-frame.
#define LLC_U_POLL_FINAL 0x10 // (cmd & LLC_U_PF) -> poll/final set.
#define LLC_I_S_POLL_FINAL 1
//
// You may use 2048 or 1024 if you want to make link more aggressively to
// increment the transmit window when there has been a I-c1 retransmission
// after a T1 timeout.
//
#define LLC_MAX_T1_TO_I_RATIO 4096
//
// Link station flags
//
#define DLC_WAITING_RESPONSE_TO_POLL 0x01
#define DLC_FIRST_POLL 0x02
#define DLC_ACTIVE_REMOTE_CONNECT_REQUEST 0x04
#define DLC_SEND_DISABLED 0x10
#define DLC_FINAL_RESPONSE_PENDING_IN_NDIS 0x20
#define DLC_LOCAL_BUSY_BUFFER 0x40
#define DLC_LOCAL_BUSY_USER 0x80
//
// Test file for FSM compiler!!!!
//
#ifdef FSM_CONST
enum eLanLlcInput {
DISC0 = 0,
DISC1 = 1,
DM0 = 2,
DM1 = 3,
FRMR0 = 4,
FRMR1 = 5,
SABME0 = 6,
SABME1 = 7,
UA0 = 8,
UA1 = 9,
IS_I_r0 = 10,
IS_I_r1 = 11,
IS_I_c0 = 12,
IS_I_c1 = 13,
OS_I_r0 = 14,
OS_I_r1 = 15,
OS_I_c0 = 16,
OS_I_c1 = 17,
REJ_r0 = 18,
REJ_r1 = 19,
REJ_c0 = 20,
REJ_c1 = 21,
RNR_r0 = 22,
RNR_r1 = 23,
RNR_c0 = 24,
RNR_c1 = 25,
RR_r0 = 26,
RR_r1 = 27,
RR_c0 = 28,
RR_c1 = 29,
LPDU_INVALID_r0 = 30,
LPDU_INVALID_r1 = 31,
LPDU_INVALID_c0 = 32,
LPDU_INVALID_c1 = 33,
ACTIVATE_LS = 34,
DEACTIVATE_LS = 35,
ENTER_LCL_Busy = 36,
EXIT_LCL_Busy = 37,
SEND_I_POLL = 38,
SET_ABME = 39,
SET_ADM = 40,
Ti_Expired = 41,
T1_Expired = 42,
T2_Expired = 43
};
enum eLanLlcState {
LINK_CLOSED = 0,
DISCONNECTED = 1,
LINK_OPENING = 2,
DISCONNECTING = 3,
FRMR_SENT = 4,
LINK_OPENED = 5,
LOCAL_BUSY = 6,
REJECTION = 7,
CHECKPOINTING = 8,
CHKP_LOCAL_BUSY = 9,
CHKP_REJECT = 10,
RESETTING = 11,
REMOTE_BUSY = 12,
LOCAL_REMOTE_BUSY = 13,
REJECT_LOCAL_BUSY = 14,
REJECT_REMOTE_BUSY = 15,
CHKP_REJECT_LOCAL_BUSY = 16,
CHKP_CLEARING = 17,
CHKP_REJECT_CLEARING = 18,
REJECT_LOCAL_REMOTE_BUSY = 19,
FRMR_RECEIVED = 20
};
#endif
#define MAX_LLC_LINK_STATE 21 // KEEP THIS IN SYNC WITH PREV ENUM!!!!
#define DLC_DSAP_OFFSET 0
#define DLC_SSAP_OFFSET 1
#define DLC_COMMAND_OFFSET 2
#define DLC_XID_INFO_ID 3
#define DLC_XID_INFO_TYPE 4
#define DLC_XID_INFO_WIN_SIZE 5
#define MAX_XID_TEST_RESPONSES 20
enum _LLC_FRAME_XLATE_MODES {
LLC_SEND_UNSPECIFIED = -1,
LLC_SEND_802_5_TO_802_3,
LLC_SEND_802_5_TO_DIX,
LLC_SEND_802_5_TO_802_5,
LLC_SEND_802_5_TO_FDDI,
LLC_SEND_DIX_TO_DIX,
LLC_SEND_802_3_TO_802_3,
LLC_SEND_802_3_TO_DIX,
LLC_SEND_802_3_TO_802_5,
LLC_SEND_UNMODIFIED,
LLC_SEND_FDDI_TO_FDDI,
LLC_SEND_FDDI_TO_802_5,
LLC_SEND_FDDI_TO_802_3
};
#define DLC_TOKEN_RESPONSE 0
#define DLC_TOKEN_COMMAND 2
//*********************************************************************
// **** Objects in _DLC_CMD_TOKENs enumeration and in auchLlcCommands
// **** table bust MUST ABSOLUTELY BE IN THE SAME ORDER, !!!!!!!!
// **** THEY ARE USED TO COMPRESS ********
// **** THE SEND INITIALIZATION ********
//
enum _DLC_CMD_TOKENS {
DLC_REJ_TOKEN = 4,
DLC_RNR_TOKEN = 8,
DLC_RR_TOKEN = 12,
DLC_DISC_TOKEN = 16 | DLC_TOKEN_COMMAND,
DLC_DM_TOKEN = 20,
DLC_FRMR_TOKEN = 24,
DLC_SABME_TOKEN = 28 | DLC_TOKEN_COMMAND,
DLC_UA_TOKEN = 32
};
enum _LLC_PACKET_TYPES {
LLC_PACKET_8022 = 0,
LLC_PACKET_MAC,
LLC_PACKET_DIX,
LLC_PACKET_OTHER_DESTINATION,
LLC_PACKET_MAX
};
#define MAX_DIX_TABLE 13 // good odd number!
enum _LlcSendCompletionTypes {
LLC_XID_RESPONSE, // 802.2 XID response packet
LLC_U_COMMAND_RESPONSE, // link command response
LLC_MIN_MDL_PACKET, // all packets above this have MDL
LLC_DIX_DUPLICATE, // used to duplicate TEST and XID packets
LLC_TEST_RESPONSE, // Test response (buffer in non Paged Pool)
LLC_MAX_RESPONSE_PACKET,// all packets above this are indicated to user
LLC_TYPE_1_PACKET,
LLC_TYPE_2_PACKET,
//
// We use extra status bits to indicate, when I- packet has been both
// completed by NDIS and acknowledged the other side of link connection.
// An I packet can be queued to the completion queue by
// the second guy (either state machine or SendCompletion handler)
// only when the first guy has set completed its work.
// An I packet could be acknowledged by the other side before
// its completion is indicated by NDIS. Dlc Driver deallocates
// the packet immediately, when Llc driver completes the acknowledged
// packet => possible data corruption (if packet is reused before
// NDIS has completed it). This is probably not possible in a
// single processor NT- system, but very possible in multiprocessor
// NT or systems without a single level DPC queue (like OS/2 and DOS).
//
LLC_I_PACKET_COMPLETE = 0x10,
LLC_I_PACKET_UNACKNOWLEDGED = 0x20,
LLC_I_PACKET_PENDING_NDIS = 0x40,
LLC_I_PACKET = 0x70, // when we are sending it
LLC_I_PACKET_WAITING_NDIS = 0x80
};
#define LLC_MAX_MULTICAST_ADDRESS 32