FreeRTOS + TCP/: IPv6 support

saadsaeed wrote on Wednesday, December 05, 2018:

Hello,

  • Is their IPv6 support available in the TCP stack used in FreeRTOS?
  • If not, than, in how much time it would be released?

Thanks.

heinbali01 wrote on Friday, December 07, 2018:

The official release of FreeRTOS+TCP uses IPv4 only, and a single Network Interface.

There is a more experimental release called +TCP /multi /IPv6, which is being used by a few developers.

You can find the source code here, where is says “on this separate link”.

In the next year, hopefully, the IPv6 release will be further developed and tested.
If you have any questions about /multi or /IPv6, you can also write me directly to hein [at] htibosch [dot] net
I will send you sample code and more descriptions of the approach.

medaver wrote on Friday, March 08, 2019:

I have IPv4 and IPv6 both running on my stack. I can successfully ping both my IPv4 and IPv6 IP from my PC. I am now trying trying to connect to the web server. It works fine using the IPv4 address but not IPv6.

When the client (Chrome) is trying to connect on port 80 with IPv6, I see the “SYN” being sent. The server responds with “SYN, ACK” but then an “ACK” is never sent back to the server from the client. The client times out and then retries with a “SYN” again.

Attahced are wireshark captures for both my IPv4 and IPv6 transactions.

Any insight would be helpful!

heinbali01 wrote on Saturday, March 16, 2019:

Hi Dave,

We had contact through email already, but here some more information that may be interesting for other users as well.

I just tried out FreeRTOS+TCP /multi /IPv6 on my STM32F407 board.

I managed to ping my board, and also to connect to TCP port 80 for a surf session.

I’m attaching ‘IPv6_conversaion.pcap’, which shows that the SYN-ACK is accepted my the browser. The conversation is very short because /index.html does not exist.

When opening your PCAP file, WireShark reports CRC errors. These errors are often caused by the fact that checksums are “offloaded”, i.e. they are checked by the hardware, and when that happens, WireShark will show strange values.

While developing, I recommend to switch off all CRC offloading ( UDP, TCP, IPv4, IPv6 ). It doesn’t really affect the network performance because laptop CPU’s are extremely fast.

Could you check who sets the TCP checksum in your project?

If you have:

#define ipconfigDRIVER_INCLUDED_TX_IP_CHECKSUM        ( 1 )

either networkInterface.c must calculate the CRC’s, or the hardware. Is your (Atmel?) EMAC capable of calculating the IPv6 checksum?

medaver wrote on Monday, March 18, 2019:

Hi Hein,

I did have checksum offloading turned off. I found that prvTCPReturnPacket() does not call usGenerateProtocolChecksum() for IPv6. The TCP protocol checksum was not getting generated (and there is no IPv6 header checksum). I modified the code and now my HTTP server properly connects and loads web pages.

medaver wrote on Monday, March 18, 2019:

heinbali01 wrote on Monday, March 18, 2019:

Hi Dave,

I found that prvTCPReturnPacket() does not call usGenerateProtocolChecksum() for IPv6

Oops! That had gone unnoticed because on all platforms on which I tested IPv6, the EMAC calculates the RX and TX checksums. Sorry about that.

Hi There,
This question asked more than a year back.
After a year do we have an update on FreeRTOS official IPV6 stack ?

thanks

We are actively working on IPv6 support in FreeRTOS + TCP. While we have made significant progress, there is more work to do internally (predominately testing and validation) before we can make a release in the FreeRTOS labs. We will update timing as we get closer to making this updated release.

2 Likes

Thanks Dan.
A rough timeline would be helpful for us to plan our project deliveries.

Any word from AWS on a pending release of the IPv6 update?

You can follow the development here https://github.com/aws/amazon-freertos/tree/feature/ipv6/libraries/freertos_plus/standard/freertos_plus_tcp

A small correction, the /multi /IPv6 version can be followed here https://github.com/aws/amazon-freertos/tree/feature/ipv6/libraries/freertos_plus/standard/freertos_plus_tcp_multi

The difference it the _multi in the end.

2 Likes

Thanks for the log waiting IPv6 + multi stack. I am wondering why this is not pushed into FreeRTOS git – https://github.com/FreeRTOS/FreeRTOS/tree/master/FreeRTOS-Plus.

Is this AWS package is still WIP ?

The /multi /IPv6 version is still in preparation. The mentioned PR is use to let the software undergo all kinds of testing. But you are right: eventually the library will appear on github/freertos/freertos.

Is this AWS package is still WIP ?

It is in a testing stage.

Hi,
Thanks for bringing the long waited TCP+multi stack.
What is this branch for ? https://github.com/FreeRTOS/FreeRTOS/tree/feature/ipv6_multi_beta
I do not see the freertos_plus_tcp_multi changes here.

@rishavnath : the branch you mention is only there as a working branch: it is used to review and discuss the new sources.
If you want to download the complete sources, see here.
What platform are you planning to use?

We have our custom core baed on Tensilica.
Any API reference and sample code available for TCP+Multi stack ?

We have our custom core based on Tensilica.

Is that like an ARM processor in an FPGA?

And do you have a NetworkInterface already? That is the driver between FreeRTOS+TCP and your hardware.

I have just sent you some documents and a reference to some /multi /IPv6 projects in a private message.

@htibosch Thanks for the documents.
Right now we are using SystemC based simulater where FreeRTOS runs on the CPU model. Instead of any LAN card we are using nPcap as n/w device, I have a very simple working Driver. We tested DHCP and a HTTP server on this set-up.
IPV6 and multiple interface support forcing us towards lwip. I hope the official tcp+multi release not far away.