! ********************************************************************************************************************************
!  Created 11-OCT-1991 20:41:51 by VAX SDL T3.2-8      Source: 10-OCT-1991 15:54:48 _$254$DUA99:[PHV_LAN.SRC]LANUDEF.SDL;1 
! ********************************************************************************************************************************
 
!*** MODULE LANU ***
! 
!  LANUDEF Version Identification
! 
literal LAN$C_LANUDEF_VER = 12;
!  This constant is used (after swapping the protocol type bytes) to validate
!  a protocol type.
literal LAN$C_PTY_MIN = 1501;
!  Protocol Types
literal NI$C_PTY_DUMP_LOAD = 352;       !  DNA Dump/Load (MOP)
literal NI$C_PTY_RMTCN = 608;           !  DNA Remote Console (MOP)
literal NI$C_PTY_ROUTE = 864;           !  DNA Routing
literal NI$C_PTY_LAT = 1120;            !  Local Area Transport (LAT)
literal NI$C_PTY_DIAG = 1376;           !  Diagnostics
literal NI$C_PTY_CUST = 1632;           !  Customer Use
literal NI$C_PTY_SCA = 1888;            !  System Communication Architecture (SCA)
literal NI$C_PTY_LOOPB = 144;           !  Loopback Assist protocol type
literal NI$C_PTY_TCPIP = 8;             !  TCP/IP
literal NI$C_PTY_ARP = 1544;            !  ARP
literal NI$C_PTY_BRIDGE = 14464;        !  BRIDGE
literal NI$C_PTY_ELN = 15232;           !  VAX ELN
literal NI$C_PTY_DNAME = 15488;         !  DNA Name Service
literal NI$C_PTY_ENCRY = 15744;         !  Encryption
literal NI$C_PTY_DTIME = 16000;         !  DNA Time Service
literal NI$C_PTY_LTM = 16256;           !  LTM
literal NI$C_PTY_BIOS = 16512;          !  BIOS
literal NI$C_PTY_LAST = 16768;          !  Local Area Storage (LAST)
!  DIGITAL multicast address assignments
literal NI$C_MCA_L_MOP = 16777387;      !  DNA Dump/Load Assistance (MOP)
literal NI$C_MCA_W_MOP = 0;             !  DNA Dump/Load Assistance (MOP)
literal NI$C_MCA_L_RMTCN = 33554603;    !  DNA Remote Console (MOP)
literal NI$C_MCA_W_RMTCN = 0;           !  DNA Remote Console (MOP)
literal NI$C_MCA_L_ROUTERS = 50331819;  !  DNA Routing Routers
literal NI$C_MCA_W_ROUTERS = 0;         !  DNA Routing Routers
literal NI$C_MCA_L_ENDNODE = 67109035;  !  DNA Routing End nodes
literal NI$C_MCA_W_ENDNODE = 0;         !  DNA Routing End nodes
literal NI$C_MCA_L_LAT = 196779;        !  Local Area Transport (LAT)
literal NI$C_MCA_W_LAT = 0;             !  Local Area Transport (LAT)
literal NI$C_MCA_L_CUST = 262315;       !  Customer Use
!   CONSTANT	MCA_W_CUST	EQUALS  %X0000-%XFFFF TAG C PREFIX NI$; /* Customer Use
literal NI$C_MCA_L_SCA = 17039531;      !  System Communication Architecture (SCA)
!   CONSTANT	MCA_W_SCA	EQUALS  %X0000-%XFFFF TAG C PREFIX NI$; /* System Communication Architecture (SCA)
!  Cross-company address assignments
literal NI$C_CCA_L_BROADCAST = -1;      !  Broadcast
literal NI$C_CCA_W_BROADCAST = 65535;   !  Broadcast
literal NI$C_CCA_L_LOOPBACKA = 207;     !  Loopback Assistance
literal NI$C_CCA_W_LOOPBACKA = 0;       !  Loopback Assistance
!  DNA SNAP SAP assignments
literal NI$C_NULL_SAP = 0;              !  The NULL SAP 
literal NI$C_LLC_MGT_FNC_SAP = 2;       !  LLC SUBLAYER MANAGEMENT FUNCTION SAP
literal NI$C_LLC_MGT_SAP = 3;           !  LLC SUBLAYER MANAGEMENT SAP
literal NI$C_SNAP_SAP = 170;            !  The SNAP SAP 
!  DNA DSAP assignments
literal NI$C_GLOBAL_DSAP = 255;         !  GLOBAL DSAP 
!  DNA GROUP SAP assignments
literal NI$C_MAX_NO_GSAP = 4;           !  Maximum number of group SAPs per user
!  LAN frame constants
literal NI$C_CRC = 4;                   !  Size of Ethernet CRC
literal NI$C_ADDR_SIZE = 6;             !  Maximum size of NI address
literal NI$C_LEN_SIZE = 2;              !  Size of the length field
!  CSMACD frame constants
literal NI$C_MAX_PKTSIZE = 1500;        !  Maximum of Ethernet Packet without padding
literal NI$C_MAX_PKTSIZE_PAD = 1498;    !  Maximum of Ethernet Packet with padding
literal NI$C_MAX_PKTSIZE_CLI = 1497;    !  Maximum of 802 Packet
literal NI$C_MAX_PKTSIZE_USR = 1496;    !  Maximum of 802 Packet
literal NI$C_MAX_PKTSIZE_802E = 1492;   !  Maximum of 802E Packet
literal NI$C_MAX_PKTSIZE_HWA = 1518;    !  Maximum hardware Packet including header and CRC
literal NI$C_MIN_PKTSIZE = 46;          !  Minimum of Ethernet Packet
! 
!  Frame/packet header sizes for CSMACD
! 
literal NI$C_HDRSIZE_ETH = 14;          !  Maximum of Ethernet Packet without padding
literal NI$C_HDRSIZE_PAD = 16;          !  Maximum of Ethernet Packet with padding
literal NI$C_HDRSIZE_CLI = 17;          !  Maximum of 802 Packet
literal NI$C_HDRSIZE_USR = 18;          !  Maximum of 802 Packet
literal NI$C_HDRSIZE_802E = 22;         !  Maximum of 802E Packet
!  LAN Item List definitions
literal DLL$K_DL_ENTITY = 1;            !  Create Input
literal DLL$K_CLIENT = 2;               !  Create Input
literal DLL$K_DL_TEMPLATE = 3;          !  Create Input
literal DLL$K_LAN_DEVICE = 4;           !  Create Input
literal DLL$K_PORT_ENTITY = 5;          !  Create Output
literal DLL$K_MINIMUM_BUFFER_SIZE = 6;  !  Enable Input
literal DLL$K_PREFERRED_BUFFER_SIZE = 7; !  Enable Input
literal DLL$K_PROTOCOLID = 8;           !  Enable Input
literal DLL$K_DECUSERDATA = 9;          !  Enable Input
literal DLL$K_PROFILE = 10;             !  Enable Output
literal DLL$K_ACTUAL_BUFFER_SIZE = 11;  !  Enable Output
! ++
! 
!  This structure represents a LAN module entity.  There will be one used to
!  represent CSMA/CD; even if there are multiple CSMA/CD stations.  There will
!  also be one used to represent FDDI.
! 
!  These are the common fields of the LAN module entity.
! --
literal LAN$K_FIXED_LENGTH = 76;        !  Length of LAN block
literal LAN$S_LANUDEF = 76;
!  This is version 1 of the LAN structure.  Use #1 (no symbol) for the
!  version field.
macro LAN$L_VERSION = 0,0,32,0 %;       !  Version of LAN database
macro LAN$L_RESERVED1 = 4,0,32,0 %;     !  Reserved
macro LAN$A_GET_DEVICE = 8,0,32,0 %;    !  Address of LAN$GET_DEVICE
macro LAN$L_RESERVED2 = 12,0,32,0 %;    !  Reserved
macro LAN$A_CREATE_PORT = 16,0,32,0 %;  !  Address of LAN$CREATE_PORT
macro LAN$A_DELETE_PORT = 20,0,32,0 %;  !  Address of LAN$DELETE_PORT
macro LAN$T_TQE = 24,0,0,1 %;
literal LAN$S_TQE = 52;
!  TQE for the one second timer
 
!*** MODULE LDC ***
! ++
! 
!  LAN Device Characteristics structure
! 
!  This data structure is returned on a call to LAN$GET_DEVICE.  It is
!  embedded in the LSB.
! 
! --
literal LDC$K_LENGTH = 24;              !  Length of LDC block
literal LDC$S_LDCDEF = 24;
macro LDC$A_NAME = 0,0,32,0 %;          !  Address of a counted string
!  containing the device name
macro LDC$W_TYPE = 4,0,16,0 %;          !  Type of device - same as
!  VCIB$W_DLL_TYPE
macro LDC$W_RCVSIZE = 6,0,16,0 %;       !  Number of entries in the receive
!  ring
macro LDC$L_RATE128 = 8,0,32,0 %;       !  Kilobits per second with 128 bytes
!  of user data (on transmit)
macro LDC$L_RATE256 = 12,0,32,0 %;      !  Kilobits per second with 256 bytes
!  of user data (on transmit)
macro LDC$B_DEVTYPE = 16,0,8,0 %;       !  VMS Device type (from the UCB)
macro LDC$B_MOPID = 17,0,8,0 %;         !  MOP ID for this device
macro LDC$L_MOPNAME = 20,0,32,0 %;      !  Counted string (always three
!  characters) for MOP name
!  Remember to make sure that this structure is an integral number of
!  quadwords.  That helps keep the LSB fields aligned.
 
!*** MODULE LIL ***
! ++
! 
!  LAN Item List definitions
! 
!  This data structure should look like a DECnet-VAX item list.  We don't use
!  the DECnet-VAX item list symbols because they are not available.
! 
! --
literal LIL$T_DATA = 12;                !  Start of the itemlist
literal LIL$T_ITEMVAL = 4;              !  Value for this item
literal LIL$S_LILDEF = 12;
macro LIL$R_LIL_UNION = 0,0,0,0 %;
literal LIL$S_LIL_UNION = 12;
!  This structure definition will describe the header of the itemlist.
macro LIL$R_HEADER_FIELDS = 0,0,0,0 %;
macro LIL$L_LISTLEN = 0,0,32,0 %;       !  Number of bytes in the list
macro LIL$A_LISTADR = 4,0,32,0 %;       !  Address of the list
macro LIL$W_SIZE = 8,0,16,0 %;          !  Size of structure
macro LIL$B_TYPE = 10,0,8,0 %;          !  Type = DYN$C_NET
macro LIL$B_SUBTYPE = 11,0,8,0 %;       !  Subtype = DYN$C_NET_ITEM
!  This structure definition will describe an item in the itemlist.  Note
!  that the ITEMLEN field includes the size of the ITEMLEN, ITEMTAG, and
!  ITEMVAL fields.
macro LIL$R_LIST_FIELDS = 0,0,32,0 %;
macro LIL$W_ITEMLEN = 0,0,16,0 %;       !  Number of bytes in the item
macro LIL$W_ITEMTAG = 2,0,16,0 %;       !  Size of structure
 
!*** MODULE VCIBDLL ***
! ++
! 
!  Data Link definitions that follow the standard VCIB fields
! 
! --
literal VCIB$M_DLL_RCV_DCB = 1;
literal VCIB$M_DLL_RCV_MAC = 2;
literal VCIB$M_DLL_XMT_CHAIN = 1;
literal VCIB$M_DLL_XMT_RCVRSB = 2;
literal VCIB$M_DLL_PORT_STATUS = 4;
literal VCIB$K_DLL_CSMACD = 1;          !  CSMACD data link
literal VCIB$K_DLL_DDCMP = 2;           !  DDCMP  data link
literal VCIB$K_DLL_FDDI = 3;            !  FDDI   data link
literal VCIB$K_DLL_HDLC = 4;            !  HDLC   data link
literal VCIB$K_DLL_LAPB = 5;            !  LAPB   data link
literal VCIB$M_LAN_RCV_LIM = 1;
literal VCIB$M_LAN_RCV_ICS = 2;
literal VCIB$M_LAN_FTC = 4;
literal VCIB$M_LAN_2ND_DEV = 8;
literal VCIB$M_LAN_SFR = 16;
literal VCIB$M_LAN_SCC = 32;
literal VCIB$M_LAN_RCV_DCB = 1;
literal VCIB$M_LAN_DP_DELAY = 2;
literal VCIB$K_LAN_FIXED_LENGTH = 140;  !  Length of LAN VCIB
literal VCIB$M_SYN_UNSEQ = 1;
literal VCIB$K_SYN_FIXED_LENGTH = 86;   !  Length of SYN VCIB
literal VCIB$S_VCIBDLLDEF = 140;
!  First get to the end of the common VCIB section.  Then we can start
!  the overlay.
!  DLL extensions to the VCIB.  Note that the DLL extension includes
!  some generic extensions (DLL) followed by an overlay of the LAN
!  and SYN extensions.
macro VCIB$A_DLL_INPUT_LIST = 60,0,32,0 %; !  Address of input  item list
macro VCIB$A_DLL_OUTPUT_LIST = 64,0,32,0 %; !  Address of output item list
macro VCIB$R_DLL_OVERLAY_1 = 68,0,16,0 %;
macro VCIB$W_DLL_CLIENT_FLAGS = 68,0,16,0 %; !  Flags specified by client
macro VCIB$V_DLL_RCV_DCB = 68,0,1,0 %;  !  1 = Can pass DCB on RCV
macro VCIB$V_DLL_RCV_MAC = 68,1,1,0 %;  !  determines where 
!  VCRP$A_LAN_R_HEADER points:
!  0 = the LHI structure 
!  1 = MAC specific frame header
! 	FDDI:	[FC]
! 	CSMACD:	[DA]
macro VCIB$R_DLL_OVERLAY_2 = 70,0,16,0 %;
macro VCIB$W_DLL_FLAGS = 70,0,16,0 %;   !  Flags specified by data link
macro VCIB$V_DLL_XMT_CHAIN = 70,0,1,0 %; !  1 = device can chain
macro VCIB$V_DLL_XMT_RCVRSB = 70,1,1,0 %; !  1 = DL can XMT on RCV RSB
macro VCIB$V_DLL_PORT_STATUS = 70,2,1,0 %; !  1 = PORT USABLE was last event
!  0 = PORT UNUSABLE was last 
!      event, OR no USABLE/UNUSABLE
!      event has occured yet
macro VCIB$W_DLL_TYPE = 72,0,16,0 %;    !  Type of data link
macro VCIB$W_DLL_HDR_SIZE = 74,0,16,0 %; !  Max data link header in bytes
macro VCIB$W_DLL_XMT_SIZE = 76,0,16,0 %; !  Max transmit in bytes
macro VCIB$W_DLL_CHAIN_SIZE = 78,0,16,0 %; !  Min size of 1st chain in bytes
!  Define the values for the field VCIB$W_DLL_TYPE.
macro VCIB$R_DLL_VCIB_ADDITIONS = 80,0,0,0 %;
literal VCIB$S_DLL_VCIB_ADDITIONS = 60;
!  LAN extensions to the VCIB; after the DLL extensions.
macro VCIB$R_LAN_VCIB = 80,0,0,0 %;
literal VCIB$S_LAN_VCIB = 60;
macro VCIB$A_LAN_LPB = 80,0,32,0 %;     !  Address of LAN Port Block
macro VCIB$A_LAN_UCB = 84,0,32,0 %;     !  Address of UCB
macro VCIB$A_LAN_BUILD_HDR = 88,0,32,0 %; !  Address of LAN's Build Header
!  service
macro VCIB$A_LAN_TRANSMIT_FRAME = 92,0,32,0 %; !  Address of LAN's Transmit 
!  Frame service
macro VCIB$A_LAN_TRANSMIT_AVAIL = 96,0,32,0 %; !  Address of available Transmits
macro VCIB$W_LAN_MAX_RCV = 100,0,16,0 %; !  Max outstanding receives
macro VCIB$W_LAN_OUT_RCV = 102,0,16,0 %; !  Number of outstanding receives
macro VCIB$R_LAN_OVERLAY_1 = 104,0,16,0 %;
macro VCIB$W_LAN_CLIENT_FLAGS = 104,0,16,0 %; !  Flags specified by client
macro VCIB$V_LAN_RCV_LIM = 104,0,1,0 %; !  1 = DL will limit the #
!      of RCV VCRPs
macro VCIB$V_LAN_RCV_ICS = 104,1,1,0 %; !  1 = DL must init context
!      stack in RCV VCRPs
macro VCIB$V_LAN_FTC = 104,2,1,0 %;     !  1 = Fast Transmit Complete
macro VCIB$V_LAN_2ND_DEV = 104,3,1,0 %; !  1 = Use 2nd device
macro VCIB$V_LAN_SFR = 104,4,1,0 %;     !  1 = Skip field restore
macro VCIB$V_LAN_SCC = 104,5,1,0 %;     !  1 = Skip completion check
macro VCIB$R_LAN_OVERLAY_2 = 106,0,16,0 %;
macro VCIB$W_LAN_FLAGS = 106,0,16,0 %;  !  Flags specified by LAN
macro VCIB$V_LAN_RCV_DCB = 106,0,1,0 %; !  1 = DL supports delivery of
!      VCRP/DCB sets
macro VCIB$V_LAN_DP_DELAY = 106,1,1,0 %; !  1 = Disable Port is being
!      delayed
macro VCIB$A_LAN_LDC = 108,0,32,0 %;    !  Address of the LDC structure
macro VCIB$L_LAN_OOCNT = 112,0,32,1 %;  !  Number of operations outstanding
macro VCIB$A_LAN_DP_VCRP = 116,0,32,0 %; !  Address of the Disable Port VCRP
!  being disabled.  Only valid if
!  the DP_DELAY flag is set.
macro VCIB$A_LAN_HWA = 120,0,32,0 %;    !  pointer to HWA/MLA
macro VCIB$A_LAN_PHA = 124,0,32,0 %;    !  pointer to PHA
macro VCIB$L_LAN_RESERVED1 = 128,0,32,1 %; !  For future expansion
macro VCIB$Q_LAN_RESERVED2 = 132,0,0,0 %;
literal VCIB$S_LAN_RESERVED2 = 8;       !  For future expansion
!  SYN extensions to the VCIB; after the DLL extensions.
macro VCIB$R_SYN_VCIB = 80,0,0,0 %;
literal VCIB$S_SYN_VCIB = 6;
macro VCIB$A_SYN_UP_PORT = 80,0,32,0 %; !  Used only by the data link
macro VCIB$R_SYN_OVERLAY_1 = 84,0,16,0 %;
macro VCIB$W_SYN_CLIENT_FLAGS = 84,0,16,0 %; !  Flags specified by client
macro VCIB$V_SYN_UNSEQ = 84,0,1,0 %;    !  1 = Client wants unseq port
 
!*** MODULE VCRPLAN ***
! ++
! 
!  LAN definitions that are embedded in the standard VCRP fields
! 
! --
literal VCRP$K_FC_DLL_BASE = 512;
literal VCRP$K_FC_SYN_ENTER_MAINT = 512;
literal VCRP$K_FC_SYN_EXIT_MAINT = 513;
literal VCRP$K_FC_X25_RESET = 514;
literal VCRP$K_FC_X25_ACK_NOCOM = 515;
literal VCRP$K_FC_LAN_CHANGE_PORT = 516;
literal VCRP$K_FC_DLL_LAST = 517;
!  Data Link event codes
literal VCRP$K_EC_DLL_BASE = 4608;
literal VCRP$K_EC_DLL_PORT_USABLE = 4608;
literal VCRP$K_EC_DLL_PORT_UNUSABLE = 4609;
literal VCRP$K_EC_LAN_NEW_ADDRESS = 4610;
literal VCRP$K_EC_LAN_RCV_CONGESTION = 4611;
literal VCRP$K_EC_LAN_RCV_PDU_LOST = 4612;
literal VCRP$K_EC_SYN_STATION_DELETED = 4613;
literal VCRP$K_EC_X25_INCOMING_RESET = 4614;
literal VCRP$K_EC_X25_INCOMING_NOCOM = 4615;
literal VCRP$K_EC_LAN_RESTART_FAIL = 4616;
literal VCRP$K_EC_LAN_STATION_RENAMED = 4617;
literal VCRP$K_EC_DLL_LAST = 4618;
!  Since we need to overlay many fields, we will do each field in a
literal VCRP$L_LAN_802XMT = 204;        !  802.2 XMT parameters
literal VCRP$M_LAN_FLTR_MCA = 1;
literal VCRP$M_LAN_FLTR_CTL = 2;
literal VCRP$M_LAN_FLTR_SRC = 4;
literal VCRP$M_LAN_FLTR_STARTUP = 1;
literal VCRP$M_LAN_FLTR_INTXMIT = 2;
literal VCRP$M_LAN_FLTR_DAT = 4;
literal VCRP$M_LAN_CHAINED = 1;
literal VCRP$M_LAN_SVAPTE = 2;
literal VCRP$M_LAN_1ST_SEG = 4;
literal VCRP$T_LAN_DATA = 264;
!  Now define maximum length needed, allowing for maximum alignment
literal VCRP$C_LAN_OVERHEAD = 326;
!  Now define all the fields in the various headers
literal VCRP$W_LAN_LEN_802 = 276;       !  802 length field
literal VCRP$T_LAN_USER_ETH = 278;      !  Start of user ETH data
literal VCRP$W_LAN_SIZE = 278;          !  Size of message if padded
literal VCRP$X_LAN_CTL = 280;           !  802 CTL field
literal VCRP$G_LAN_PID = 281;           !  5-byte Protocol Identifier
literal VCRP$T_LAN_USER_802E = 286;     !  Start of user 802E data
literal VCRP$S_VCRPLANDEF = 280;
!  First we will define all the function codes and all the event codes
!  used specifically by the data links.
!  Data Link function codes
!  separate overlay.  That way, we can do them in any order.
macro VCRP$R_VCRPLAN_OVERLAY = 0,0,0,0 %;
! ========================================================================
!  Data Request - For receive, LAN needs a field that will point to the
!  data link header.
macro VCRP$R_VCRPLAN_DATA_REQUEST = 0,0,0,0 %;
literal VCRP$S_VCRPLAN_DATA_REQUEST = 65;
macro VCRP$A_LAN_R_HEADER = 60,0,32,0 %; !  Address of receive packet header	
macro VCRP$B_LAN_FC = 64,0,8,0 %;       !  FC value for FDDI xmit/recv
! ========================================================================
!  Mgmt Request - LAN needs the P2 buffer fields.
macro VCRP$R_VCRPLAN_MGMT_REQUEST = 0,0,0,0 %;
literal VCRP$S_VCRPLAN_MGMT_REQUEST = 56;
macro VCRP$L_LAN_P2BUFF_SIZE = 48,0,32,0 %;
!  LAN P2 buffer size
macro VCRP$A_LAN_P2BUFF = 52,0,32,0 %;  !  LAN P2 buffer
! ========================================================================
!  Scratch area - LAN needs many fields here.
macro VCRP$R_VCRPLAN_SCRATCH = 0,0,0,0 %;
literal VCRP$S_VCRPLAN_SCRATCH = 252;
macro VCRP$Q_LAN_T_DEST = 196,0,0,0 %;
literal VCRP$S_LAN_T_DEST = 8;          !  Destination address
macro VCRP$W_LAN_T_CTL = 204,0,16,0 %;  !  802.2 ctl field
macro VCRP$B_LAN_T_CTL_SIZE = 206,0,8,0 %; !  802.2 ctl field value size
macro VCRP$B_LAN_T_DSAP = 207,0,8,0 %;  !  802.2 XMT dest. sap
macro VCRP$B_LAN_T_RESP = 208,0,8,0 %;  !  802.2 command/response flag
macro VCRP$R_LAN_FILTER = 209,0,8,0 %;
literal VCRP$S_LAN_FILTER = 1;
macro VCRP$B_LAN_R_FILTER = 209,0,8,0 %; !  Receive filtering mask 
macro VCRP$V_LAN_FLTR_MCA = 209,0,1,0 %; !  MCA filtering has been performed
macro VCRP$V_LAN_FLTR_CTL = 209,1,1,0 %; !  CTL filtering has been performed
macro VCRP$V_LAN_FLTR_SRC = 209,2,1,0 %; !  SRC filtering has been performed
macro VCRP$B_LAN_T_FILTER = 209,0,8,0 %; !  Transmit filtering mask 
macro VCRP$V_LAN_FLTR_STARTUP = 209,0,1,0 %; !  Delete VCRP, complete IRP
macro VCRP$V_LAN_FLTR_INTXMIT = 209,1,1,0 %; !  Add VCRP to Receive list
macro VCRP$V_LAN_FLTR_DAT = 209,2,1,0 %; !  Duplicate Address Test
!  VCRP for LOOPBACK
macro VCRP$B_LAN_PORT1 = 210,0,8,0 %;   !  Port specific byte
macro VCRP$B_LAN_PORT2 = 211,0,8,0 %;   !  Port specific byte
macro VCRP$W_LAN_HDR_SIZE = 212,0,16,0 %; !  Size of receive hdr
macro VCRP$B_LAN_R_FMT = 214,0,8,0 %;   !  Receive packet format
macro VCRP$A_LAN_UCB = 215,0,32,0 %;    !  Address of UCB
macro VCRP$B_LAN_DIAG_FLAGS = 219,0,8,0 %; !  Diagnostic flags
macro VCRP$B_LAN_FUNCTION = 220,0,8,0 %; !  Function for this request
macro VCRP$W_LAN_CODE = 221,0,16,0 %;   !  Parameter code
macro VCRP$W_LAN_LENERR = 223,0,16,0 %; !  Diagnostic info.
macro VCRP$W_LAN_STATUS = 225,0,16,0 %; !  LAN status info.
macro VCRP$B_LAN_FLAGS = 227,0,8,0 %;   !  Flags
macro VCRP$V_LAN_CHAINED = 227,0,1,0 %; !  Transmit is chained
macro VCRP$V_LAN_SVAPTE = 227,1,1,0 %;  !  2nd entry uses SVAPTE/BOFF
macro VCRP$V_LAN_1ST_SEG = 227,2,1,0 %; !  1st entry is being worked
!  When the CHAINED bit is set, the following fields are used to get to
!  the second buffer in the chain.  DCBBCNT has the number of bytes in
!  the second entry.  Either DCBSVA or DCBSVAPTE/DCBBOFF are used to
!  locate the buffer.  Use DCBSVA if the SVAPTE flag is clear.  Use
!  DCBSVAPTE/DCBBOFF if the SVAPTE flag is set.
macro VCRP$L_LAN_DCBBCNT = 228,0,32,0 %; !  Size of 2nd entry
macro VCRP$R_LAN_UNION1 = 232,0,32,0 %;
literal VCRP$S_LAN_UNION1 = 4;
macro VCRP$L_LAN_DCBSVA = 232,0,32,0 %; !  SVA of 2nd entry
macro VCRP$L_LAN_DCBSVAPTE = 232,0,32,0 %; !  SVAPTE of 2nd entry
macro VCRP$L_LAN_DCBBOFF = 236,0,32,0 %; !  BOFF of 2nd entry
!  If requested, we will save the buffer descriptor fields here on a
!  transmit request so that we can restore them when we are finished.
macro VCRP$L_LAN_SBOFF = 240,0,32,0 %;  !  Saved BOFF value
macro VCRP$L_LAN_SBCNT = 244,0,32,0 %;  !  Saved BCNT value
macro VCRP$L_LAN_STPS = 248,0,32,0 %;   !  Saved TOTAL_PDU_SIZE value
! ========================================================================
!  Receive PDU area - We will define the fields that describe the
!  fields in the received frames.  Note that the DA must be quadword
!  aligned for some devices.
macro VCRP$R_VCRPLAN_RCVPDU = 0,0,0,0 %;
literal VCRP$S_VCRPLAN_RCVPDU = 280;
!  First we need to align the data field to be quadword aligned.
!  In the furture we should do this so that it adjusts itself.
!  Right now we are hacking in a longword because we know that's
!  what we need.
macro VCRP$L_LAN_ALIGN = 260,0,32,0 %;  !  Need quadword alignment
!  Now define the generic "beginning of receive data" field
!  in any driver (currently that maximum is 31 bytes for FXDRIVER)
macro VCRP$G_LAN_DEST = 264,0,0,1 %;
literal VCRP$S_LAN_DEST = 6;            !  Destination address
macro VCRP$G_LAN_SRC = 270,0,0,1 %;
literal VCRP$S_LAN_SRC = 6;             !  Source address
macro VCRP$W_LAN_PTYPE = 276,0,16,0 %;  !  Protocol type
macro VCRP$B_LAN_DSAP = 278,0,8,0 %;    !  802 DSAP field
macro VCRP$B_LAN_SSAP = 279,0,8,0 %;    !  802 SSAP field
 
!*** MODULE PROTO ***
! 
! 	LAN FRAME/PACKET DEFINITONS
! 	FRAME TYPES:
! 		FDDI
! 		CSMA/CD 
! 		    Ethernet
! 		    IEEE 802.3
! 	PACKET TYPES
! 		Mapped Ethernet	(FDDI only)
! 		802.2
! 		802E
! 
! 
! 	FDDI Frame Header
! 
literal FDDI$C_HDR_LEN = 13;            !  Size of FDDI Header
literal FDDI$S_FDDI_HDR = 13;           !  FDDI Frame header structure
macro FDDI$B_FC = 0,0,8,0 %;            !  Frame Control field
macro FDDI$G_DA = 1,0,0,0 %;
literal FDDI$S_DA = 6;                  !  Destination Address field
macro FDDI$G_SA = 7,0,0,0 %;
literal FDDI$S_SA = 6;                  !  Source Address field
! 
!  Maximum Frame length for FDDI including all fields from FC through CRC
! 
literal FDDI$C_MAX_FRM_LEN = 4495;
! 
!  Maximum Packet lengths for FDDI users
! 
literal FDDI$C_MAX_PKTSIZE = 4478;      !  Maximum Packet for FDDI (SMT user can send this size)
literal FDDI$C_MAX_PKTSIZE_ETH = 4470;  !  Maximum of Mapped Ethernet Packet on FDDI
literal FDDI$C_MAX_PKTSIZE_PAD = 4468;  !  Maximum of Mapped Ethernet Packet with padding on FDDI
literal FDDI$C_MAX_PKTSIZE_CLI = 4475;  !  Maximum of 802 Packet on FDDI
literal FDDI$C_MAX_PKTSIZE_USR = 4474;  !  Maximum of 802 Packet on FDDI
literal FDDI$C_MAX_PKTSIZE_802E = 4470; !  Maximum of 802E Packet on FDDI
literal FDDI$C_MAX_PKTSIZE_HWA = 4495;  !  Maximum hardware Packet including header and CRC
literal FDDI$C_MIN_PKTSIZE = 0;         !  Minimum Packet (any user)
! 
!  Frame/packet header sizes for FDDI
! 
literal FDDI$C_HDRSIZE_ETH = 21;        !  Maximum of Ethernet Packet without padding
literal FDDI$C_HDRSIZE_PAD = 23;        !  Maximum of Ethernet Packet with padding
literal FDDI$C_HDRSIZE_CLI = 16;        !  Maximum of 802 Packet
literal FDDI$C_HDRSIZE_USR = 17;        !  Maximum of 802 Packet
literal FDDI$C_HDRSIZE_802E = 21;       !  Maximum of 802E Packet
literal FDDI$C_MAX802_PKTSIZ = 4475;
literal FDDI$C_MAX802E_PKTSIZ = 4470;
literal FDDI$C_MAXMPETH_PKTSIZ = 4470;
literal FDDI$C_MAXMPETHPAD_PKTSIZ = 4468;
! 
!  Constants for FC definitions
! 
literal FDDI$V_FC_PPP = 0;              !  FC PPP field starts at bit 0
literal FDDI$M_FC_PPP = 7;              !  FC PPP field is low order three bits
literal FDDI$S_FC_PPP = 3;              !  FC PPP field is 3 bits wide
literal FDDI$C_FC_LLC_MIN = 80;         !  FC for LLC Users (minimum)
literal FDDI$C_FC_LLC_DEF = 80;         !  FC for LLC Users (default)
literal FDDI$C_FC_LLC_MAX = 87;         !  FC for LLC Users (maximum)
literal FDDI$C_FC_SMT_MIN = 65;         !  FC for LLC Users (minimum)
literal FDDI$C_FC_SMT_DEF = 65;         !  FC for LLC Users (default)
literal FDDI$C_FC_SMT_MAX = 79;         !  FC for LLC Users (maximum)
! 
!  CSMACD (Ethernet/IEEE 802.3) Frame Header
! 
literal CSMACD$C_HDR_LEN = 14;          !  Size of CSMACD Header
literal CSMACD$C_PAD_LEN = 16;          !  Size of CSMACD Header
literal CSMACD$S_CSMACD_HDR = 16;
macro CSMACD$G_DA = 0,0,0,0 %;
literal CSMACD$S_DA = 6;                !  Destination Address field
macro CSMACD$G_SA = 6,0,0,0 %;
literal CSMACD$S_SA = 6;                !  Source Address field
!  The next field (field3) has different meanings depending on the
!  Specific CSMACD frame type (Ethernet vs. IEEE 802.3):
macro CSMACD$r_field3 = 12,0,16,0 %;
literal CSMACD$s_field3 = 2;
macro CSMACD$r_field3_eth = 12,0,16,0 %;
literal CSMACD$s_field3_eth = 2;
macro CSMACD$W_PTY = 12,0,16,0 %;       !  Ethernet Protocol Type field
macro CSMACD$r_field3_802 = 12,0,16,0 %;
literal CSMACD$s_field3_802 = 2;
macro CSMACD$W_LEN_8023 = 12,0,16,0 %;  !  IEEE 802.3 Length field
macro CSMACD$W_PAD = 14,0,16,0 %;       !  optional Ethenet Length (PAD) field
! 
!  Maximum Frame length for FDDI including all fields from FC through CRC
! 
literal CSMACD$C_MAX_FRM_LEN = 1518;
! 
!  Maximum Packet lengths for CSMACD users
! 
literal CSMACD$C_MAX_PKTSIZE = 1500;    !  Maximum of Ethernet Packet without padding
literal CSMACD$C_MAX_PKTSIZE_ETH = 1500; !  Maximum of Ethernet Packet without padding
literal CSMACD$C_MAX_PKTSIZE_PAD = 1498; !  Maximum of Ethernet Packet with padding
literal CSMACD$C_MAX_PKTSIZE_CLI = 1497; !  Maximum of 802 Packet
literal CSMACD$C_MAX_PKTSIZE_USR = 1496; !  Maximum of 802 Packet
literal CSMACD$C_MAX_PKTSIZE_802E = 1492; !  Maximum of 802E Packet
literal CSMACD$C_MAX_PKTSIZE_HWA = 1518; !  Maximum hardware Packet including header and CRC
literal CSMACD$C_MIN_PKTSIZE = 46;      !  Minimum of Ethernet Packet
literal CSMACD$C_HDRSIZE_ETH = 14;      !  Maximum of Ethernet Packet without padding
literal CSMACD$C_HDRSIZE_PAD = 16;      !  Maximum of Ethernet Packet with padding
literal CSMACD$C_HDRSIZE_CLI = 17;      !  Maximum of 802 Packet
literal CSMACD$C_HDRSIZE_USR = 18;      !  Maximum of 802 Packet
literal CSMACD$C_HDRSIZE_802E = 22;     !  Maximum of 802E Packet
literal CSMACD$C_MAX802_PKTSIZ = 1497;
literal CSMACD$C_MAX802E_PKTSIZ = 1492;
literal CSMACD$C_MAXETH_PKTSIZ = 1500;
literal CSMACD$C_MAXETHPAD_PKTSIZ = 1498;
! 
! 	Packet Header Definitions
! 
! 	Packet headers begin at the byte following the FDDI or CSCMACD 
! 	frame header. (at offsets FDDI$C_HDR_LEN/CSMACD$C_HDR_LEN)
! 
! 	Packet types supported:
! 		- FDDI mapped ethernet (for FDDI only)
! 		- IEEE 802.1 SNAP SAP (802E/802PID)
! 		- IEEE 802.2, Class I, including (Type 1 packets only):
! 			-- UI
! 			-- XID
! 			-- TEST
! 
! 	FDDI Mapped Ethernet packet header
! 
literal MPDETH$C_LEN = 8;               !  Size of Mapped Ethernet Header without Padding
literal MPDETH$C_PAD_LEN = 10;          !  Size of Mapped Eth Header with Padding
literal MPDETH$S_MPDETH_HDR = 10;
macro MPDETH$G_SNAP_SAP = 0,0,24,0 %;
literal MPDETH$S_SNAP_SAP = 3;          !  SNAP-SAP <AA-00-03> hex
macro MPDETH$G_MAP_PID = 3,0,24,0 %;
literal MPDETH$S_MAP_PID = 3;           !  SNAP PID <00-00-00>
macro MPDETH$W_PTY = 6,0,16,0 %;        !  Ethernet Protocol Type field
macro MPDETH$W_PAD = 8,0,16,0 %;        !  PAD (length) field (If User enables it)
! 
! 	IEEE Standard 802.2 (LLC), packet header
! 
literal LLC$C_ONEBYTCTL_LEN = 3;        !  Size of 802.2 Header with 
!  one byte CTL
literal LLC$G_ONEBYT_DATA = 3;          !  Start of User Data 
!  with 1 byte control field
literal LLC$C_TWOBYTCTL_LEN = 4;        !  Size of 802.2 Header with 
!  two byte CTL
literal LLC$G_TWOBYT_DATA = 4;          !  Start of User Data 
!  with 1 byte control field
literal LLC$S_HDR_802 = 4;
macro LLC$B_DSAP = 0,0,8,0 %;           !  Destination Service Access Point
macro LLC$B_SSAP = 1,0,8,0 %;           !  Source Service Access Point
macro LLC$B_CTL1 = 2,0,8,0 %;           !  Control field
macro LLC$B_CTL2 = 3,0,8,0 %;           !  optional second byte of CTL
! 
! 	IEEE 802.1 SNAP SAP packet header (802E/802PID)
! 
literal SNAP$C_LEN = 8;                 !  Size of 802 SNAP Header
literal SNAP$S_SNAP_HDR = 8;
macro SNAP$G_SAP = 0,0,24,0 %;
literal SNAP$S_SAP = 3;                 !  SNAP-SAP <AA-00-03> hex
macro SNAP$G_PID = 3,0,0,0 %;
literal SNAP$S_PID = 5;                 !  Protocol Identifier (PID)
