- //=============================================================================
- // Microsoft (R) Network Monitor (tm).
- // Copyright (C) 1991-1999. All rights reserved.
- //
- // MODULE: nmframe.h
- //=============================================================================
- #if !defined(_NMFRAME_)
- #define _NMFRAME_
- #ifdef __cplusplus
- extern "C"
- {
- #endif
- #pragma pack(1)
- #define MAX_ADDR_LENGTH 6
- //=============================================================================
- // 802.3 and ETHERNET MAC structure.
- //=============================================================================
- #pragma warning(disable:4200)
- 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 warning(default:4200)
- #pragma pack()
- #ifdef __cplusplus
- }
- #endif
- #endif