l2util.h
Go to the documentation of this file.
1 /*
2  * SPDX-FileCopyrightText: 2018 Freie Universität Berlin
3  * SPDX-License-Identifier: LGPL-2.1-only
4  */
5 
6 #pragma once
7 
25 #include <stdint.h>
26 
27 #include "net/eui64.h"
28 #include "net/ndp.h"
29 
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33 
34 #define L2UTIL_ADDR_MAX_LEN (8U)
54 int l2util_eui64_from_addr(int dev_type, const uint8_t *addr, size_t addr_len,
55  eui64_t *eui64);
56 
75 int l2util_ipv6_iid_from_addr(int dev_type,
76  const uint8_t *addr, size_t addr_len,
77  eui64_t *iid);
78 
103 int l2util_ipv6_iid_to_addr(int dev_type, const eui64_t *iid, uint8_t *addr);
104 
131  const ndp_opt_t *opt);
132 
149  const ipv6_addr_t *ipv6_group,
150  uint8_t *l2_group);
151 
168 char *l2util_addr_to_str(const uint8_t *addr, size_t addr_len, char *out);
169 
188 size_t l2util_addr_from_str(const char *str, uint8_t *out);
189 
200 static inline bool l2util_addr_equal(const uint8_t *addr_a, uint8_t addr_a_len,
201  const uint8_t *addr_b, uint8_t addr_b_len)
202 {
203  if (addr_a_len != addr_b_len) {
204  return false;
205  }
206 
207  return memcmp(addr_a, addr_b, addr_a_len) == 0;
208 }
209 
210 #ifdef __cplusplus
211 }
212 #endif
213 
EUI-64 data type definition.
int l2util_eui64_from_addr(int dev_type, const uint8_t *addr, size_t addr_len, eui64_t *eui64)
Converts a given hardware address to an EUI-64.
int l2util_ndp_addr_len_from_l2ao(int dev_type, const ndp_opt_t *opt)
Derives the length of the link-layer address in an NDP link-layer address option from that option's l...
int l2util_ipv6_iid_from_addr(int dev_type, const uint8_t *addr, size_t addr_len, eui64_t *iid)
Converts a given hardware address to an IPv6 IID.
char * l2util_addr_to_str(const uint8_t *addr, size_t addr_len, char *out)
Converts a hardware address to a human readable string.
size_t l2util_addr_from_str(const char *str, uint8_t *out)
Parses a string of colon-separated hexadecimals to a hardware address.
int l2util_ipv6_iid_to_addr(int dev_type, const eui64_t *iid, uint8_t *addr)
Converts an IPv6 IID to a hardware address.
int l2util_ipv6_group_to_l2_group(int dev_type, const ipv6_addr_t *ipv6_group, uint8_t *l2_group)
Converts an IPv6 multicast address to a multicast address of the respective link layer.
static bool l2util_addr_equal(const uint8_t *addr_a, uint8_t addr_a_len, const uint8_t *addr_b, uint8_t addr_b_len)
Checks if two l2 addresses are equal.
Definition: l2util.h:200
IPv6 neighbor discovery message type definitions.
General NDP option format.
Definition: ndp.h:295
Data type to represent an EUI-64.
Definition: eui64.h:52
Data type to represent an IPv6 address.
Definition: addr.h:64