summaryrefslogblamecommitdiffstats
path: root/private/ntos/dlc/sm2c/test.h
blob: 2794b4087783ef1cd58c13a185c867958ced859c (plain) (tree)




















































































































































































































































                                                                                                                                                        
/*++

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 INITIAL_LLC_PACKETS 5
#define MAX_LLC_HEADER_INFO 11
#define MAX_NDIS_PACKETS    5      // 5 for XID/TEST and 5 for others
#define LLC_OPEN_TIMEOUT    150     // 15 seconds

// 1st source routing control bit
#define SRC_ROUTING_LENGTH_MASK     0x1f

//#define SRC_ROUTING_BROADCAST_MASK  0xe0
//#define SRC_ROUTING_NON_BROADCAST   0x00
//#define AROUTEB_SEND_SROUTEB_RETURN 0x80
//#define SROUTEB_SEND_AROUTEB_RETURN 0xc0
//#define SROUTEB_SEND_NONB_RETURN    0xe0

#define DEFAULT_TR_ACCESS   0x50
#define NON_MAC_FRAME       0x40
// 2nd source routing control bit
#define SRC_ROUTING_LF_MASK         0x70
//#define ROUTING_INFO_INDICATOR      0x80
#define SRC_ROUTING_DIRECTION_BIT   0x80
#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

#define BROADCAST_ADDRESS_FLAG  0x8000

//
// 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_INDICATOR     1 // !(sndseq & LLC_I_INDICATOR) indicates I-frame.
#define LLC_I_S_POLL_FINAL  1
/*
#define LLC_I_PF        0x01    // (rcvseq & LLC_I_PF) means poll/final set.#define LLC_S_PF        0x01    // (rcvseq & LLC_S_PF) means poll/final set.
#define LLC_I_FRAME     0       // 
*/

//
//  The send state can be changed only if all queues are locked
//
typedef enum _SEND_ENGINE_STATES {
    SEND_ACTIVE = 0,            // send engine active
    ACK_WINDOW_FULL = 1,        // we are waiting for the ack 
    SEND_DISABLED = 2           // sending not allowed in the current SM state
} SEND_ENGINE_STATES;

//
// 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_BTU = 38,
    SEND_I_POLL = 39,
    SET_ABME = 40,
    SET_ADM = 41,
    Ti_Expired = 42,
    T1_Expired = 43,
    T2_Expired = 44
};
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_OFFESET        0
#define DLC_SSAP_OFFESET        1
#define DLC_COMMAND_OFFESET     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_802_3_TO_802_5,
    LLC_SEND_802_5_TO_802_5,
    LLC_SEND_802_3_TO_802_3,
    LLC_SEND_802_5_TO_802_3,
    LLC_SEND_802_3_TO_DIX,
    LLC_SEND_802_5_TO_DIX,
    LLC_SEND_UNMODIFIED
};

#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 = 0,
    DLC_RNR_TOKEN = 4,
    DLC_RR_TOKEN = 8,
    DLC_DISC_TOKEN = 12 + 2,
    DLC_DM_TOKEN = 16,
    DLC_FRMR_TOKEN = 20,
    DLC_SABME_TOKEN = 24 + 2,
    DLC_UA_TOKEN = 28
};

#define ACQUIRE_SPIN_LOCK( p ) KeAcquireSpinLock(&(p)->SpinLock, &(p)->OldIrql)
#define RELEASE_SPIN_LOCK( p ) KeReleaseSpinLock(&(p)->SpinLock, (p)->OldIrql)
#define ALLOCATE_SPIN_LOCK( p ) ExAllocateSpinLock(&(p)->SpinLock)
#define DEALLOCATE_SPIN_LOCK( p ) ExFreeSpinLock(&(p)->SpinLock)

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!