home *** CD-ROM | disk | FTP | other *** search
/ PC Format (South-Africa) 2001 June / PCFJune.iso / Xenon / C++ / FreeCommandLineTools.exe / Include / frame.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-01-31  |  4.4 KB  |  146 lines

  1.  
  2. //=============================================================================
  3. //  Microsoft (R) Bloodhound (tm). Copyright (C) 1991-1992.
  4. //
  5. //  MODULE: frame.h
  6. //=============================================================================
  7.  
  8. #if !defined(_FRAME_)
  9. #pragma option push -b -a8 -pc -A- /*P_O_Push*/
  10.  
  11. #define _FRAME_
  12.  
  13. #pragma pack(1)
  14.  
  15. #define MAX_ADDR_LENGTH     6
  16.  
  17. //=============================================================================
  18. //  802.3 and ETHERNET MAC structure.
  19. //=============================================================================
  20.  
  21. typedef struct _ETHERNET
  22. {
  23.     BYTE    DstAddr[MAX_ADDR_LENGTH];   //... destination address.
  24.     BYTE    SrcAddr[MAX_ADDR_LENGTH];   //... source address.
  25.     union
  26.     {
  27.         WORD    Length;                 //... 802.3 length field.
  28.         WORD    Type;                   //... Ethernet type field.
  29.     };
  30.     BYTE    Info[0];                    //... information field.
  31. } ETHERNET;
  32.  
  33. typedef ETHERNET *LPETHERNET;
  34.  
  35. typedef ETHERNET UNALIGNED *ULPETHERNET;
  36.  
  37. #define ETHERNET_SIZE   sizeof(ETHERNET)
  38.  
  39. #define ETHERNET_HEADER_LENGTH  14
  40.  
  41. #define ETHERNET_DATA_LENGTH    0x05DC  //... 1500. Max ethernet data length.
  42. #define ETHERNET_FRAME_LENGTH   0x05EA  //... 1514. Max ethernet frame length.
  43. #define ETHERNET_FRAME_TYPE     0x0600  //... 1536. First ethernet type assigned.
  44.  
  45. //=============================================================================
  46. //  802.5 (TOKENRING) MAC structure.
  47. //=============================================================================
  48.  
  49. typedef struct _TOKENRING
  50. {
  51.     BYTE    AccessCtrl;                 //... access control field.
  52.     BYTE    FrameCtrl;                  //... frame control field.
  53.     BYTE    DstAddr[MAX_ADDR_LENGTH];   //... destination address.
  54.     BYTE    SrcAddr[MAX_ADDR_LENGTH];   //... source address.
  55.     union
  56.     {
  57.         BYTE    Info[0];                //... information field.
  58.         WORD    RoutingInfo[0];         //... routing information field.
  59.     };
  60. } TOKENRING;
  61.  
  62. typedef TOKENRING *LPTOKENRING;
  63. typedef TOKENRING UNALIGNED *ULPTOKENRING;
  64.  
  65. #define TOKENRING_SIZE  sizeof(TOKENRING)
  66.  
  67. #define TOKENRING_HEADER_LENGTH     14
  68.  
  69. #define TOKENRING_SA_ROUTING_INFO   0x0080
  70. #define TOKENRING_SA_LOCAL          0x0040
  71.  
  72. #define TOKENRING_DA_LOCAL          0x0040
  73. #define TOKENRING_DA_GROUP          0x0080
  74.  
  75. #define TOKENRING_RC_LENGTHMASK     0x001F
  76. #define TOKENRING_BC_MASK           0x00E0
  77.  
  78. #define TOKENRING_TYPE_MAC          0x0000  //... MAC frame.
  79. #define TOKENRING_TYPE_LLC          0x0040  //... LLC frame.
  80.  
  81. //=============================================================================
  82. //  FDDI MAC structure.
  83. //=============================================================================
  84.  
  85. typedef struct _FDDI
  86. {
  87.     BYTE    FrameCtrl;                  //... frame control field.
  88.     BYTE    DstAddr[MAX_ADDR_LENGTH];   //... destination address.
  89.     BYTE    SrcAddr[MAX_ADDR_LENGTH];   //... source address.
  90.     BYTE    Info[0];                    //... information field.
  91. } FDDI;
  92.  
  93. #define FDDI_SIZE       sizeof(FDDI)
  94.  
  95. typedef FDDI *LPFDDI;
  96. typedef FDDI UNALIGNED *ULPFDDI;
  97.  
  98. #define FDDI_HEADER_LENGTH  13
  99.  
  100. #define FDDI_TYPE_MAC               0x00  //... MAC frame.
  101. #define FDDI_TYPE_LLC               0x10  //... LLC frame.
  102. #define FDDI_TYPE_LONG_ADDRESS      0x40  //... 48-bit address
  103.  
  104. //=============================================================================
  105. //  LLC (802.2)
  106. //=============================================================================
  107.  
  108. typedef struct _LLC
  109. {
  110.     BYTE    dsap;
  111.     BYTE    ssap;
  112.  
  113.     struct
  114.     {
  115.         union
  116.         {
  117.             BYTE Command;
  118.             BYTE NextSend;
  119.         };
  120.  
  121.         union
  122.         {
  123.             BYTE NextRecv;
  124.             BYTE Data[1];
  125.         };
  126.     } ControlField;
  127. } LLC;
  128.  
  129. typedef LLC *LPLLC;
  130. typedef LLC UNALIGNED *ULPLLC;
  131.  
  132. #define LLC_SIZE    sizeof(LLC);
  133.  
  134. //=============================================================================
  135. //  Helper macros.
  136. //=============================================================================
  137.  
  138. #define IsRoutingInfoPresent(f) ((((ULPTOKENRING) (f))->SrcAddr[0] & TOKENRING_SA_ROUTING_INFO) ? TRUE : FALSE)
  139.  
  140. #define GetRoutingInfoLength(f) (IsRoutingInfoPresent(f) \
  141.                                  ? (((ULPTOKENRING) (f))->RoutingInfo[0] & TOKENRING_RC_LENGTHMASK) : 0)
  142.  
  143. #pragma pack()
  144. #pragma option pop /*P_O_Pop*/
  145. #endif
  146.