Zephyr API Documentation 4.3.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
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
11
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
31
33#if CONFIG_NET_LINK_ADDR_CUSTOM_LENGTH > 0
34#define NET_LINK_ADDR_MAX_LENGTH CONFIG_NET_LINK_ADDR_CUSTOM_LENGTH
35#elif defined(CONFIG_NET_L2_PHY_IEEE802154) || defined(CONFIG_NET_L2_PPP)
36#define NET_LINK_ADDR_MAX_LENGTH 8
37#else
38#define NET_LINK_ADDR_MAX_LENGTH 6
39#endif
40
61
82
91static inline bool net_linkaddr_cmp(struct net_linkaddr *lladdr1,
92 struct net_linkaddr *lladdr2)
93{
94 if (!lladdr1 || !lladdr2) {
95 return false;
96 }
97
98 if (lladdr1->len != lladdr2->len) {
99 return false;
100 }
101
102 return !memcmp(lladdr1->addr, lladdr2->addr, lladdr1->len);
103}
104
115static inline int net_linkaddr_set(struct net_linkaddr *lladdr,
116 const uint8_t *new_addr,
117 uint8_t new_len)
118{
119 if (lladdr == NULL || new_addr == NULL) {
120 return -EINVAL;
121 }
122
123 if (new_len > NET_LINK_ADDR_MAX_LENGTH) {
124 return -EMSGSIZE;
125 }
126
127 lladdr->len = new_len;
128 memcpy(lladdr->addr, new_addr, new_len);
129
130 return 0;
131}
132
140static inline int net_linkaddr_copy(struct net_linkaddr *dst,
141 const struct net_linkaddr *src)
142{
143 if (dst == NULL || src == NULL) {
144 return -EINVAL;
145 }
146
147 if (src->len > NET_LINK_ADDR_MAX_LENGTH) {
148 return -EMSGSIZE;
149 }
150
151 dst->type = src->type;
152 dst->len = src->len;
153 memcpy(dst->addr, src->addr, src->len);
154
155 return 0;
156}
157
168static inline int net_linkaddr_create(struct net_linkaddr *lladdr,
169 const uint8_t *addr, uint8_t len,
170 enum net_link_type type)
171{
172 if (lladdr == NULL) {
173 return -EINVAL;
174 }
175
176 if (len > NET_LINK_ADDR_MAX_LENGTH) {
177 return -EMSGSIZE;
178 }
179
180 if (addr == NULL) {
182 } else {
183 memcpy(lladdr->addr, addr, len);
184 }
185
186 lladdr->type = type;
187 lladdr->len = len;
188
189 return 0;
190}
191
198static inline int net_linkaddr_clear(struct net_linkaddr *lladdr)
199{
200 return net_linkaddr_create(lladdr, NULL, 0, NET_LINK_UNKNOWN);
201}
202
206
207#ifdef __cplusplus
208}
209#endif
210
211#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:140
net_link_type
Type of the link address.
Definition net_linkaddr.h:47
static bool net_linkaddr_cmp(struct net_linkaddr *lladdr1, struct net_linkaddr *lladdr2)
Compare two link layer addresses.
Definition net_linkaddr.h:91
static int net_linkaddr_clear(struct net_linkaddr *lladdr)
Clear link address.
Definition net_linkaddr.h:198
#define NET_LINK_ADDR_MAX_LENGTH
Maximum length of the link address.
Definition net_linkaddr.h:38
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:115
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:168
@ NET_LINK_UNKNOWN
Unknown link address type.
Definition net_linkaddr.h:49
@ NET_LINK_IEEE802154
IEEE 802.15.4 link address.
Definition net_linkaddr.h:51
@ NET_LINK_DUMMY
Dummy link address.
Definition net_linkaddr.h:57
@ NET_LINK_ETHERNET
Ethernet link address.
Definition net_linkaddr.h:55
@ NET_LINK_CANBUS_RAW
CANBUS link address.
Definition net_linkaddr.h:59
@ NET_LINK_BLUETOOTH
Bluetooth IPSP link address.
Definition net_linkaddr.h:53
#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:72
uint8_t addr[6]
The array of bytes representing the address.
Definition net_linkaddr.h:80
uint8_t type
What kind of address is this for.
Definition net_linkaddr.h:74
uint8_t len
The real length of the ll address.
Definition net_linkaddr.h:77