GNRC's IPv6 implementation. More...
GNRC's IPv6 implementation.
This module is for usage with the GNRC communication interface
This module handles the following GNRC communication interface message types:
GNRC_NETAPI_MSG_TYPE_RCV expects a Packet (referred to as "packet" in the following) in receive order (payload first, headers ordered down the stack). It must at least contain a link-layer payload starting with a valid IPv6 header. If it contains a Generic network interface header this header will be taken into account.
If the link-layer payload is not an IPv6 packet (starting with a 0x6 half-byte) or the module is not able to parse it correctly it will be dropped. If the packet can't be forwarded (either to another node or an upper layer) it will be dropped. Otherwise, there are two scenarios of success:
If the destination address is an address on this host, and a suitable upper layer is registered the packet will be forwarded to that upper layer. An upper layer is suitable with its registration if
nh
), ornh
), GNRC_NETREG_DEMUX_CTX_ALL).In both cases nh
is the next header field of one of the IPv6 header or the next header field of one of the IPv6 extension headers" within the packet. The IPv6 header and every IPv6 extension header between the IPv6 header and the payload will be marked as separate gnrc_pktsnip_t (i.e. the IPv6 payload will be the first snip due to receive order). Note, that IPv6-internal headers (such as ICMPv6 and extension headers) are handled within this module. If the `gnrc_ipv6_ext` module is not present, IPv6 extension headers can't be parsed, so the packet might not be read properly.
GNRC_NETAPI_MSG_TYPE_SND expects a Packet (referred to as "packet" in the following) in send order (headers ordered up the stack, payload last). It must at least contain a snip of type GNRC_NETTYPE_IPV6 as its first or second snip. If the first snip is not of type GNRC_NETTYPE_IPV6, it must be of type GNRC_NETTYPE_NETIF.
If the destination address within the GNRC_NETTYPE_IPV6 snip is an address on this host or the loopback address ::1
, the packet will be reversed and merged so that it has a format as though it came from a network interface. It will then be handled as a received packet ("looped back") by the IPv6 module (see previous section).
Otherwise, if a route (or neighbor cache entry) to the IPv6 destination address exists, the IPv6 header will be filled for fields that were not set by upper layers and handed over to the link-layer (L2) with the L2 destination address set to the L2 address associated to that IPv6 destination address.
GNRC_NETAPI_MSG_TYPE_SET
is not supported.
GNRC_NETAPI_MSG_TYPE_GET
is not supported.
Modules | |
GNRC IPv6 compile configurations | |
ICMPv6 | |
GNRC's implementation of ICMPv6. | |
IPv6 address blacklist | |
This refuses IPv6 addresses that are defined in this list. | |
IPv6 address whitelist | |
This allows you to only accept IPv6 addresses that are defined in this list. | |
IPv6 extension headers. | |
Implementation of IPv6 extension headers. | |
IPv6 header definitions | |
IPv6 neighbor discovery (v2) | |
Provides build and send functions for neighbor discovery packets. | |
Neighbor Information Base for IPv6 | |
Neighbor Information Base (NIB) for IPv6. | |
Files | |
file | ipv6.h |
Definitions for GNRC's IPv6 implementation. | |
Macros | |
#define | GNRC_IPV6_MSG_QUEUE_SIZE (1 << CONFIG_GNRC_IPV6_MSG_QUEUE_SIZE_EXP) |
Message queue size to use for the IPv6 thread. | |
Functions | |
kernel_pid_t | gnrc_ipv6_init (void) |
Initialization of the IPv6 thread. More... | |
ipv6_hdr_t * | gnrc_ipv6_get_header (gnrc_pktsnip_t *pkt) |
Get the IPv6 header from a given list of gnrc_pktsnip_t. More... | |
Variables | |
kernel_pid_t | gnrc_ipv6_pid |
The PID to the IPv6 thread. More... | |
ipv6_hdr_t* gnrc_ipv6_get_header | ( | gnrc_pktsnip_t * | pkt | ) |
Get the IPv6 header from a given list of gnrc_pktsnip_t.
This function may be used with e.g. a pointer to a (full) UDP datagram.
[in] | pkt | The pointer to the first gnrc_pktsnip_t of the packet. |
kernel_pid_t gnrc_ipv6_init | ( | void | ) |
Initialization of the IPv6 thread.
kernel_pid_t gnrc_ipv6_pid |
The PID to the IPv6 thread.
This variable is preferred for IPv6 internal communication only. Please use Network protocol registry for external communication.