home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / vc98 / include / frame.h < prev    next >
C/C++ Source or Header  |  1998-04-25  |  4KB  |  144 lines

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