ethernet.h
上传用户:yuanda199
上传日期:2022-06-26
资源大小:412k
文件大小:3k
源码类别:

VxWorks

开发平台:

C/C++

  1. /*
  2.     Copyright 2001, Broadcom Corporation
  3.     All Rights Reserved.
  4.     
  5.     This is UNPUBLISHED PROPRIETARY SOURCE CODE of Broadcom Corporation;
  6.     the contents of this file may not be disclosed to third parties, copied or
  7.     duplicated in any form, in whole or in part, without the prior written
  8.     permission of Broadcom Corporation.
  9. */
  10. /*******************************************************************************
  11.  * $Id: ethernet.h,v 1.1 Broadcom SDK $
  12.  * From FreeBSD 2.2.7: Fundamental constants relating to ethernet.
  13.  ******************************************************************************/
  14. #ifndef _NET_ETHERNET_H_ /* use native BSD ethernet.h when available */
  15. #define _NET_ETHERNET_H_
  16. #ifndef _TYPEDEFS_H_
  17. #include "hnbutypedefs.h"
  18. #endif
  19. #if defined(__arm) && defined(__GNUC__)
  20. #define PACKED __attribute__((packed))
  21. #else
  22. #define PACKED
  23. #endif
  24. /*
  25.  * The number of bytes in an ethernet (MAC) address.
  26.  */
  27. #define ETHER_ADDR_LEN 6
  28. /*
  29.  * The number of bytes in the type field.
  30.  */
  31. #define ETHER_TYPE_LEN 2
  32. /*
  33.  * The number of bytes in the trailing CRC field.
  34.  */
  35. #define ETHER_CRC_LEN 4
  36. /*
  37.  * The length of the combined header.
  38.  */
  39. #define ETHER_HDR_LEN (ETHER_ADDR_LEN*2+ETHER_TYPE_LEN)
  40. /*
  41.  * The minimum packet length.
  42.  */
  43. #define ETHER_MIN_LEN 64
  44. /*
  45.  * The minimum packet user data length.
  46.  */
  47. #define ETHER_MIN_DATA 46
  48. /*
  49.  * The maximum packet length.
  50.  */
  51. #define ETHER_MAX_LEN 1518
  52. /*
  53.  * The maximum packet user data length.
  54.  */
  55. #define ETHER_MAX_DATA 1500
  56. /*
  57.  * Used to uniquely identify a 802.1q VLAN-tagged header.
  58.  */
  59. #define VLAN_TAG 0x8100
  60. /*
  61.  * Located after dest & src address in ether header.
  62.  */
  63. #define VLAN_FIELDS_OFFSET (ETHER_ADDR_LEN * 2)
  64. /*
  65.  * 4 bytes of vlan field info.
  66.  */
  67. #define VLAN_FIELDS_SIZE 4
  68. /* location of pri bits in 16-bit vlan fields */
  69. #define VLAN_PRI_SHIFT 13
  70. /* 3 bits of priority */
  71. #define VLAN_PRI_MASK 7
  72. /* 802.1X ethertype */
  73. #define ETHER_TYPE_802_1X 0x888e
  74. /*
  75.  * A macro to validate a length with
  76.  */
  77. #define ETHER_IS_VALID_LEN(foo)
  78. ((foo) >= ETHER_MIN_LEN && (foo) <= ETHER_MAX_LEN)
  79. #ifndef __INCif_etherh /* Quick and ugly hack for VxWorks */
  80. /*
  81.  * Structure of a 10Mb/s Ethernet header.
  82.  */
  83. struct ether_header {
  84. uint8 ether_dhost[ETHER_ADDR_LEN];
  85. uint8 ether_shost[ETHER_ADDR_LEN];
  86. uint16 ether_type;
  87. } PACKED ;
  88. /*
  89.  * Structure of a 48-bit Ethernet address.
  90.  */
  91. struct ether_addr {
  92. uint8 octet[ETHER_ADDR_LEN];
  93. } PACKED ;
  94. #elif VX_BSD4_3
  95. /*
  96.  * Structure of a 48-bit Ethernet address.
  97.  */
  98. struct ether_addr {
  99. uint8 octet[ETHER_ADDR_LEN];
  100. } PACKED ;
  101. #endif
  102. /*
  103.  * Takes a pointer, returns true if a 48-bit multicast address
  104.  * (including broadcast, since it is all ones)
  105.  */
  106. #define ETHER_ISMULTI(ea) (((uint8 *)(ea))[0] & 1)
  107. /*
  108.  * Takes a pointer, returns true if a 48-bit broadcast (all ones)
  109.  */
  110. #define ETHER_ISBCAST(ea) ((((uint8 *)(ea))[0] &
  111.     ((uint8 *)(ea))[1] &
  112.     ((uint8 *)(ea))[2] &
  113.     ((uint8 *)(ea))[3] &
  114.     ((uint8 *)(ea))[4] &
  115.     ((uint8 *)(ea))[5]) == 0xff)
  116. static const struct ether_addr ether_bcast = {{255, 255, 255, 255, 255, 255}};
  117. /*
  118.  * Takes a pointer, returns true if a 48-bit null address (all zeros)
  119.  */
  120. #define ETHER_ISNULLADDR(ea) ((((uint8 *)(ea))[0] |
  121.     ((uint8 *)(ea))[1] |
  122.     ((uint8 *)(ea))[2] |
  123.     ((uint8 *)(ea))[3] |
  124.     ((uint8 *)(ea))[4] |
  125.     ((uint8 *)(ea))[5]) == 0)
  126. #undef PACKED
  127. #endif /* _NET_ETHERNET_H_ */