FreeRTOS + TCP/: IPv6 support

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.

FreeRTOS + TCP/: IPv6 support

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.

FreeRTOS + TCP/: IPv6 support

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!

FreeRTOS + TCP/: IPv6 support

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 ipconfigDRIVERINCLUDEDTXIPCHECKSUM ( 1 )

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

FreeRTOS + TCP/: IPv6 support

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.

FreeRTOS + TCP/: IPv6 support

FreeRTOS + TCP/: IPv6 support

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.