ipv6/addr.h File Reference

Definitions for IPv6 addresses. More...

Detailed Description

Definitions for IPv6 addresses.

Author
Martine Lenders mlend.nosp@m.ers@.nosp@m.inf.f.nosp@m.u-be.nosp@m.rlin..nosp@m.de

Definition in file ipv6/addr.h.

#include <stdbool.h>
#include <string.h>
#include "byteorder.h"
#include "net/ipv4/addr.h"
+ Include dependency graph for ipv6/addr.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

union  ipv6_addr_t
 Data type to represent an IPv6 address. More...
 

Macros

#define IPV6_ADDR_BIT_LEN   (128)
 Length of an IPv6 address in bit.
 
#define IPV6_ADDR_MAX_STR_LEN   (sizeof("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"))
 Maximum length of an IPv6 address as string.
 
#define IPV6_ADDR_SITE_LOCAL_PREFIX   (0xfec0)
 The first 10 bits of a site-local IPv6 unicast address. More...
 
#define IPV6_ADDR_UNSPECIFIED
 Static initializer for the unspecified IPv6 address (::) More...
 
#define IPV6_ADDR_LOOPBACK
 Static initializer for the loopback IPv6 address (::1) More...
 
#define IPV6_ADDR_LINK_LOCAL_PREFIX
 Static initializer for the link-local prefix (fe80::/64) More...
 
#define IPV6_ADDR_ALL_NODES_IF_LOCAL
 Static initializer for the interface-local all nodes multicast IPv6 address (ff01::1) More...
 
#define IPV6_ADDR_ALL_NODES_LINK_LOCAL
 Static initializer for the link-local all nodes multicast IPv6 address (ff02::1) More...
 
#define IPV6_ADDR_ALL_ROUTERS_IF_LOCAL
 Static initializer for the interface-local all routers multicast IPv6 address (ff01::2) More...
 
#define IPV6_ADDR_ALL_ROUTERS_LINK_LOCAL
 Static initializer for the link-local all routers multicast IPv6 address (ff02::2) More...
 
#define IPV6_ADDR_ALL_ROUTERS_SITE_LOCAL
 Static initializer for the site-local all routers multicast IPv6 address (ff05::2) More...
 
#define IPV6_ADDR_SOLICITED_NODE_PREFIX
 Static initializer for the solicited node multicast prefix (ff02:0:0:0:0:1:ff00::/104) More...
 
Multicast address flags

Values for the flag field in multicast addresses.

See also
RFC 4291, section 2.7
#define IPV6_ADDR_MCAST_FLAG_TRANSIENT   (0x01)
 The address is transient, i.e. More...
 
#define IPV6_ADDR_MCAST_FLAG_PREFIX_BASED   (0x02)
 The address is based on a network prefix. More...
 
#define IPV6_ADDR_MCAST_FLAG_EMBED_ON_RP   (0x04)
 The address embeds the address on the rendezvous point. More...
 
Multicast address scopes

Values for the scope field in multicast addresses.

See also
RFC 4291, section 2.7
#define IPV6_ADDR_MCAST_SCP_IF_LOCAL   (0x1)
 interface-local scope
 
#define IPV6_ADDR_MCAST_SCP_LINK_LOCAL   (0x2)
 link-local scope
 
#define IPV6_ADDR_MCAST_SCP_REALM_LOCAL   (0x3)
 realm-local scope More...
 
#define IPV6_ADDR_MCAST_SCP_ADMIN_LOCAL   (0x4)
 admin-local scope
 
#define IPV6_ADDR_MCAST_SCP_SITE_LOCAL   (0x5)
 site-local scope
 
#define IPV6_ADDR_MCAST_SCP_ORG_LOCAL   (0x8)
 organization-local scope
 
#define IPV6_ADDR_MCAST_SCP_GLOBAL   (0xe)
 global scope
 

Functions

static bool ipv6_addr_is_unspecified (const ipv6_addr_t *addr)
 Checks if addr is unspecified (all zero). More...
 
static bool ipv6_addr_is_loopback (const ipv6_addr_t *addr)
 Checks if addr is a loopback address. More...
 
static bool ipv6_addr_is_ipv4_compat (const ipv6_addr_t *addr)
 Checks if addr is a IPv4-compatible IPv6 address. More...
 
static bool ipv6_addr_is_ipv4_mapped (const ipv6_addr_t *addr)
 Checks if addr is a IPv4-mapped IPv6 address. More...
 
static bool ipv6_addr_is_multicast (const ipv6_addr_t *addr)
 Check if addr is a multicast address. More...
 
