home *** CD-ROM | disk | FTP | other *** search
-
- //=============================================================================
- // Microsoft (R) Bloodhound (tm). Copyright (C) 1991-1992.
- //
- // MODULE: frame.h
- //=============================================================================
-
- #if !defined(_FRAME_)
- #pragma option push -b -a8 -pc -A- /*P_O_Push*/
-
- #define _FRAME_
-
- #pragma pack(1)
-
- #define MAX_ADDR_LENGTH 6
-
- //=============================================================================
- // 802.3 and ETHERNET MAC structure.
- //=============================================================================
-
- typedef struct _ETHERNET
- {
- BYTE DstAddr[MAX_ADDR_LENGTH]; //... destination address.
- BYTE SrcAddr[MAX_ADDR_LENGTH]; //... source address.
- union
- {
- WORD Length; //... 802.3 length field.
- WORD Type; //... Ethernet type field.
- };
- BYTE Info[0]; //... information field.
- } ETHERNET;
-
- typedef ETHERNET *LPETHERNET;
-
- typedef ETHERNET UNALIGNED *ULPETHERNET;
-
- #define ETHERNET_SIZE sizeof(ETHERNET)
-
- #define ETHERNET_HEADER_LENGTH 14
-
- #define ETHERNET_DATA_LENGTH 0x05DC //... 1500. Max ethernet data length.
- #define ETHERNET_FRAME_LENGTH 0x05EA //... 1514. Max ethernet frame length.
- #define ETHERNET_FRAME_TYPE 0x0600 //... 1536. First ethernet type assigned.
-
- //=============================================================================
- // 802.5 (TOKENRING) MAC structure.
- //=============================================================================
-
- typedef struct _TOKENRING
- {
- BYTE AccessCtrl; //... access control field.
- BYTE FrameCtrl; //... frame control field.
- BYTE DstAddr[MAX_ADDR_LENGTH]; //... destination address.
- BYTE SrcAddr[MAX_ADDR_LENGTH]; //... source address.
- union
- {
- BYTE Info[0]; //... information field.
- WORD RoutingInfo[0]; //... routing information field.
- };
- } TOKENRING;
-
- typedef TOKENRING *LPTOKENRING;
- typedef TOKENRING UNALIGNED *ULPTOKENRING;
-
- #define TOKENRING_SIZE sizeof(TOKENRING)
-
- #define TOKENRING_HEADER_LENGTH 14
-
- #define TOKENRING_SA_ROUTING_INFO 0x0080
- #define TOKENRING_SA_LOCAL 0x0040
-
- #define TOKENRING_DA_LOCAL 0x0040
- #define TOKENRING_DA_GROUP 0x0080
-
- #define TOKENRING_RC_LENGTHMASK 0x001F
- #define TOKENRING_BC_MASK 0x00E0
-
- #define TOKENRING_TYPE_MAC 0x0000 //... MAC frame.
- #define TOKENRING_TYPE_LLC 0x0040 //... LLC frame.
-
- //=============================================================================
- // FDDI MAC structure.
- //=============================================================================
-
- typedef struct _FDDI
- {
- BYTE FrameCtrl; //... frame control field.
- BYTE DstAddr[MAX_ADDR_LENGTH]; //... destination address.
- BYTE SrcAddr[MAX_ADDR_LENGTH]; //... source address.
- BYTE Info[0]; //... information field.
- } FDDI;
-
- #define FDDI_SIZE sizeof(FDDI)
-
- typedef FDDI *LPFDDI;
- typedef FDDI UNALIGNED *ULPFDDI;
-
- #define FDDI_HEADER_LENGTH 13
-
- #define FDDI_TYPE_MAC 0x00 //... MAC frame.
- #define FDDI_TYPE_LLC 0x10 //... LLC frame.
- #define FDDI_TYPE_LONG_ADDRESS 0x40 //... 48-bit address
-
- //=============================================================================
- // LLC (802.2)
- //=============================================================================
-
- typedef struct _LLC
- {
- BYTE dsap;
- BYTE ssap;
-
- struct
- {
- union
- {
- BYTE Command;
- BYTE NextSend;
- };
-
- union
- {
- BYTE NextRecv;
- BYTE Data[1];
- };
- } ControlField;
- } LLC;
-
- typedef LLC *LPLLC;
- typedef LLC UNALIGNED *ULPLLC;
-
- #define LLC_SIZE sizeof(LLC);
-
- //=============================================================================
- // Helper macros.
- //=============================================================================
-
- #define IsRoutingInfoPresent(f) ((((ULPTOKENRING) (f))->SrcAddr[0] & TOKENRING_SA_ROUTING_INFO) ? TRUE : FALSE)
-
- #define GetRoutingInfoLength(f) (IsRoutingInfoPresent(f) \
- ? (((ULPTOKENRING) (f))->RoutingInfo[0] & TOKENRING_RC_LENGTHMASK) : 0)
-
- #pragma pack()
- #pragma option pop /*P_O_Pop*/
- #endif
-