All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
Loading...
Searching...
No Matches
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 addr.h.

#include <stdbool.h>
#include <string.h>
#include "byteorder.h"
#include "net/ipv4/addr.h"
+ Include dependency graph for 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.
 
#define IPV6_ADDR_UNSPECIFIED
 Static initializer for the unspecified IPv6 address (::)
 
#define IPV6_ADDR_LOOPBACK
 Static initializer for the loopback IPv6 address (::1)
 
#define IPV6_ADDR_LINK_LOCAL_PREFIX
 Static initializer for the link-local prefix (fe80::/64)
 
#define IPV6_ADDR_ALL_NODES_IF_LOCAL
 Static initializer for the interface-local all nodes multicast IPv6 address (ff01::1)
 
#define IPV6_ADDR_ALL_NODES_LINK_LOCAL
 Static initializer for the link-local all nodes multicast IPv6 address (ff02::1)
 
#define IPV6_ADDR_ALL_ROUTERS_IF_LOCAL
 Static initializer for the interface-local all routers multicast IPv6 address (ff01::2)
 
#define IPV6_ADDR_ALL_ROUTERS_LINK_LOCAL
 Static initializer for the link-local all routers multicast IPv6 address (ff02::2)
 
#define IPV6_ADDR_ALL_ROUTERS_SITE_LOCAL
 Static initializer for the site-local all routers multicast IPv6 address (ff05::2)
 
#define IPV6_ADDR_SOLICITED_NODE_PREFIX
 Static initializer for the solicited node multicast prefix (ff02:0:0:0:0:1:ff00::/104)
 

Functions

static bool ipv6_addr_is_unspecified (const ipv6_addr_t *addr)
 Checks if addr is unspecified (all zero).
 
static bool ipv6_addr_is_loopback (const ipv6_addr_t *addr)
 Checks if addr is a loopback address.
 
static bool ipv6_addr_is_ipv4_compat (const ipv6_addr_t *addr)
 Checks if addr is a IPv4-compatible IPv6 address.
 
static bool ipv6_addr_is_ipv4_mapped (const ipv6_addr_t *addr)
 Checks if addr is a IPv4-mapped IPv6 address.
 
static bool ipv6_addr_is_multicast (const ipv6_addr_t *addr)
 Check if addr is a multicast address.
 
static bool ipv6_addr_is_link_local (const ipv6_addr_t *addr)
 Check if addr is a link-local address.
 
static bool ipv6_addr_is_site_local (const ipv6_addr_t *addr)
 Checks if addr is a site-local address.
 
static bool ipv6_addr_is_unique_local_unicast (const ipv6_addr_t *addr)
 Check if addr is unique local unicast address.
 
static bool ipv6_addr_is_global (const ipv6_addr_t *addr)
 Check if addr is global unicast address.
 
static bool ipv6_addr_is_solicited_node (const ipv6_addr_t *addr)
 Check if addr is solicited-node multicast address.
 
bool ipv6_addr_equal (const ipv6_addr_t *a, const ipv6_addr_t *b)
 Checks if two IPv6 addresses are equal.
 
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.
 
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.
 
static void ipv6_addr_init (ipv6_addr_t *out, uint64_t prefix, uint64_t iid)
 Sets IPv6 address out with a given prefix and interface ID.
 
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.
 
static void ipv6_addr_set_unspecified (ipv6_addr_t *addr)
 Sets addr dynamically to the unspecified IPv6 address (::).
 
static void ipv6_addr_set_loopback (ipv6_addr_t *addr)
 Sets addr dynamically to the loopback IPv6 address (::1).
 
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).
 
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.
 
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.
 
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.
 
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).
 
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).
 
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.
 
char * ipv6_addr_to_str (char *result, const ipv6_addr_t *addr, uint8_t result_len)
 Converts an IPv6 address to its string representation.
 
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.
 
int ipv6_prefix_from_str (ipv6_addr_t *result, const char *prefix)
 Converts an IPv6 prefix string representation to a byte-represented IPv6 address.
 
ipv6_addr_tipv6_addr_from_buf (ipv6_addr_t *result, const char *addr, size_t addr_len)
 Converts an IPv6 address from a buffer of characters to a byte-represented IPv6 address.
 
char * ipv6_addr_split_str (char *addr_str, char separator)
 split IPv6 address string representation and return remaining string
 
int ipv6_addr_split_int (char *addr_str, char separator, int _default)
 split IPv6 address string representation
 
static int ipv6_addr_split_prefix (char *addr_str)
 split IPv6 prefix string representation
 
static char * ipv6_addr_split_iface (char *addr_str)
 split IPv6 address + interface specifier
 
void ipv6_addr_print (const ipv6_addr_t *addr)
 Print IPv6 address to stdout.
 
void ipv6_addrs_print (const ipv6_addr_t *addrs, size_t num, const char *separator)
 Print IPv6 addresses to stdout.
 

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.
 
#define IPV6_ADDR_MCAST_FLAG_PREFIX_BASED   (0x02)
 The address is based on a network prefix.
 
#define IPV6_ADDR_MCAST_FLAG_EMBED_ON_RP   (0x04)
 The address embeds the address on the rendezvous point.
 

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
 
#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
 
const ipv6_addr_t ipv6_addr_unspecified
 In-memory constants of defined addresses and prefixes.
 
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