IPv6 networking on Arduino
IPv6 is starting to become more commonly supplied by major ISPs in the UK and has been well supported for a long time by mobile phones and desktop operating systems. The percentage of data being transported over IPv6 (compared to IPv4) is expected to go up enormously in 2017 within the UK.
However many embedded, niche and hobby devices are a long way from supporting IPv6. Because IPv6 addresses are 4x longer than IPv4 addresses, it is a common assumption that it also uses a lot more resources as well. I wanted to challenge that assumption and see if it was possible to implement IPv6 on a very constrained device, such as Arduino.
My implementation has support for SLAAC, DNS Client, a basic HTTP Server and UDP Client and Server. Example programmes fit within 2kB of RAM and 16KB of Programme Memory. While the implementation would not pass ipv6ready certification, it is at least as functional as a similar libraries for IPv4.
Writing an IPv6 library for Arduino was is a personal challenge that allowed me to explore IPv6 in a lot of depth and understand the limits of the Arduino platform better.
Nicholas Humfrey gives an overview of the challenges and things he learnt from implementing IPv6 from scratch on a very resource constrained Arduino 8-bit micro-controller.