This FreeRTOS Labs
project is adding IPv6
functionality to the currently IPv4 only FreeRTOS+TCP TCP/IP stack. While the resultant dual IPv4 / IPv6 version is fully functional, it is still undergoing optimisation, test coverage and documentation improvements, and memory safety checks. Until that work is complete the code is available as a branch of the FreeRTOS+TCP GitHub repo
FreeRTOS+TCP IPv6 Functionality
IPv6 functionality can be included as a compile time option. When included, the IPv6 IP-addresses can be configured either statically, or automatically using either Router Advertisement (RA) (along with SLAAC) or DHCP version 6 (DHCPv6).
When using Stateless address auto-configuration (SLAAC), the device will first receive the address of a network prefix. Then it will take a random IP-address that is valid, and it will test if the address is already in use in the LAN. These addresses can be public Internet addresses, which means that NAT is not needed, only a IPv6 gateway.
The IPv6 functionality adds 3 new modules:
Introduces the concept of end-points and address resolution. See the page about “multiple interfaces“. These are necessary to get both IPv4 and IPv6 addresses.
Neighbourhood Detection: this handles all ICMPv6 messages. It does the (MAC-) address resolution, along with a cache, ping and router solicitation.
This is the DHCPv6 client. Note that it will create a session for each of the end-point that has DHCP enabled.
This implements Router Solicitation and SLAAC. An IPv6 router advertises a network prefix, and the end-point will select its own IP-address. By issuing Neighbour Solicitation messages, it will find out if the chosen address is unique.
The how to setup and run a demo for IPv6 page provides instructions on setting up an IPv6 demo
The IPv6 and multiple interface functions page provides information on new functions required to use both IPv6 and multiple interfaces.
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.