Zephyr API Documentation  2.7.0-rc2
A Scalable Open Source RTOS
net_ip.h File Reference

IPv6 and IPv4 definitions. More...

#include <string.h>
#include <zephyr/types.h>
#include <stdbool.h>
#include <sys/util.h>
#include <sys/byteorder.h>
#include <toolchain.h>
#include <net/net_linkaddr.h>
#include <syscalls/net_ip.h>

Go to the source code of this file.

Data Structures

struct  in6_addr
 
struct  in_addr
 
struct  sockaddr_in6
 
struct  sockaddr_in6_ptr
 
struct  sockaddr_in
 
struct  sockaddr_in_ptr
 
struct  sockaddr_ll
 
struct  sockaddr_ll_ptr
 
struct  sockaddr_can_ptr
 
struct  iovec
 
struct  msghdr
 
struct  cmsghdr
 
struct  sockaddr
 
struct  net_tuple
 

Macros

#define PF_UNSPEC   0
 
#define PF_INET   1
 
#define PF_INET6   2
 
#define PF_PACKET   3
 
#define PF_CAN   4
 
#define PF_NET_MGMT   5
 
#define PF_LOCAL   6
 
#define PF_UNIX   PF_LOCAL
 
#define AF_UNSPEC   PF_UNSPEC
 
#define AF_INET   PF_INET
 
#define AF_INET6   PF_INET6
 
#define AF_PACKET   PF_PACKET
 
#define AF_CAN   PF_CAN
 
#define AF_NET_MGMT   PF_NET_MGMT
 
#define AF_LOCAL   PF_LOCAL
 
#define AF_UNIX   PF_UNIX
 
#define ntohs(x)   sys_be16_to_cpu(x)
 Convert 16-bit value from network to host byte order. More...
 
#define ntohl(x)   sys_be32_to_cpu(x)
 Convert 32-bit value from network to host byte order. More...
 
#define ntohll(x)   sys_be64_to_cpu(x)
 Convert 64-bit value from network to host byte order. More...
 
#define htons(x)   sys_cpu_to_be16(x)
 Convert 16-bit value from host to network byte order. More...
 
#define htonl(x)   sys_cpu_to_be32(x)
 Convert 32-bit value from host to network byte order. More...
 
#define htonll(x)   sys_cpu_to_be64(x)
 Convert 64-bit value from host to network byte order. More...
 
#define ALIGN_H(x)   ROUND_UP(x, __alignof__(struct cmsghdr))
 
#define ALIGN_D(x)   ROUND_UP(x, __alignof__(z_max_align_t))
 
#define CMSG_FIRSTHDR(msghdr)
 
#define CMSG_NXTHDR(msghdr, cmsg)
 
#define CMSG_DATA(cmsg)   ((uint8_t *)(cmsg) + ALIGN_D(sizeof(struct cmsghdr)))
 
#define CMSG_SPACE(length)   (ALIGN_D(sizeof(struct cmsghdr)) + ALIGN_H(length))
 
#define CMSG_LEN(length)   (ALIGN_D(sizeof(struct cmsghdr)) + length)
 
#define INET_ADDRSTRLEN   16
 
#define INET6_ADDRSTRLEN   46
 
#define NET_MAX_PRIORITIES   8 /* How many priority values there are */
 
#define net_ipaddr_copy(dest, src)    UNALIGNED_PUT(UNALIGNED_GET(src), dest)
 Copy an IPv4 or IPv6 address. More...
 

Typedefs

typedef unsigned short int sa_family_t
 
typedef size_t socklen_t
 

Enumerations

enum  net_ip_protocol {
  IPPROTO_IP = 0 , IPPROTO_ICMP = 1 , IPPROTO_IGMP = 2 , IPPROTO_IPIP = 4 ,
  IPPROTO_TCP = 6 , IPPROTO_UDP = 17 , IPPROTO_IPV6 = 41 , IPPROTO_ICMPV6 = 58 ,
  IPPROTO_RAW = 255
}
 
enum  net_ip_protocol_secure {
  IPPROTO_TLS_1_0 = 256 , IPPROTO_TLS_1_1 = 257 , IPPROTO_TLS_1_2 = 258 , IPPROTO_DTLS_1_0 = 272 ,
  IPPROTO_DTLS_1_2 = 273
}
 
enum  net_sock_type { SOCK_STREAM = 1 , SOCK_DGRAM , SOCK_RAW }
 
enum  net_ip_mtu { NET_IPV6_MTU = 1280 , NET_IPV4_MTU = 576 }
 
enum  net_priority {
  NET_PRIORITY_BK = 1 , NET_PRIORITY_BE = 0 , NET_PRIORITY_EE = 2 , NET_PRIORITY_CA = 3 ,
  NET_PRIORITY_VI = 4 , NET_PRIORITY_VO = 5 , NET_PRIORITY_IC = 6 , NET_PRIORITY_NC = 7
}
 
enum  net_addr_state { NET_ADDR_ANY_STATE = -1 , NET_ADDR_TENTATIVE = 0 , NET_ADDR_PREFERRED , NET_ADDR_DEPRECATED }
 
enum  net_addr_type {
  NET_ADDR_ANY = 0 , NET_ADDR_AUTOCONF , NET_ADDR_DHCP , NET_ADDR_MANUAL ,
  NET_ADDR_OVERRIDABLE
}
 

Functions

static bool net_ipv6_is_addr_loopback (struct in6_addr *addr)
 Check if the IPv6 address is a loopback address (::1). More...
 
static bool net_ipv6_is_addr_mcast (const struct in6_addr *addr)
 Check if the IPv6 address is a multicast address. More...
 
