123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268 |
- #ifndef ZEPHYR_INCLUDE_NET_LLDP_H_
- #define ZEPHYR_INCLUDE_NET_LLDP_H_
- #ifdef __cplusplus
- extern "C" {
- #endif
- #define LLDP_TLV_GET_LENGTH(type_length) (type_length & BIT_MASK(9))
- #define LLDP_TLV_GET_TYPE(type_length) ((uint8_t)(type_length >> 9))
- #define NET_LLDP_END_LLDPDU_VALUE 0x0000
- #if defined(CONFIG_NET_LLDP_CHASSIS_ID_SUBTYPE)
- #if (CONFIG_NET_LLDP_CHASSIS_ID_SUBTYPE == 4)
- #define NET_LLDP_CHASSIS_ID_VALUE \
- { \
- CONFIG_NET_LLDP_CHASSIS_ID_MAC0, \
- CONFIG_NET_LLDP_CHASSIS_ID_MAC1, \
- CONFIG_NET_LLDP_CHASSIS_ID_MAC2, \
- CONFIG_NET_LLDP_CHASSIS_ID_MAC3, \
- CONFIG_NET_LLDP_CHASSIS_ID_MAC4, \
- CONFIG_NET_LLDP_CHASSIS_ID_MAC5 \
- }
- #define NET_LLDP_CHASSIS_ID_VALUE_LEN (6)
- #else
- #define NET_LLDP_CHASSIS_ID_VALUE CONFIG_NET_LLDP_CHASSIS_ID
- #define NET_LLDP_CHASSIS_ID_VALUE_LEN (sizeof(CONFIG_NET_LLDP_CHASSIS_ID) - 1)
- #endif
- #else
- #define NET_LLDP_CHASSIS_ID_VALUE 0
- #define NET_LLDP_CHASSIS_ID_VALUE_LEN 0
- #endif
- #if defined(CONFIG_NET_LLDP_PORT_ID_SUBTYPE)
- #if (CONFIG_NET_LLDP_PORT_ID_SUBTYPE == 3)
- #define NET_LLDP_PORT_ID_VALUE \
- { \
- CONFIG_NET_LLDP_PORT_ID_MAC0, \
- CONFIG_NET_LLDP_PORT_ID_MAC1, \
- CONFIG_NET_LLDP_PORT_ID_MAC2, \
- CONFIG_NET_LLDP_PORT_ID_MAC3, \
- CONFIG_NET_LLDP_PORT_ID_MAC4, \
- CONFIG_NET_LLDP_PORT_ID_MAC5 \
- }
- #define NET_LLDP_PORT_ID_VALUE_LEN (6)
- #else
- #define NET_LLDP_PORT_ID_VALUE CONFIG_NET_LLDP_PORT_ID
- #define NET_LLDP_PORT_ID_VALUE_LEN (sizeof(CONFIG_NET_LLDP_PORT_ID) - 1)
- #endif
- #else
- #define NET_LLDP_PORT_ID_VALUE 0
- #define NET_LLDP_PORT_ID_VALUE_LEN 0
- #endif
- #define NET_LLDP_CHASSIS_ID_TLV_LEN (NET_LLDP_CHASSIS_ID_VALUE_LEN + 1)
- #define NET_LLDP_PORT_ID_TLV_LEN (NET_LLDP_PORT_ID_VALUE_LEN + 1)
- #define NET_LLDP_TTL_TLV_LEN (2)
- #if defined(CONFIG_NET_LLDP_TX_INTERVAL) && defined(CONFIG_NET_LLDP_TX_HOLD)
- #define NET_LLDP_TTL \
- MIN((CONFIG_NET_LLDP_TX_INTERVAL * CONFIG_NET_LLDP_TX_HOLD) + 1, 65535)
- #endif
- struct net_if;
- enum net_lldp_tlv_type {
- LLDP_TLV_END_LLDPDU = 0,
- LLDP_TLV_CHASSIS_ID = 1,
- LLDP_TLV_PORT_ID = 2,
- LLDP_TLV_TTL = 3,
- LLDP_TLV_PORT_DESC = 4,
- LLDP_TLV_SYSTEM_NAME = 5,
- LLDP_TLV_SYSTEM_DESC = 6,
- LLDP_TLV_SYSTEM_CAPABILITIES = 7,
- LLDP_TLV_MANAGEMENT_ADDR = 8,
-
- LLDP_TLV_ORG_SPECIFIC = 127,
- };
- struct net_lldp_chassis_tlv {
-
- uint16_t type_length;
-
- uint8_t subtype;
-
- uint8_t value[NET_LLDP_CHASSIS_ID_VALUE_LEN];
- } __packed;
- struct net_lldp_port_tlv {
-
- uint16_t type_length;
-
- uint8_t subtype;
-
- uint8_t value[NET_LLDP_PORT_ID_VALUE_LEN];
- } __packed;
- struct net_lldp_time_to_live_tlv {
-
- uint16_t type_length;
-
- uint16_t ttl;
- } __packed;
- struct net_lldpdu {
- struct net_lldp_chassis_tlv chassis_id;
- struct net_lldp_port_tlv port_id;
- struct net_lldp_time_to_live_tlv ttl;
- } __packed;
- int net_lldp_config(struct net_if *iface, const struct net_lldpdu *lldpdu);
- int net_lldp_config_optional(struct net_if *iface, const uint8_t *tlv,
- size_t len);
- void net_lldp_init(void);
- typedef enum net_verdict (*net_lldp_recv_cb_t)(struct net_if *iface,
- struct net_pkt *pkt);
- int net_lldp_register_callback(struct net_if *iface, net_lldp_recv_cb_t cb);
- enum net_verdict net_lldp_recv(struct net_if *iface, struct net_pkt *pkt);
- #if defined(CONFIG_NET_LLDP)
- int net_lldp_set_lldpdu(struct net_if *iface);
- #else
- #define net_lldp_set_lldpdu(iface)
- #endif
- #if defined(CONFIG_NET_LLDP)
- void net_lldp_unset_lldpdu(struct net_if *iface);
- #else
- #define net_lldp_unset_lldpdu(iface)
- #endif
- #ifdef __cplusplus
- }
- #endif
- #endif
|