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#ifdef CONFIG_NET_L2_IEEE802154
34#define NET_LINK_ADDR_MAX_LENGTH 8
35#else
36#ifdef CONFIG_NET_L2_PPP
37#define NET_LINK_ADDR_MAX_LENGTH 8
38#else
39#define NET_LINK_ADDR_MAX_LENGTH 6
40#endif
41#endif
42
63
84
93static inline bool net_linkaddr_cmp(struct net_linkaddr *lladdr1,
94 struct net_linkaddr *lladdr2)
95{
96 if (!lladdr1 || !lladdr2) {
97 return false;
98 }
99
100 if (lladdr1->len != lladdr2->len) {
101 return false;
102 }
103
104 return !memcmp(lladdr1->addr, lladdr2->addr, lladdr1->len);
105}
106
117static inline int net_linkaddr_set(struct net_linkaddr *lladdr,
118 const uint8_t *new_addr,
119 uint8_t new_len)
120{
121 if (lladdr == NULL || new_addr == NULL) {
122 return -EINVAL;
123 }
124
125 if (new_len > NET_LINK_ADDR_MAX_LENGTH) {
126 return -EMSGSIZE;
127 }
128
129 lladdr->len = new_len;
130 memcpy(lladdr->addr, new_addr, new_len);
131
132 return 0;
133}
134
142static inline int net_linkaddr_copy(struct net_linkaddr *dst,
143 const struct net_linkaddr *src)
144{
145 if (dst == NULL || src == NULL) {
146 return -EINVAL;
147 }
148
149 if (src->len > NET_LINK_ADDR_MAX_LENGTH) {
150 return -EMSGSIZE;
151 }
152
153 dst->type = src->type;
154 dst->len = src->len;
155 memcpy(dst->addr, src->addr, src->len);
156
157 return 0;
158}
159
170static inline int net_linkaddr_create(struct net_linkaddr *lladdr,
171 const uint8_t *addr, uint8_t len,
172 enum net_link_type type)
173{
174 if (lladdr == NULL) {
175 return -EINVAL;
176 }
177
178 if (len > NET_LINK_ADDR_MAX_LENGTH) {
179 return -EMSGSIZE;
180 }
181
182 if (addr == NULL) {
184 } else {
185 memcpy(lladdr->addr, addr, len);
186 }
187
188 lladdr->type = type;
189 lladdr->len = len;
190
191 return 0;
192}
193
200static inline int net_linkaddr_clear(struct net_linkaddr *lladdr)
201{
202 return net_linkaddr_create(lladdr, NULL, 0, NET_LINK_UNKNOWN);
203}
204
209#ifdef __cplusplus
210}
211#endif
212
213#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:142
net_link_type
Type of the link address.
Definition net_linkaddr.h:49
static bool net_linkaddr_cmp(struct net_linkaddr *lladdr1, struct net_linkaddr *lladdr2)
Compare two link layer addresses.
Definition net_linkaddr.h:93
static int net_linkaddr_clear(struct net_linkaddr *lladdr)
Clear link address.
Definition net_linkaddr.h:200
#define NET_LINK_ADDR_MAX_LENGTH
Maximum length of the link address.
Definition net_linkaddr.h:39
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:117
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:170
@ NET_LINK_UNKNOWN
Unknown link address type.
Definition net_linkaddr.h:51
@ NET_LINK_IEEE802154
IEEE 802.15.4 link address.
Definition net_linkaddr.h:53
@ NET_LINK_DUMMY
Dummy link address.
Definition net_linkaddr.h:59
@ NET_LINK_ETHERNET
Ethernet link address.
Definition net_linkaddr.h:57
@ NET_LINK_CANBUS_RAW
CANBUS link address.
Definition net_linkaddr.h:61
@ NET_LINK_BLUETOOTH
Bluetooth IPSP link address.
Definition net_linkaddr.h:55
#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:74
uint8_t addr[6]
The array of bytes representing the address.
Definition net_linkaddr.h:82
uint8_t type
What kind of address is this for.
Definition net_linkaddr.h:76
uint8_t len
The real length of the ll address.
Definition net_linkaddr.h:79