static bool ipv6_addr_is_link_local (const ipv6_addr_t *addr)
 Check if addr is a link-local address. More...
 
static bool ipv6_addr_is_site_local (const ipv6_addr_t *addr)
 Checks if addr is a site-local address. More...
 
static bool ipv6_addr_is_unique_local_unicast (const ipv6_addr_t *addr)
 Check if addr is unique local unicast address. More...
 
static bool ipv6_addr_is_global (const ipv6_addr_t *addr)
 Check if addr is global unicast address. More...
 
static bool ipv6_addr_is_solicited_node (const ipv6_addr_t *addr)
 Check if addr is solicited-node multicast address. More...
 
bool ipv6_addr_equal (const ipv6_addr_t *a, const ipv6_addr_t *b)
 Checks if two IPv6 addresses are equal. More...
 
uint8_t ipv6_addr_match_prefix (const ipv6_addr_t *a, const ipv6_addr_t *b)
 Checks up to which bit-count two IPv6 addresses match in their prefix. More...
 
void ipv6_addr_init_prefix (ipv6_addr_t *out, const ipv6_addr_t *prefix, uint8_t bits)
 Sets IPv6 address out with the first bits taken from prefix and leaves the remaining bits untouched. More...
 
void ipv6_addr_init_iid (ipv6_addr_t *out, const uint8_t *iid, uint8_t bits)
 Sets the last bits of IPv6 address out to iid. More...
 
static void ipv6_addr_set_unspecified (ipv6_addr_t *addr)
 Sets addr dynamically to the unspecified IPv6 address (::). More...
 
static void ipv6_addr_set_loopback (ipv6_addr_t *addr)
 Sets addr dynamically to the loopback IPv6 address (::1). More...
 
static void ipv6_addr_set_link_local_prefix (ipv6_addr_t *addr)
 Sets the first 64 bit of addr to link local prefix (fe08::/64). More...
 
static void ipv6_addr_set_iid (ipv6_addr_t *addr, uint64_t iid)
 Sets the 64-bit interface ID (as integer) of a unicast or anycast IPv6 address. More...
 
static void ipv6_addr_set_aiid (ipv6_addr_t *addr, uint8_t *iid)
 Sets the 64-bit interface ID (as array) of a unicast or anycast IPv6 address. More...
 
static void ipv6_addr_set_multicast (ipv6_addr_t *addr, unsigned int flags, unsigned int scope)
 Sets the bits for an address required to be a multicast address. More...
 
static void ipv6_addr_set_all_nodes_multicast (ipv6_addr_t *addr, unsigned int scope)
 Sets addr dynamically to an all nodes multicast IPv6 address (ff0S::1, where S is the scope). More...
 
static void ipv6_addr_set_all_routers_multicast (ipv6_addr_t *addr, unsigned int scope)
 Sets addr dynamically to an all routers multicast IPv6 address (ff0S::2, where S is the scope). More...
 
static void ipv6_addr_set_solicited_nodes (ipv6_addr_t *out, const ipv6_addr_t *in)
 Set out to the solicited-node multicast address computed from in. More...
 
char * ipv6_addr_to_str (char *result, const ipv6_addr_t *addr, uint8_t result_len)
 Converts an IPv6 address to its string representation. More...
 
ipv6_addr_tipv6_addr_from_str (ipv6_addr_t *result, const char *addr)
 Converts an IPv6 address string representation to a byte-represented IPv6 address. More...
 
int ipv6_addr_split (char *addr_str, char seperator, int _default)
 split IPv6 address string representation More...
 
static int ipv6_addr_split_prefix (char *addr_str)
 split IPv6 prefix string representation More...
 
static int ipv6_addr_split_iface (char *addr_str)
 split IPv6 address + interface specifier More...
 
void ipv6_addr_print (const ipv6_addr_t *addr)
 Print IPv6 address to stdout. More...
 

Variables

const ipv6_addr_t ipv6_addr_unspecified
 In-memory constants of defined addresses and prefixes. More...
 
const ipv6_addr_t ipv6_addr_loopback
 
const ipv6_addr_t ipv6_addr_link_local_prefix
 
const ipv6_addr_t ipv6_addr_all_nodes_if_local
 
const ipv6_addr_t ipv6_addr_all_nodes_link_local
 
const ipv6_addr_t ipv6_addr_all_routers_if_local
 
const ipv6_addr_t ipv6_addr_all_routers_link_local
 
const ipv6_addr_t ipv6_addr_all_routers_site_local
 
const ipv6_addr_t ipv6_addr_solicited_node_prefix