13#ifndef ZEPHYR_INCLUDE_NET_NET_IP_H_
14#define ZEPHYR_INCLUDE_NET_NET_IP_H_
40#define NET_VLAN_TAG_UNSPEC 0x0fff
51#define PF_UNIX PF_LOCAL
54#define AF_UNSPEC PF_UNSPEC
55#define AF_INET PF_INET
56#define AF_INET6 PF_INET6
57#define AF_PACKET PF_PACKET
59#define AF_NET_MGMT PF_NET_MGMT
60#define AF_LOCAL PF_LOCAL
61#define AF_UNIX PF_UNIX
100#define ntohs(x) sys_be16_to_cpu(x)
108#define ntohl(x) sys_be32_to_cpu(x)
116#define ntohll(x) sys_be64_to_cpu(x)
124#define htons(x) sys_cpu_to_be16(x)
132#define htonl(x) sys_cpu_to_be32(x)
140#define htonll(x) sys_cpu_to_be64(x)
152#define NET_IPV6_ADDR_SIZE 16
165#define NET_IPV4_ADDR_SIZE 4
171#ifndef __socklen_t_defined
173#define __socklen_t_defined
210struct sockaddr_in6_ptr {
218struct sockaddr_in_ptr {
225struct sockaddr_ll_ptr {
236struct sockaddr_un_ptr {
241struct sockaddr_can_ptr {
248#if !defined(HAVE_IOVEC)
281#define ALIGN_H(x) ROUND_UP(x, __alignof__(struct cmsghdr))
284#define ALIGN_D(x) ROUND_UP(x, __alignof__(z_max_align_t))
289#if !defined(CMSG_FIRSTHDR)
295#define CMSG_FIRSTHDR(msghdr) \
296 ((msghdr)->msg_controllen >= sizeof(struct cmsghdr) ? \
297 (struct cmsghdr *)((msghdr)->msg_control) : NULL)
300#if !defined(CMSG_NXTHDR)
305#define CMSG_NXTHDR(msghdr, cmsg) \
306 (((cmsg) == NULL) ? CMSG_FIRSTHDR(msghdr) : \
307 (((uint8_t *)(cmsg) + ALIGN_H((cmsg)->cmsg_len) + \
308 ALIGN_D(sizeof(struct cmsghdr)) > \
309 (uint8_t *)((msghdr)->msg_control) + (msghdr)->msg_controllen) ? \
311 (struct cmsghdr *)((uint8_t *)(cmsg) + \
312 ALIGN_H((cmsg)->cmsg_len))))
315#if !defined(CMSG_DATA)
323#define CMSG_DATA(cmsg) ((uint8_t *)(cmsg) + ALIGN_D(sizeof(struct cmsghdr)))
326#if !defined(CMSG_SPACE)
331#define CMSG_SPACE(length) (ALIGN_D(sizeof(struct cmsghdr)) + ALIGN_H(length))
334#if !defined(CMSG_LEN)
340#define CMSG_LEN(length) (ALIGN_D(sizeof(struct cmsghdr)) + length)
347#define PACKET_BROADCAST 1
348#define PACKET_MULTICAST 2
349#define PACKET_OTHERHOST 3
350#define PACKET_OUTGOING 4
351#define PACKET_LOOPBACK 5
352#define PACKET_FASTROUTE 6
355#define ARPHRD_ETHER 1
360#if defined(CONFIG_NET_IPV4)
361#undef NET_SOCKADDR_MAX_SIZE
362#undef NET_SOCKADDR_PTR_MAX_SIZE
363#define NET_SOCKADDR_MAX_SIZE (sizeof(struct sockaddr_in))
364#define NET_SOCKADDR_PTR_MAX_SIZE (sizeof(struct sockaddr_in_ptr))
367#if defined(CONFIG_NET_SOCKETS_PACKET)
368#undef NET_SOCKADDR_MAX_SIZE
369#undef NET_SOCKADDR_PTR_MAX_SIZE
370#define NET_SOCKADDR_MAX_SIZE (sizeof(struct sockaddr_ll))
371#define NET_SOCKADDR_PTR_MAX_SIZE (sizeof(struct sockaddr_ll_ptr))
374#if defined(CONFIG_NET_IPV6)
375#undef NET_SOCKADDR_MAX_SIZE
376#define NET_SOCKADDR_MAX_SIZE (sizeof(struct sockaddr_in6))
377#if !defined(CONFIG_NET_SOCKETS_PACKET)
378#undef NET_SOCKADDR_PTR_MAX_SIZE
379#define NET_SOCKADDR_PTR_MAX_SIZE (sizeof(struct sockaddr_in6_ptr))
383#if defined(CONFIG_NET_NATIVE_OFFLOADED_SOCKETS)
384#define UNIX_PATH_MAX 108
385#undef NET_SOCKADDR_MAX_SIZE
387#define NET_SOCKADDR_MAX_SIZE (UNIX_PATH_MAX+sizeof(sa_family_t))
388#if !defined(CONFIG_NET_SOCKETS_PACKET)
389#undef NET_SOCKADDR_PTR_MAX_SIZE
390#define NET_SOCKADDR_PTR_MAX_SIZE (sizeof(struct sockaddr_un_ptr))
394#if !defined(CONFIG_NET_IPV4)
395#if !defined(CONFIG_NET_IPV6)
396#if !defined(CONFIG_NET_SOCKETS_PACKET)
397#if !defined(CONFIG_NET_NATIVE_OFFLOADED_SOCKETS)
398#define NET_SOCKADDR_MAX_SIZE (sizeof(struct sockaddr_in6))
399#define NET_SOCKADDR_PTR_MAX_SIZE (sizeof(struct sockaddr_in6_ptr))
411 char data[NET_SOCKADDR_MAX_SIZE -
sizeof(
sa_family_t)];
419 char data[NET_SOCKADDR_PTR_MAX_SIZE -
sizeof(
sa_family_t)];
423struct sockaddr_storage {
425 char data[NET_SOCKADDR_MAX_SIZE -
sizeof(
sa_family_t)];
431 char sun_path[NET_SOCKADDR_MAX_SIZE -
sizeof(
sa_family_t)];
443extern const struct in6_addr in6addr_any;
446extern const struct in6_addr in6addr_loopback;
451#define IN6ADDR_ANY_INIT { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, \
452 0, 0, 0, 0, 0, 0, 0 } } }
455#define IN6ADDR_LOOPBACK_INIT { { { 0, 0, 0, 0, 0, 0, 0, \
456 0, 0, 0, 0, 0, 0, 0, 0, 1 } } }
462#define INADDR_BROADCAST 0xffffffff
465#define INADDR_ANY_INIT { { { INADDR_ANY } } }
468#define INADDR_LOOPBACK_INIT { { { 127, 0, 0, 1 } } }
471#define INET_ADDRSTRLEN 16
475#define INET6_ADDRSTRLEN 46
480#define NET_IPV6_ADDR_LEN sizeof("xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx")
481#define NET_IPV4_ADDR_LEN sizeof("xxx.xxx.xxx.xxx")
490#if defined(CONFIG_NET_NATIVE_IPV6)
514#define NET_MAX_PRIORITIES 8
560struct net_ipv6_frag_hdr {
606static inline const char *net_addr_type2str(
enum net_addr_type type)
626#define NET_IPV6_NEXTHDR_HBHO 0
627#define NET_IPV6_NEXTHDR_DESTO 60
628#define NET_IPV6_NEXTHDR_ROUTING 43
629#define NET_IPV6_NEXTHDR_FRAG 44
630#define NET_IPV6_NEXTHDR_NONE 59
637 struct net_ipv4_hdr *ipv4;
638 struct net_ipv6_hdr *ipv6;
641union net_proto_header {
642 struct net_udp_hdr *udp;
643 struct net_tcp_hdr *tcp;
646#define NET_UDPH_LEN 8
647#define NET_TCPH_LEN 20
648#define NET_ICMPH_LEN 4
650#define NET_IPV6H_LEN 40
651#define NET_ICMPV6H_LEN NET_ICMPH_LEN
652#define NET_IPV6UDPH_LEN (NET_UDPH_LEN + NET_IPV6H_LEN)
653#define NET_IPV6TCPH_LEN (NET_TCPH_LEN + NET_IPV6H_LEN)
654#define NET_IPV6ICMPH_LEN (NET_IPV6H_LEN + NET_ICMPH_LEN)
655#define NET_IPV6_FRAGH_LEN 8
657#define NET_IPV4H_LEN 20
658#define NET_ICMPV4H_LEN NET_ICMPH_LEN
659#define NET_IPV4UDPH_LEN (NET_UDPH_LEN + NET_IPV4H_LEN)
660#define NET_IPV4TCPH_LEN (NET_TCPH_LEN + NET_IPV4H_LEN)
661#define NET_IPV4ICMPH_LEN (NET_IPV4H_LEN + NET_ICMPH_LEN)
663#define NET_IPV6H_LENGTH_OFFSET 0x04
665#define NET_IPV6_FRAGH_OFFSET_MASK 0xfff8
666#define NET_IPV4_FRAGH_OFFSET_MASK 0x1fff
667#define NET_IPV4_MORE_FRAG_MASK 0x2000
668#define NET_IPV4_DO_NOT_FRAG_MASK 0x4000
681 return UNALIGNED_GET(&addr->
s6_addr32[0]) == 0 &&
682 UNALIGNED_GET(&addr->
s6_addr32[1]) == 0 &&
683 UNALIGNED_GET(&addr->
s6_addr32[2]) == 0 &&
696 return addr->
s6_addr[0] == 0xFF;
755 if (
memcmp(addr1, addr2, bytes)) {
767 mask = (
uint8_t)((0xff << (8 - remain)) ^ 0xff) << remain;
769 return (addr1[bytes] & mask) == (addr2[bytes] & mask);
784 uint8_t bits = 128 - prefix_len;
785 uint8_t bytes = prefix_len / 8U;
790 memcpy(outaddr, inaddr, bytes);
800 mask = (
uint8_t)((0xff << (8 - remain)) ^ 0xff) << remain;
801 outaddr[bytes] = inaddr[bytes] & mask;
813 return addr->
s4_addr[0] == 127U;
825 return UNALIGNED_GET(&addr->
s_addr) == 0;
837 return (
ntohl(UNALIGNED_GET(&addr->
s_addr)) & 0xF0000000) == 0xE0000000;
849 return (
ntohl(UNALIGNED_GET(&addr->
s_addr)) & 0xFFFF0000) == 0xA9FE0000;
863 uint32_t masked_24, masked_16, masked_12, masked_10, masked_8;
865 masked_24 =
ntohl(UNALIGNED_GET(&addr->
s_addr)) & 0xFFFFFF00;
866 masked_16 = masked_24 & 0xFFFF0000;
867 masked_12 = masked_24 & 0xFFF00000;
868 masked_10 = masked_24 & 0xFFC00000;
869 masked_8 = masked_24 & 0xFF000000;
871 return masked_8 == 0x0A000000 ||
872 masked_10 == 0x64400000 ||
873 masked_12 == 0xAC100000 ||
874 masked_16 == 0xC0A80000 ||
875 masked_24 == 0xC0000200 ||
876 masked_24 == 0xC0336400 ||
877 masked_24 == 0xCB007100;
888#define net_ipaddr_copy(dest, src) \
889 UNALIGNED_PUT(UNALIGNED_GET(src), dest)
926 return UNALIGNED_GET(&addr1->
s_addr) == UNALIGNED_GET(&addr2->
s_addr);
941 (
const struct in_addr *)addr2);
1007 return addr->
s6_addr[0] == 0xFD;
1019 return (addr->
s6_addr[0] & 0xE0) == 0x20;
1036 masked_7 = masked_32 & 0xfc000000;
1038 return masked_32 == 0x20010db8 ||
1039 masked_7 == 0xfc000000;
1093#if defined(CONFIG_NET_NATIVE_IPV4)
1147 return UNALIGNED_GET(&addr->
s6_addr32[0]) == 0 &&
1148 UNALIGNED_GET(&addr->
s6_addr32[1]) == 0 &&
1149 UNALIGNED_GET(&addr->
s6_addr32[2]) == 0 &&
1150 UNALIGNED_GET(&addr->
s6_addr32[3]) == 0;
1163 return UNALIGNED_GET(&addr->
s6_addr32[0]) ==
htonl(0xff020000) &&
1164 UNALIGNED_GET(&addr->
s6_addr32[1]) == 0x00000000 &&
1183 return (addr->
s6_addr[0] == 0xff) && ((addr->
s6_addr[1] & 0xF) == scope);
1198 return (addr_1->
s6_addr[0] == 0xff) && (addr_2->
s6_addr[0] == 0xff) &&
1297 return UNALIGNED_GET(&addr->
s6_addr16[1]) ==
group->s6_addr16[1] &&
1316 static const struct in6_addr all_nodes_mcast_group = {
1317 { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1318 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 } }
1452 if (UNALIGNED_GET(&addr->
s6_addr32[0]) == 0 &&
1453 UNALIGNED_GET(&addr->
s6_addr32[1]) == 0 &&
1454 UNALIGNED_GET(&addr->
s6_addr16[5]) == 0xffff) {
1481 uint8_t *network_id,
size_t network_id_len,
1506 if (!addr || !lladdr) {
1510 switch (lladdr->
len) {
1584 return (
struct sockaddr_in6_ptr *)addr;
1598 return (
struct sockaddr_in_ptr *)addr;
1612 return (
struct sockaddr_ll_ptr *)addr;
1626 return (
struct sockaddr_can_ptr *)addr;
1656 char *dst,
size_t size);
1706 return (
int32_t)(seq1 - seq2);
1768 static const uint8_t vlan2priority[] = {
1820#if defined(CONFIG_NET_IPV6_PE)
1827 ARG_UNUSED(is_denylist);
1840#if defined(CONFIG_NET_IPV6_PE)
1855#include <zephyr/syscalls/net_ip.h>
static bool net_ipv6_is_my_addr(struct in6_addr *addr)
Check if IPv6 address is found in one of the network interfaces.
Definition net_ip.h:712
struct net_if_addr * net_if_ipv4_addr_lookup(const struct in_addr *addr, struct net_if **iface)
static void net_ipv6_addr_create(struct in6_addr *addr, uint16_t addr0, uint16_t addr1, uint16_t addr2, uint16_t addr3, uint16_t addr4, uint16_t addr5, uint16_t addr6, uint16_t addr7)
Construct an IPv6 address from eight 16-bit words.
Definition net_ip.h:1392
static bool net_ipv4_addr_cmp(const struct in_addr *addr1, const struct in_addr *addr2)
Compare two IPv4 addresses.
Definition net_ip.h:923
#define NET_IPV4_ADDR_SIZE
Binary size of the IPv4 address.
Definition net_ip.h:165
struct net_if_addr * net_if_ipv6_addr_lookup(const struct in6_addr *addr, struct net_if **iface)
static bool net_ipv6_is_addr_mcast_org(const struct in6_addr *addr)
Check if the IPv6 address is an organization scope multicast address (FFx8::).
Definition net_ip.h:1279
static enum net_priority net_vlan2priority(uint8_t priority)
Convert network packet VLAN priority to network packet priority so we can place the packet into corre...
Definition net_ip.h:1765
static int net_ipv6_pe_add_filter(struct in6_addr *addr, bool is_denylist)
Add IPv6 prefix as a privacy extension filter.
Definition net_ip.h:1823
static int32_t net_tcp_seq_cmp(uint32_t seq1, uint32_t seq2)
Compare TCP sequence numbers.
Definition net_ip.h:1704
static bool net_ipv6_is_addr_mcast(const struct in6_addr *addr)
Check if the IPv6 address is a multicast address.
Definition net_ip.h:694
#define NET_IPV6_ADDR_SIZE
Binary size of the IPv6 address.
Definition net_ip.h:152
int net_addr_pton(sa_family_t family, const char *src, void *dst)
Convert a string to IP address.
unsigned short int sa_family_t
Socket address family type.
Definition net_ip.h:168
static void net_ipv6_addr_create_ll_allrouters_mcast(struct in6_addr *addr)
Create link local allrouters multicast IPv6 address.
Definition net_ip.h:1423
char * net_addr_ntop(sa_family_t family, const void *src, char *dst, size_t size)
Convert IP address to string form.
net_addr_state
What is the current state of the network address.
Definition net_ip.h:526
static bool net_ipv4_addr_cmp_raw(const uint8_t *addr1, const uint8_t *addr2)
Compare two raw IPv4 address buffers.
Definition net_ip.h:937
static bool net_ipv6_addr_cmp(const struct in6_addr *addr1, const struct in6_addr *addr2)
Compare two IPv6 addresses.
Definition net_ip.h:952
static bool net_ipv6_is_addr_mcast_iface_all_nodes(const struct in6_addr *addr)
Check if the IPv6 address is a interface scope all nodes multicast address (FF01::1).
Definition net_ip.h:1334
static bool net_ipv4_is_my_addr(const struct in_addr *addr)
Check if the IPv4 address is assigned to any network interface in the system.
Definition net_ip.h:1126
static bool net_ipv6_is_same_mcast_scope(const struct in6_addr *addr_1, const struct in6_addr *addr_2)
Check if the IPv6 addresses have the same multicast scope (FFyx::).
Definition net_ip.h:1195
static void net_ipv6_addr_copy_raw(uint8_t *dest, const uint8_t *src)
Copy an IPv6 address raw buffer.
Definition net_ip.h:909
static bool net_ipv6_is_addr_mcast_mesh(const struct in6_addr *addr)
Check if the IPv6 address is a mesh-local scope multicast address (FFx3::).
Definition net_ip.h:1251
static struct sockaddr_in_ptr * net_sin_ptr(const struct sockaddr_ptr *addr)
Get sockaddr_in_ptr from sockaddr_ptr.
Definition net_ip.h:1596
const struct in_addr * net_ipv4_broadcast_address(void)
Return pointer to broadcast (all bits ones) IPv4 address.
static void net_ipv6_addr_prefix_mask(const uint8_t *inaddr, uint8_t *outaddr, uint8_t prefix_len)
Get the IPv6 network address via the unicast address and the prefix mask.
Definition net_ip.h:780
#define htons(x)
Convert 16-bit value from host to network byte order.
Definition net_ip.h:124
static bool net_ipv6_addr_is_v4_mapped(const struct in6_addr *addr)
Is the IPv6 address an IPv4 mapped one.
Definition net_ip.h:1450
bool net_if_ipv4_addr_mask_cmp(struct net_if *iface, const struct in_addr *addr)
static bool net_ipv6_is_addr_mcast_global(const struct in6_addr *addr)
Check if the IPv6 address is a global multicast address (FFxE::/16).
Definition net_ip.h:1209
static void net_ipv6_addr_create_ll_allnodes_mcast(struct in6_addr *addr)
Create link local allnodes multicast IPv6 address.
Definition net_ip.h:1413
static bool net_ipv6_is_addr_solicited_node(const struct in6_addr *addr)
Check if the IPv6 address is solicited node multicast address FF02:0:0:0:0:1:FFXX:XXXX defined in RFC...
Definition net_ip.h:1161
static void net_ipv6_addr_create_solicited_node(const struct in6_addr *src, struct in6_addr *dst)
Create solicited node IPv6 multicast address FF02:0:0:0:0:1:FFXX:XXXX defined in RFC 3513.
Definition net_ip.h:1364
static bool net_ipv6_is_addr_mcast_group(const struct in6_addr *addr, const struct in6_addr *group)
Check if the IPv6 address belongs to certain multicast group.
Definition net_ip.h:1294
static bool net_ipv6_is_addr_mcast_site(const struct in6_addr *addr)
Check if the IPv6 address is a site scope multicast address (FFx5::).
Definition net_ip.h:1265
static bool net_ipv6_is_sl_addr(const struct in6_addr *addr)
Check if the given IPv6 address is a site local address.
Definition net_ip.h:992
static void net_ipv6_addr_create_iid(struct in6_addr *addr, struct net_linkaddr *lladdr)
Create IPv6 address interface identifier.
Definition net_ip.h:1492
static bool net_ipv4_is_private_addr(const struct in_addr *addr)
Check if the given IPv4 address is from a private address range.
Definition net_ip.h:861
static bool net_ipv6_is_addr_mcast_link(const struct in6_addr *addr)
Check if the IPv6 address is a link local scope multicast address (FFx2::).
Definition net_ip.h:1237
static bool net_ipv4_addr_mask_cmp(struct net_if *iface, const struct in_addr *addr)
Check if the given address belongs to same subnet that has been configured for the interface.
Definition net_ip.h:1076
net_ip_protocol_secure
Protocol numbers for TLS protocols.
Definition net_ip.h:78
#define net_ipaddr_copy(dest, src)
Copy an IPv4 or IPv6 address.
Definition net_ip.h:888
static int net_ipv6_pe_del_filter(struct in6_addr *addr)
Delete IPv6 prefix from privacy extension filter list.
Definition net_ip.h:1843
net_ip_mtu
IP Maximum Transfer Unit.
Definition net_ip.h:486
int net_rx_priority2tc(enum net_priority prio)
Convert Rx network packet priority to traffic class so we can place the packet into correct Rx queue.
int net_ipv6_addr_generate_iid(struct net_if *iface, const struct in6_addr *prefix, uint8_t *network_id, size_t network_id_len, uint8_t dad_counter, struct in6_addr *addr, struct net_linkaddr *lladdr)
Generate IPv6 address using a prefix and interface identifier.
static bool net_ipv4_is_addr_loopback(struct in_addr *addr)
Check if the IPv4 address is a loopback address (127.0.0.0/8).
Definition net_ip.h:811
int net_bytes_from_str(uint8_t *buf, int buf_len, const char *src)
Convert a string of hex values to array of bytes.
static uint8_t net_priority2vlan(enum net_priority priority)
Convert network packet priority to network packet VLAN priority.
Definition net_ip.h:1794
static void net_ipv6_addr_create_v4_mapped(const struct in_addr *addr4, struct in6_addr *addr6)
Create IPv4 mapped IPv6 address.
Definition net_ip.h:1434
bool net_if_ipv4_is_addr_bcast(struct net_if *iface, const struct in_addr *addr)
static bool net_ipv6_is_prefix(const uint8_t *addr1, const uint8_t *addr2, uint8_t length)
Check if two IPv6 addresses are same when compared after prefix mask.
Definition net_ip.h:742
bool net_ipaddr_parse(const char *str, size_t str_len, struct sockaddr *addr)
Parse a string that contains either IPv4 or IPv6 address and optional port, and store the information...
int net_port_set_default(struct sockaddr *addr, uint16_t default_port)
Set the default port in the sockaddr structure.
static bool net_ipv6_is_addr_loopback(struct in6_addr *addr)
Check if the IPv6 address is a loopback address (::1).
Definition net_ip.h:679
static bool net_tcp_seq_greater(uint32_t seq1, uint32_t seq2)
Check that one TCP sequence number is greater.
Definition net_ip.h:1719
net_sock_type
Socket type.
Definition net_ip.h:88
const struct in6_addr * net_ipv6_unspecified_address(void)
Return pointer to any (all bits zeros) IPv6 address.
static bool net_ipv6_is_global_addr(const struct in6_addr *addr)
Check if the given IPv6 address is a global address.
Definition net_ip.h:1017
static bool net_ipv6_is_addr_mcast_link_all_nodes(const struct in6_addr *addr)
Check if the IPv6 address is a link local scope all nodes multicast address (FF02::1).
Definition net_ip.h:1350
const char * net_family2str(sa_family_t family)
Return network address family value as a string.
static bool net_ipv4_is_ll_addr(const struct in_addr *addr)
Check if the given IPv4 address is a link local address.
Definition net_ip.h:847
static struct sockaddr_can_ptr * net_can_ptr(const struct sockaddr_ptr *addr)
Get sockaddr_can_ptr from sockaddr_ptr.
Definition net_ip.h:1624
#define ntohl(x)
Convert 32-bit value from network to host byte order.
Definition net_ip.h:108
static bool net_ipv4_is_addr_bcast(struct net_if *iface, const struct in_addr *addr)
Check if the given IPv4 address is a broadcast address.
Definition net_ip.h:1104
static bool net_ipv6_is_ll_addr(const struct in6_addr *addr)
Check if the given IPv6 address is a link local address.
Definition net_ip.h:980
static struct sockaddr_in * net_sin(const struct sockaddr *addr)
Get sockaddr_in from sockaddr.
Definition net_ip.h:1568
const struct in_addr * net_ipv4_unspecified_address(void)
Return pointer to any (all bits zeros) IPv4 address.
static bool net_ipv6_is_addr_mcast_all_nodes_group(const struct in6_addr *addr)
Check if the IPv6 address belongs to the all nodes multicast group.
Definition net_ip.h:1314
size_t socklen_t
Length of a socket address.
Definition net_ip.h:172
static bool net_ipv6_is_private_addr(const struct in6_addr *addr)
Check if the given IPv6 address is from a private/local address range.
Definition net_ip.h:1031
static struct sockaddr_ll_ptr * net_sll_ptr(const struct sockaddr_ptr *addr)
Get sockaddr_ll_ptr from sockaddr_ptr.
Definition net_ip.h:1610
static struct sockaddr_in6 * net_sin6(const struct sockaddr *addr)
Get sockaddr_in6 from sockaddr.
Definition net_ip.h:1555
#define ntohs(x)
Convert 16-bit value from network to host byte order.
Definition net_ip.h:100
struct net_if_mcast_addr * net_if_ipv6_maddr_lookup(const struct in6_addr *addr, struct net_if **iface)
static bool net_ipv4_is_addr_unspecified(const struct in_addr *addr)
Check if the IPv4 address is unspecified (all bits zero)
Definition net_ip.h:823
static bool net_ipv6_is_addr_mcast_scope(const struct in6_addr *addr, int scope)
Check if the IPv6 address is a given scope multicast address (FFyx::).
Definition net_ip.h:1180
static bool net_ipv6_is_ula_addr(const struct in6_addr *addr)
Check if the given IPv6 address is a unique local address.
Definition net_ip.h:1005
static bool net_ipv6_is_addr_mcast_iface(const struct in6_addr *addr)
Check if the IPv6 address is a interface scope multicast address (FFx1::).
Definition net_ip.h:1223
#define htonl(x)
Convert 32-bit value from host to network byte order.
Definition net_ip.h:132
int net_tx_priority2tc(enum net_priority prio)
Convert Tx network packet priority to traffic class so we can place the packet into correct Tx queue.
static struct sockaddr_in6_ptr * net_sin6_ptr(const struct sockaddr_ptr *addr)
Get sockaddr_in6_ptr from sockaddr_ptr.
Definition net_ip.h:1582
net_priority
Network packet priority settings described in IEEE 802.1Q Annex I.1.
Definition net_ip.h:503
static bool net_ipv4_is_addr_mcast(const struct in_addr *addr)
Check if the IPv4 address is a multicast address.
Definition net_ip.h:835
net_ip_protocol
Protocol numbers from IANA/BSD.
Definition net_ip.h:64
static bool net_ipv6_addr_based_on_ll(const struct in6_addr *addr, const struct net_linkaddr *lladdr)
Check if given address is based on link layer address.
Definition net_ip.h:1503
static void net_ipv4_addr_copy_raw(uint8_t *dest, const uint8_t *src)
Copy an IPv4 address raw buffer.
Definition net_ip.h:897
static bool net_ipv6_is_my_maddr(struct in6_addr *maddr)
Check if IPv6 multicast address is found in one of the network interfaces.
Definition net_ip.h:728
static bool net_ipv6_addr_cmp_raw(const uint8_t *addr1, const uint8_t *addr2)
Compare two raw IPv6 address buffers.
Definition net_ip.h:966
static bool net_ipv6_is_addr_unspecified(const struct in6_addr *addr)
Check if the IPv6 address is unspecified (all bits zero)
Definition net_ip.h:1145
net_addr_type
How the network address is assigned to network interface.
Definition net_ip.h:534
@ NET_ADDR_ANY_STATE
Default (invalid) address type.
Definition net_ip.h:527
@ NET_ADDR_TENTATIVE
Tentative address
Definition net_ip.h:528
@ NET_ADDR_DEPRECATED
Deprecated address
Definition net_ip.h:530
@ NET_ADDR_PREFERRED
Preferred address
Definition net_ip.h:529
@ IPPROTO_TLS_1_1
TLS 1.1 protocol.
Definition net_ip.h:80
@ IPPROTO_TLS_1_0
TLS 1.0 protocol.
Definition net_ip.h:79
@ IPPROTO_DTLS_1_0
DTLS 1.0 protocol.
Definition net_ip.h:83
@ IPPROTO_TLS_1_3
TLS 1.3 protocol.
Definition net_ip.h:82
@ IPPROTO_TLS_1_2
TLS 1.2 protocol.
Definition net_ip.h:81
@ IPPROTO_DTLS_1_2
DTLS 1.2 protocol.
Definition net_ip.h:84
@ NET_IPV4_MTU
IPv4 MTU length.
Definition net_ip.h:499
@ NET_IPV6_MTU
IPv6 MTU length.
Definition net_ip.h:493
@ SOCK_DGRAM
Datagram socket type.
Definition net_ip.h:90
@ SOCK_RAW
RAW socket type
Definition net_ip.h:91
@ SOCK_STREAM
Stream socket type
Definition net_ip.h:89
@ NET_PRIORITY_NC
Network control (highest)
Definition net_ip.h:511
@ NET_PRIORITY_IC
Internetwork control
Definition net_ip.h:510
@ NET_PRIORITY_CA
Critical applications
Definition net_ip.h:507
@ NET_PRIORITY_VO
Voice, < 10 ms latency and jitter
Definition net_ip.h:509
@ NET_PRIORITY_VI
Video, < 100 ms latency and jitter.
Definition net_ip.h:508
@ NET_PRIORITY_BE
Best effort (default)
Definition net_ip.h:505
@ NET_PRIORITY_EE
Excellent effort
Definition net_ip.h:506
@ NET_PRIORITY_BK
Background (lowest)
Definition net_ip.h:504
@ IPPROTO_IP
IP protocol (pseudo-val for setsockopt()
Definition net_ip.h:65
@ IPPROTO_RAW
RAW IP packets
Definition net_ip.h:74
@ IPPROTO_IPIP
IPIP tunnels
Definition net_ip.h:69
@ IPPROTO_TCP
TCP protocol
Definition net_ip.h:70
@ IPPROTO_IGMP
IGMP protocol
Definition net_ip.h:67
@ IPPROTO_ICMP
ICMP protocol
Definition net_ip.h:66
@ IPPROTO_IPV6
IPv6 protocol
Definition net_ip.h:72
@ IPPROTO_ETH_P_ALL
Every packet.
Definition net_ip.h:68
@ IPPROTO_UDP
UDP protocol
Definition net_ip.h:71
@ IPPROTO_ICMPV6
ICMPv6 protocol.
Definition net_ip.h:73
@ NET_ADDR_ANY
Default value.
Definition net_ip.h:536
@ NET_ADDR_OVERRIDABLE
Manually set address which is overridable by DHCP.
Definition net_ip.h:544
@ NET_ADDR_DHCP
Address is from DHCP.
Definition net_ip.h:540
@ NET_ADDR_MANUAL
Manually set address.
Definition net_ip.h:542
@ NET_ADDR_AUTOCONF
Auto configured address.
Definition net_ip.h:538
@ NET_LINK_ETHERNET
Ethernet link address.
Definition net_linkaddr.h:57
#define ARRAY_SIZE(array)
Number of elements in the given array.
Definition util.h:120
#define ENOTSUP
Unsupported value.
Definition errno.h:114
Public API for network link address.
flags
Definition parser.h:96
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
__INT32_TYPE__ int32_t
Definition stdint.h:74
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
__UINT16_TYPE__ uint16_t
Definition stdint.h:89
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)
Control message ancillary data.
Definition net_ip.h:268
int cmsg_type
Protocol-specific type.
Definition net_ip.h:271
socklen_t cmsg_len
Number of bytes, including header.
Definition net_ip.h:269
z_max_align_t cmsg_data[]
Flexible array member to force alignment of cmsghdr.
Definition net_ip.h:272
int cmsg_level
Originating protocol.
Definition net_ip.h:270
Group structure.
Definition grp.h:18
IPv6 address struct.
Definition net_ip.h:143
uint8_t s6_addr[16]
IPv6 address buffer.
Definition net_ip.h:145
uint32_t s6_addr32[4]
In big endian.
Definition net_ip.h:147
uint16_t s6_addr16[8]
In big endian.
Definition net_ip.h:146
IPv4 address struct.
Definition net_ip.h:155
uint8_t s4_addr[4]
IPv4 address buffer.
Definition net_ip.h:157
uint32_t s_addr
In big endian, for POSIX compatibility.
Definition net_ip.h:160
uint16_t s4_addr16[2]
In big endian.
Definition net_ip.h:158
uint32_t s4_addr32[1]
In big endian.
Definition net_ip.h:159
IO vector array element.
Definition net_ip.h:250
void * iov_base
Pointer to data.
Definition net_ip.h:251
size_t iov_len
Length of the data.
Definition net_ip.h:252
Message struct.
Definition net_ip.h:257
struct iovec * msg_iov
Scatter/gather array.
Definition net_ip.h:260
socklen_t msg_namelen
Size of socket address.
Definition net_ip.h:259
void * msg_name
Optional socket address, big endian.
Definition net_ip.h:258
int msg_flags
Flags on received message.
Definition net_ip.h:264
size_t msg_controllen
Ancillary data buffer len.
Definition net_ip.h:263
size_t msg_iovlen
Number of elements in msg_iov.
Definition net_ip.h:261
void * msg_control
Ancillary data.
Definition net_ip.h:262
Network Interface unicast IP addresses.
Definition net_if.h:56
IP and other configuration related data for network interface.
Definition net_if.h:569
Network Interface multicast IP addresses.
Definition net_if.h:147
Network Interface structure.
Definition net_if.h:692
Hardware link address structure.
Definition net_linkaddr.h:69
uint8_t * addr
The array of byte representing the address.
Definition net_linkaddr.h:71
uint8_t type
What kind of address is this for.
Definition net_linkaddr.h:77
uint8_t len
Length of that address array.
Definition net_linkaddr.h:74
IPv6/IPv4 network connection tuple.
Definition net_ip.h:517
struct net_addr * remote_addr
IPv6/IPv4 remote address.
Definition net_ip.h:518
uint16_t local_port
UDP/TCP local port
Definition net_ip.h:521
enum net_ip_protocol ip_proto
IP protocol
Definition net_ip.h:522
uint16_t remote_port
UDP/TCP remote port
Definition net_ip.h:520
struct net_addr * local_addr
IPv6/IPv4 local address
Definition net_ip.h:519
Socket address struct for IPv6.
Definition net_ip.h:182
uint8_t sin6_scope_id
Interfaces for a scope.
Definition net_ip.h:186
struct in6_addr sin6_addr
IPv6 address
Definition net_ip.h:185
uint16_t sin6_port
Port number
Definition net_ip.h:184
sa_family_t sin6_family
AF_INET6
Definition net_ip.h:183
Socket address struct for IPv4.
Definition net_ip.h:190
uint16_t sin_port
Port number
Definition net_ip.h:192
struct in_addr sin_addr
IPv4 address.
Definition net_ip.h:193
sa_family_t sin_family
AF_INET
Definition net_ip.h:191
Socket address struct for packet socket.
Definition net_ip.h:197
uint8_t sll_pkttype
Packet type
Definition net_ip.h:202
uint16_t sll_hatype
ARP hardware type
Definition net_ip.h:201
sa_family_t sll_family
Always AF_PACKET
Definition net_ip.h:198
uint16_t sll_protocol
Physical-layer protocol
Definition net_ip.h:199
int sll_ifindex
Interface number
Definition net_ip.h:200
uint8_t sll_halen
Length of address
Definition net_ip.h:203
uint8_t sll_addr[8]
Physical-layer address, big endian.
Definition net_ip.h:204
Generic sockaddr struct.
Definition net_ip.h:408
sa_family_t sa_family
Address family.
Definition net_ip.h:409