struct net_if_addrnet_if_ipv6_addr_lookup (const struct in6_addr *addr, struct net_if **iface)
 
static bool net_ipv6_is_my_addr (struct in6_addr *addr)
 Check if IPv6 address is found in one of the network interfaces. More...
 
struct net_if_mcast_addrnet_if_ipv6_maddr_lookup (const struct in6_addr *addr, struct net_if **iface)
 
static bool net_ipv6_is_my_maddr (struct in6_addr *maddr)
 Check if IPv6 multicast address is found in one of the network interfaces. More...
 
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. More...
 
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). More...
 
static bool net_ipv4_is_addr_unspecified (const struct in_addr *addr)
 Check if the IPv4 address is unspecified (all bits zero) More...
 
static bool net_ipv4_is_addr_mcast (const struct in_addr *addr)
 Check if the IPv4 address is a multicast address. More...
 
static bool net_ipv4_is_ll_addr (const struct in_addr *addr)
 Check if the given IPv4 address is a link local address. More...
 
static bool net_ipv4_addr_cmp (const struct in_addr *addr1, const struct in_addr *addr2)
 Compare two IPv4 addresses. More...
 
static bool net_ipv6_addr_cmp (const struct in6_addr *addr1, const struct in6_addr *addr2)
 Compare two IPv6 addresses. More...
 
static bool net_ipv6_is_ll_addr (const struct in6_addr *addr)
 Check if the given IPv6 address is a link local address. More...
 
static bool net_ipv6_is_ula_addr (const struct in6_addr *addr)
 Check if the given IPv6 address is a unique local address. More...
 
const struct in6_addrnet_ipv6_unspecified_address (void)
 Return pointer to any (all bits zeros) IPv6 address. More...
 
const struct in_addrnet_ipv4_unspecified_address (void)
 Return pointer to any (all bits zeros) IPv4 address. More...
 
const struct in_addrnet_ipv4_broadcast_address (void)
 Return pointer to broadcast (all bits ones) IPv4 address. More...
 
bool net_if_ipv4_addr_mask_cmp (struct net_if *iface, const struct in_addr *addr)
 
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. More...
 
bool net_if_ipv4_is_addr_bcast (struct net_if *iface, const struct in_addr *addr)
 
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. More...
 
struct net_if_addrnet_if_ipv4_addr_lookup (const struct in_addr *addr, struct net_if **iface)
 
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. More...
 
static bool net_ipv6_is_addr_unspecified (const struct in6_addr *addr)
 Check if the IPv6 address is unspecified (all bits zero) More...
 
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 3513. More...
 
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::). More...
 
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::). More...
 
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). More...
 
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::). More...
 
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::). More...
 
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::). More...
 
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::). More...
 
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::). More...
 
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. More...
 
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. More...
 
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). More...
 
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). More...
 
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. More...
 
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. More...
 
static void net_ipv6_addr_create_ll_allnodes_mcast (struct in6_addr *addr)
 Create link local allnodes multicast IPv6 address. More...
 
static void net_ipv6_addr_create_ll_allrouters_mcast (struct in6_addr *addr)
 Create link local allrouters multicast IPv6 address. More...
 
static void net_ipv6_addr_create_iid (struct in6_addr *addr, struct net_linkaddr *lladdr)
 Create IPv6 address interface identifier. More...
 
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. More...
 
static struct sockaddr_in6net_sin6 (const struct sockaddr *addr)
 Get sockaddr_in6 from sockaddr. This is a helper so that the code calling this function can be made shorter. More...
 
static struct sockaddr_innet_sin (const struct sockaddr *addr)
 Get sockaddr_in from sockaddr. This is a helper so that the code calling this function can be made shorter. More...
 
static struct sockaddr_in6_ptrnet_sin6_ptr (const struct sockaddr_ptr *addr)
 Get sockaddr_in6_ptr from sockaddr_ptr. This is a helper so that the code calling this function can be made shorter. More...
 
static struct sockaddr_in_ptrnet_sin_ptr (const struct sockaddr_ptr *addr)
 Get sockaddr_in_ptr from sockaddr_ptr. This is a helper so that the code calling this function can be made shorter. More...
 
static struct sockaddr_ll_ptrnet_sll_ptr (const struct sockaddr_ptr *addr)
 Get sockaddr_ll_ptr from sockaddr_ptr. This is a helper so that the code calling this function can be made shorter. More...
 
static struct sockaddr_can_ptrnet_can_ptr (const struct sockaddr_ptr *addr)
 Get sockaddr_can_ptr from sockaddr_ptr. This is a helper so that the code needing this functionality can be made shorter. More...
 
int net_addr_pton (sa_family_t family, const char *src, void *dst)
 Convert a string to IP address. More...
 
char * net_addr_ntop (sa_family_t family, const void *src, char *dst, size_t size)
 Convert IP address to string form. More...
 
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 in user supplied sockaddr struct. More...
 
static int32_t net_tcp_seq_cmp (uint32_t seq1, uint32_t seq2)
 Compare TCP sequence numbers. More...
 
static bool net_tcp_seq_greater (uint32_t seq1, uint32_t seq2)
 Check that one TCP sequence number is greater. More...
 
int net_bytes_from_str (uint8_t *buf, int buf_len, const char *src)
 Convert a string of hex values to array of bytes. More...
 
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. More...
 
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. More...
 
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 correct queue. More...
 
static uint8_t net_priority2vlan (enum net_priority priority)
 Convert network packet priority to network packet VLAN priority. More...
 
const char * net_family2str (sa_family_t family)
 Return network address family value as a string. This is only usable for debugging. More...
 

Detailed Description

IPv6 and IPv4 definitions.

Generic IPv6 and IPv4 address definitions.