/*++ Copyright (c) 1996 Microsoft Corporation Module Name: arppkt.h Abstract: Definitions for ATMARP packets Revision History: Who When What -------- -------- ---------------------------------------------- arvindm 07-29-96 Created Notes: --*/ #ifndef _ARP_PKT__H #define _ARP_PKT__H // // Rounded-off size of generic Q.2931 IE header // #define ROUND_OFF(_size) (((_size) + 3) & ~0x3) #define SIZEOF_Q2931_IE ROUND_OFF(sizeof(Q2931_IE)) #define SIZEOF_AAL_PARAMETERS_IE ROUND_OFF(sizeof(AAL_PARAMETERS_IE)) #define SIZEOF_ATM_TRAFFIC_DESCR_IE ROUND_OFF(sizeof(ATM_TRAFFIC_DESCRIPTOR_IE)) #define SIZEOF_ATM_BBC_IE ROUND_OFF(sizeof(ATM_BROADBAND_BEARER_CAPABILITY_IE)) #define SIZEOF_ATM_BLLI_IE ROUND_OFF(sizeof(ATM_BLLI_IE)) #define SIZEOF_ATM_QOS_IE ROUND_OFF(sizeof(ATM_QOS_CLASS_IE)) // // Total space required for Information Elements in an outgoing call. // #define ATMARP_MAKE_CALL_IE_SPACE ( \ SIZEOF_Q2931_IE + SIZEOF_AAL_PARAMETERS_IE + \ SIZEOF_Q2931_IE + SIZEOF_ATM_TRAFFIC_DESCR_IE + \ SIZEOF_Q2931_IE + SIZEOF_ATM_BBC_IE + \ SIZEOF_Q2931_IE + SIZEOF_ATM_BLLI_IE + \ SIZEOF_Q2931_IE + SIZEOF_ATM_QOS_IE ) // // Total space required for Information Elements in an outgoing AddParty. // #define ATMARP_ADD_PARTY_IE_SPACE ( \ SIZEOF_Q2931_IE + SIZEOF_AAL_PARAMETERS_IE + \ SIZEOF_Q2931_IE + SIZEOF_ATM_BLLI_IE ) #define AA_IPV4_ADDRESS_LENGTH 4 #define CLASSA_MASK 0x000000ff #define CLASSB_MASK 0x0000ffff #define CLASSC_MASK 0x00ffffff #define CLASSD_MASK 0x000000e0 #define CLASSE_MASK 0xffffffff // // Standard values // #define AA_PKT_ATM_FORUM_AF 19 #define AA_PKT_PRO_IP ((USHORT)0x800) // // Values for the LLC SNAP header // #define LLC_SNAP_LLC0 ((UCHAR)0xAA) #define LLC_SNAP_LLC1 ((UCHAR)0xAA) #define LLC_SNAP_LLC2 ((UCHAR)0x03) #define LLC_SNAP_OUI0 ((UCHAR)0x00) #define LLC_SNAP_OUI1 ((UCHAR)0x00) #define LLC_SNAP_OUI2 ((UCHAR)0x00) // // Values for EtherType // #define AA_PKT_ETHERTYPE_IP_NS ((USHORT)0x0008) #define AA_PKT_ETHERTYPE_IP ((USHORT)0x800) #define AA_PKT_ETHERTYPE_ARP ((USHORT)0x806) #include // // LLC SNAP Header // typedef struct _AA_PKT_LLC_SNAP_HEADER { UCHAR LLC[3]; UCHAR OUI[3]; USHORT EtherType; } AA_PKT_LLC_SNAP_HEADER; typedef AA_PKT_LLC_SNAP_HEADER UNALIGNED *PAA_PKT_LLC_SNAP_HEADER; // // ATMARP Packet Common Header format // typedef struct _AA_ARP_PKT_HEADER { AA_PKT_LLC_SNAP_HEADER LLCSNAPHeader; USHORT hrd; // Hardware Type USHORT pro; // Protocol Type UCHAR shtl; // Source HW Addr Type+Length UCHAR sstl; // Source HW SubAddr Type+Length USHORT op; // Operation Code UCHAR spln; // Source Protocol Addr Length UCHAR thtl; // Target HW Addr Type+Length UCHAR tstl; // Target HW SubAddr Type+Length UCHAR tpln; // Target Protocol Addr Length UCHAR Variable[1]; // Start of the variable part } AA_ARP_PKT_HEADER; typedef AA_ARP_PKT_HEADER UNALIGNED *PAA_ARP_PKT_HEADER; #define AA_PKT_LLC_SNAP_HEADER_LENGTH (sizeof(AA_PKT_LLC_SNAP_HEADER)) #define AA_ARP_PKT_HEADER_LENGTH (sizeof(AA_ARP_PKT_HEADER)-1) #include // // Values for fields in an ARP packet header // #define AA_PKT_HRD ((USHORT)0x0013) #define AA_PKT_PRO ((USHORT)0x0800) #define AA_PKT_OP_TYPE_ARP_REQUEST ((USHORT)1) #define AA_PKT_OP_TYPE_ARP_REPLY ((USHORT)2) #define AA_PKT_OP_TYPE_INARP_REQUEST ((USHORT)8) #define AA_PKT_OP_TYPE_INARP_REPLY ((USHORT)9) #define AA_PKT_OP_TYPE_ARP_NAK ((USHORT)10) #define AA_PKT_ATM_ADDRESS_NSAP ((UCHAR)0x00) #define AA_PKT_ATM_ADDRESS_E164 ((UCHAR)0x40) #define AA_PKT_ATM_ADDRESS_BIT ((UCHAR)0x40) // // Internal representation of the contents of an // ARP packet: // typedef struct _AA_ARP_PKT_CONTENTS { UCHAR SrcAtmNumberTypeLen; UCHAR SrcAtmSubaddrTypeLen; UCHAR DstAtmNumberTypeLen; UCHAR DstAtmSubaddrTypeLen; UCHAR UNALIGNED * pSrcAtmNumber; UCHAR UNALIGNED * pSrcAtmSubaddress; UCHAR UNALIGNED * pDstAtmNumber; UCHAR UNALIGNED * pDstAtmSubaddress; UCHAR UNALIGNED * pSrcIPAddress; UCHAR UNALIGNED * pDstIPAddress; } AA_ARP_PKT_CONTENTS, *PAA_ARP_PKT_CONTENTS; /*++ BOOLEAN AA_PKT_LLC_SNAP_HEADER_OK( IN PAA_PKT_LLC_SNAP_HEADER pPktHeader ) Check if a received LLC/SNAP header is valid. --*/ #define AA_PKT_LLC_SNAP_HEADER_OK(pH) \ (((pH)->LLC[0] == LLC_SNAP_LLC0) && \ ((pH)->LLC[1] == LLC_SNAP_LLC1) && \ ((pH)->LLC[2] == LLC_SNAP_LLC2) && \ ((pH)->OUI[0] == LLC_SNAP_OUI0) && \ ((pH)->OUI[1] == LLC_SNAP_OUI1) && \ ((pH)->OUI[2] == LLC_SNAP_OUI2)) /*++ UCHAR AA_PKT_ATM_ADDRESS_TO_TYPE_LEN( IN PATM_ADDRESS pAtmAddress ) Return a one-byte Type+Length field corresponding to an ATM Address --*/ #define AA_PKT_ATM_ADDRESS_TO_TYPE_LEN(pAtmAddress) \ ((UCHAR)((pAtmAddress)->NumberOfDigits) | \ (((pAtmAddress)->AddressType == ATM_E164) ? \ AA_PKT_ATM_ADDRESS_E164 : AA_PKT_ATM_ADDRESS_NSAP)) /*++ VOID AA_PKT_TYPE_LEN_TO_ATM_ADDRESS( IN UCHAR TypeLen, IN ATM_ADDRESSTYPE * pAtmAddressType, IN ULONG * pAtmAddressLength ) Convert a Type+Length field in an ATMARP packet to Type, Length values in an ATM_ADDRESS structure --*/ #define AA_PKT_TYPE_LEN_TO_ATM_ADDRESS(TypeLen, pAtmType, pAtmLen) \ { \ *(pAtmType) = \ ((((TypeLen) & AA_PKT_ATM_ADDRESS_BIT) == \ AA_PKT_ATM_ADDRESS_E164)? ATM_E164: ATM_NSAP); \ *(pAtmLen) = \ (ULONG)((TypeLen) & ~AA_PKT_ATM_ADDRESS_BIT); \ } // // ATM Address ESI length, and offset from the beginning. // #define AA_ATM_ESI_LEN 6 #define AA_ATM_ESI_OFFSET 13 // // DHCP constants // #define AA_DEST_DHCP_PORT_OFFSET 2 #define AA_DHCP_SERVER_PORT 0x4300 #define AA_DHCP_CLIENT_PORT 0x4400 #define AA_DHCP_MIN_LENGTH 44 #define AA_DHCP_ESI_OFFSET 28 #endif // _ARP_PKT__H