frame.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:5k
源码类别:

模拟服务器

开发平台:

C/C++

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