123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- #ifndef ZEPHYR_INCLUDE_NET_NET_LINKADDR_H_
- #define ZEPHYR_INCLUDE_NET_NET_LINKADDR_H_
- #include <zephyr/types.h>
- #include <stdbool.h>
- #include <errno.h>
- #ifdef __cplusplus
- extern "C" {
- #endif
- #ifdef CONFIG_NET_L2_IEEE802154
- #define NET_LINK_ADDR_MAX_LENGTH 8
- #else
- #ifdef CONFIG_NET_L2_PPP
- #define NET_LINK_ADDR_MAX_LENGTH 8
- #else
- #define NET_LINK_ADDR_MAX_LENGTH 6
- #endif
- #endif
- enum net_link_type {
-
- NET_LINK_UNKNOWN = 0,
-
- NET_LINK_IEEE802154,
-
- NET_LINK_BLUETOOTH,
-
- NET_LINK_ETHERNET,
-
- NET_LINK_DUMMY,
-
- NET_LINK_CANBUS_RAW,
-
- NET_LINK_CANBUS,
- } __packed;
- struct net_linkaddr {
-
- uint8_t *addr;
-
- uint8_t len;
-
- uint8_t type;
- };
- struct net_linkaddr_storage {
-
- uint8_t type;
-
- uint8_t len;
-
- uint8_t addr[NET_LINK_ADDR_MAX_LENGTH];
- };
- static inline bool net_linkaddr_cmp(struct net_linkaddr *lladdr1,
- struct net_linkaddr *lladdr2)
- {
- if (!lladdr1 || !lladdr2) {
- return false;
- }
- if (lladdr1->len != lladdr2->len) {
- return false;
- }
- return !memcmp(lladdr1->addr, lladdr2->addr, lladdr1->len);
- }
- static inline int net_linkaddr_set(struct net_linkaddr_storage *lladdr_store,
- uint8_t *new_addr, uint8_t new_len)
- {
- if (!lladdr_store || !new_addr) {
- return -EINVAL;
- }
- if (new_len > NET_LINK_ADDR_MAX_LENGTH) {
- return -EMSGSIZE;
- }
- lladdr_store->len = new_len;
- memcpy(lladdr_store->addr, new_addr, new_len);
- return 0;
- }
- #ifdef __cplusplus
- }
- #endif
- #endif
|