lldp.h 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. /*====================================================================*
  2. *
  3. * Copyright (c) 2013 Qualcomm Atheros, Inc.
  4. *
  5. * All rights reserved.
  6. *
  7. *====================================================================*/
  8. /*====================================================================*
  9. *
  10. * lldp.h - link level discovery protocol definitions and declarations;
  11. *
  12. * this file contains defintions for TLV structures used in the
  13. * QCA Manifiest and in IEEE 802.1AB-2009 Link Layer Discovery
  14. * Protocol;
  15. *
  16. *--------------------------------------------------------------------*/
  17. #ifndef LLDP_HEADER
  18. #define LLDP_HEADER
  19. /*====================================================================*
  20. * system header files;
  21. *--------------------------------------------------------------------*/
  22. #include <stdint.h>
  23. /*====================================================================*
  24. * custom header files;
  25. *--------------------------------------------------------------------*/
  26. #include "../tools/endian.h"
  27. #include "../ether/ether.h"
  28. /*====================================================================*
  29. * constants and macros;
  30. *--------------------------------------------------------------------*/
  31. #ifndef BROADCAST
  32. #define BROADCAST "FF:FF:FF:FF:FF:FF"
  33. #endif
  34. #ifndef ETH_P_LLDP
  35. #define ETH_P_LLDP 0x88CC
  36. #endif
  37. #define LLDP_NEAREST_BRIDGE "01:80:C2:00:00:0E"
  38. #define LLDP_NEAREST_NON_TMPR_BRIDGE "01:80:C2:00:00:03"
  39. #define LLDP_NEAREST_CUSTOMER_BRIDGE "01:80:C2:00:00:00"
  40. #define LLDP_ADDRESSES 4
  41. #define LLDP_TIMER (~0)
  42. #define LLDP_BAD_MAC "Have '%s' but want MAC address"
  43. #define TLV_TYPE_BITS 7
  44. #define TLV_SIZE_BITS 9
  45. #define TLV_TYPE_MASK (~(~0 << TLV_TYPE_BITS))
  46. #define TLV_SIZE_MASK (~(~0 << TLV_SIZE_BITS))
  47. #define TLV_TYPE(tlv) ((ntohs (tlv->head) >> TLV_SIZE_BITS) & TLV_TYPE_MASK)
  48. #define TLV_SIZE(tlv) ((ntohs (tlv->head)) & TLV_SIZE_MASK)
  49. #define TLV_DATA(tlv) ((char *)(tlv) + sizeof(tlv->head))
  50. #define TLV_OS_DATA(tlv) (TLV_DATA (tlv) + 4)
  51. #define TLV_HEAD(type, size) htons ((((uint16_t)(type) & TLV_TYPE_MASK) << TLV_SIZE_BITS) | ((uint16_t)(size) & TLV_SIZE_MASK))
  52. #define TLV_IEEE_EOLLDPPDU 0
  53. #define TLV_IEEE_CHASSIS_ID 1
  54. #define TLV_IEEE_PORT_ID 2
  55. #define TLV_IEEE_TIME_TO_LIVE 3
  56. #define TLV_IEEE_PORT_DESCRIPTION 4
  57. #define TLV_IEEE_SYSTEM_NAME 5
  58. #define TLV_IEEE_SYSTEM_DESCRIPTION 6
  59. #define TLV_IEEE_SYSTEM_CAPABILITIES 7
  60. #define TLV_IEEE_MANAGEMENT_ADDRESS 8
  61. #define TLV_IEEE_ORG_SPECIFIC 127
  62. #define TLV_OS_MANUFACTURER 1
  63. #define TLV_OS_HARDWARE_MODEL 2
  64. #define TLV_OS_SERIAL_NUMBER 3
  65. #define TLV_OS_HOST_MAC 4
  66. #define TLV_OS_PLC_MAC 5
  67. #define TLV_OS_WIFI_MAC 6
  68. #define TLV_OS_WIFI_IP 7
  69. /*====================================================================*
  70. * variables;
  71. *--------------------------------------------------------------------*/
  72. typedef struct tlv
  73. {
  74. uint16_t head;
  75. uint8_t data [0];
  76. }
  77. tlv;
  78. typedef struct tlv_id
  79. {
  80. uint8_t subtype;
  81. uint8_t data [0];
  82. }
  83. tlv_id;
  84. typedef struct tlv_os
  85. {
  86. uint16_t head;
  87. uint8_t OUI [3];
  88. uint8_t subtype;
  89. uint8_t data [0];
  90. }
  91. tlv_os;
  92. /*====================================================================*
  93. * functions;
  94. *--------------------------------------------------------------------*/
  95. void * TLVPack (void const * memory, size_t extent, uint8_t type, uint16_t length, void const * value);
  96. void * TLVPackOS (void const * memory, size_t extent, uint8_t type, uint16_t length, void const * value);
  97. void * TLVPick (void const * memory, size_t extent, uint8_t type);
  98. void TLVPeek (void const * memory, size_t extent);
  99. /*====================================================================*
  100. *
  101. *--------------------------------------------------------------------*/
  102. #endif