/* * Copyright (c) 2016 Intel Corporation. * * SPDX-License-Identifier: Apache-2.0 */ /** * @file * @brief Public API for network link address */ #ifndef __NET_LINKADDR_H__ #define __NET_LINKADDR_H__ #include #include #ifdef __cplusplus extern "C" { #endif /** * @brief Hardware link address structure * * Used to hold the link address information */ struct net_linkaddr { /** The array of byte representing the address */ uint8_t *addr; /** Length of that address array */ uint8_t len; }; /** * @brief Hardware link address structure * * Used to hold the link address information. This variant is needed * when we have to store the link layer address. * Note that you cannot cast this to net_linkaddr as they store * different things. */ struct net_linkaddr_storage { /** The real length of the ll address. */ uint8_t len; union { /** The array of bytes representing the address */ uint8_t addr[0]; struct { /* The integer array allocate total of 8 bytes * that can hold currently all the supported * link layer addresses. These int's can be * used when comparing lladdr instead of using * memcmp() */ uint32_t storage[2]; }; }; }; /** * @brief Compare two link layer addresses. * * @param lladdr1 Pointer to a link layer address * @param lladdr2 Pointer to a link layer address * * @return True if the addresses are the same, false otherwise. */ 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); } #ifdef __cplusplus } #endif #endif /* __NET_LINKADDR_H__ */