Zephyr API Documentation 4.1.99
A Scalable Open Source RTOS
 4.1.99
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
net_linkaddr.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2016 Intel Corporation.
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
12#ifndef ZEPHYR_INCLUDE_NET_NET_LINKADDR_H_
13#define ZEPHYR_INCLUDE_NET_NET_LINKADDR_H_
14
15#include <zephyr/types.h>
16#include <stdbool.h>
17#include <errno.h>
18
19#ifdef __cplusplus
20extern "C" {
21#endif
22
33#if defined(CONFIG_NET_L2_PHY_IEEE802154) || defined(CONFIG_NET_L2_PPP)
34#define NET_LINK_ADDR_MAX_LENGTH 8
35#else
36#define NET_LINK_ADDR_MAX_LENGTH 6
37#endif
38
59
80
89static inline bool net_linkaddr_cmp(struct net_linkaddr *lladdr1,
90 struct net_linkaddr *lladdr2)
91{
92 if (!lladdr1 || !lladdr2) {
93 return false;
94 }
95
96 if (lladdr1->len != lladdr2->len) {
97 return false;
98 }
99
100 return !memcmp(lladdr1->addr, lladdr2->addr, lladdr1->len);
101}
102
113static inline int net_linkaddr_set(struct net_linkaddr *lladdr,
114 const uint8_t *new_addr,
115 uint8_t new_len)
116{
117 if (lladdr == NULL || new_addr == NULL) {
118 return -EINVAL;
119 }
120
121 if (new_len > NET_LINK_ADDR_MAX_LENGTH) {
122 return -EMSGSIZE;
123 }
124
125 lladdr->len = new_len;
126 memcpy(lladdr->addr, new_addr, new_len);
127
128 return 0;
129}
130
138static inline int net_linkaddr_copy(struct net_linkaddr *dst,
139 const struct net_linkaddr *src)
140{
141 if (dst == NULL || src == NULL) {
142 return -EINVAL;
143 }
144
145 if (src->len > NET_LINK_ADDR_MAX_LENGTH) {
146 return -EMSGSIZE;
147 }
148
149 dst->type = src->type;
150 dst->len = src->len;
151 memcpy(dst->addr, src->addr, src->len);
152
153 return 0;
154}
155
166static inline int net_linkaddr_create(struct net_linkaddr *lladdr,
167 const uint8_t *addr, uint8_t len,
168 enum net_link_type type)
169{
170 if (lladdr == NULL) {
171 return -EINVAL;
172 }
173
174 if (len > NET_LINK_ADDR_MAX_LENGTH) {
175 return -EMSGSIZE;
176 }
177
178 if (addr == NULL) {
180 } else {
181 memcpy(lladdr->addr, addr, len);
182 }
183
184 lladdr->type = type;
185 lladdr->len = len;
186
187 return 0;
188}
189
196static inline int net_linkaddr_clear(struct net_linkaddr *lladdr)
197{
198 return net_linkaddr_create(lladdr, NULL, 0, NET_LINK_UNKNOWN);
199}
200
205#ifdef __cplusplus
206}
207#endif
208
209#endif /* ZEPHYR_INCLUDE_NET_NET_LINKADDR_H_ */
System error numbers.
static int net_linkaddr_copy(struct net_linkaddr *dst, const struct net_linkaddr *src)
Copy link address from one variable to another.
Definition net_linkaddr.h:138
net_link_type
Type of the link address.
Definition net_linkaddr.h:45
static bool net_linkaddr_cmp(struct net_linkaddr *lladdr1, struct net_linkaddr *lladdr2)
Compare two link layer addresses.
Definition net_linkaddr.h:89
static int net_linkaddr_clear(struct net_linkaddr *lladdr)
Clear link address.
Definition net_linkaddr.h:196
#define NET_LINK_ADDR_MAX_LENGTH
Maximum length of the link address.
Definition net_linkaddr.h:36
static int net_linkaddr_set(struct net_linkaddr *lladdr, const uint8_t *new_addr, uint8_t new_len)
Set the member data of a link layer address storage structure.
Definition net_linkaddr.h:113
static int net_linkaddr_create(struct net_linkaddr *lladdr, const uint8_t *addr, uint8_t len, enum net_link_type type)
Create a link address structure.
Definition net_linkaddr.h:166
@ NET_LINK_UNKNOWN
Unknown link address type.
Definition net_linkaddr.h:47
@ NET_LINK_IEEE802154
IEEE 802.15.4 link address.
Definition net_linkaddr.h:49
@ NET_LINK_DUMMY
Dummy link address.
Definition net_linkaddr.h:55
@ NET_LINK_ETHERNET
Ethernet link address.
Definition net_linkaddr.h:53
@ NET_LINK_CANBUS_RAW
CANBUS link address.
Definition net_linkaddr.h:57
@ NET_LINK_BLUETOOTH
Bluetooth IPSP link address.
Definition net_linkaddr.h:51
#define EINVAL
Invalid argument.
Definition errno.h:60
#define EMSGSIZE
Message size.
Definition errno.h:106
#define NULL
Definition iar_missing_defs.h:20
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
void * memset(void *buf, int c, size_t n)
int memcmp(const void *m1, const void *m2, size_t n)
void * memcpy(void *ZRESTRICT d, const void *ZRESTRICT s, size_t n)
Hardware link address structure.
Definition net_linkaddr.h:70
uint8_t addr[6]
The array of bytes representing the address.
Definition net_linkaddr.h:78
uint8_t type
What kind of address is this for.
Definition net_linkaddr.h:72
uint8_t len
The real length of the ll address.
Definition net_linkaddr.h:75