picotcp V1.7.0 released!

It's been a while since the last release, but it has been worth the wait. With version 1.7.0 we're introducing these changes:

Too many code changes to enumerate them all, but the most important changes are:

  • 6LoWPAN support
  • Relicensed to GPLv2 and GPLv3
  • Improved example code in the README.md and clarified our use of a Contributor License Agreement
  • Fixed issues reported by coverity scan
  • Removed potential memory leaks (especially in case of failing mallocs, i.e. out-of-memory situations)
  • Many code quality improvements, internal refactorings
  • Limited hotplug detection support (currently only on SLAACv4)
  • Improved Bonjour conformance (not there yet, but getting closer)
  • Improvement in DNS response parsing
  • Various other bugfixes

For more, please run `git log` :-)


picoTCP v1.7.0 TICS quality indicator

This section of the release notes will provide information on where and how the quality improved. To determine these numbers we use a whole range of tools like Tiobe Tics, TAHI IPv6 tests, Pareon Verify... (read more about this in our testing article).

Source & Binaries

Grab it while it's hot on our GitHub page or use the direct links below.

picoTCP-1.7.0.tar.gz or picoTCP-1.7.0.zip

From now on, we will include a compiled version of the manual with each release, check it out on our GitHub page

Awesome Jenkins CI Lamp

FOSDEM 2017 is here and that means that the picoTCP team is there too! Try to spot the green t-shirted developers and talk to them!

While we're at it, we've handed over a little package for our dear Jenkins friends! We've given them their own picoTCP powered CI Lamp to brighten up their stand. This lamp is designed and hand-assembled by Belgian Engineers (with components kindly provided by China) . If you'd like one yourself, get in touch with us and we'll see what we can do ;-)

This CI lamp is part of Intelligent Systems/Altran's Affordable Software Quality offer where we assist our customers and partners to improve their software quality, to automate testing (including hardware tests) and to bring an even better product to market! Are you in need of support? Contact us!

picoTCP becomes part of the IoT security landscape

picoTCP has joined forces with the Prpl Foundation, the open-source, community-driven, collaborative, non-profit foundation supporting the next generation connected devices industry.

This Thursday, July 14th, Prpl will give a workshop about “Hands-on Security by Separation for Connected Embedded Devices” on the IoT Evolution conference in Las Vegas. In this interactive development session, Prpl Foundation will analyze the technical details of recent high-profile IoT incidents, identify common attack patterns and propose technical solutions.

This diagram shows multiple VMs running on the embedded target. One of the VMs is running picoTCP

This diagram shows multiple VMs running on the embedded target. One of the VMs is running picoTCP

During this workshop, participants will learn how open source software like picoTCP and interoperable standards address serious IoT security flaws. As illustrated above, picoTCP will provide connectivity and open the application to the Internet, while remaining in its own isolated guest VM.

The prplHypervisor™ is the industry-first light-weight open source hypervisor, specifically designed to provide security through separation for the billions of embedded connected devices that power the Internet of Things. It leverages the power of hardware virtualization to create multiple distinct secure domains. Bare metal applications and rich operating systems can operate independently and securely within these domains; the prplHypervisor™ eliminates the possibility of lateral movement within the system while allowing secure high-speed inter-VM communications. It is a key component of the prplSecurity™ framework: a comprehensive collection of open source APIs providing hardware-level security controls such as root of trust, secure boot, secure hypervisor (prplHypervisor™), secure inter-vm communications (prplSecureInterVM APIs), key management and authentication (prplPUF™).

A PIC32 eval board with a crypto engine will be used during the workshop to run the cryptography that the prplPUF™ requires and, for connectivity, an external SPI Ethernet module, where all SPI accesses go through the prplHypervisor™.

The true power of Prpl’s “Hands-on Security by Separation for Connected Embedded Devices” workshop is that any VM has its own environment on an embedded target. The picoTCP VM is the only one that can access the SPI registers. In case of a security breach in one VM, the others are safe to keep operating due to RAM separation.

The source code for this workshop is available on Prpl's Github.  The different isolated VMs can be found in the bare-metal-apps/apps folder and the picoTCP sources in our own repository, due to license compatibility.

Espressif ESP8266 workshop

Some time ago one of our Dutch picoTCP engineers gave a workshop on how to use picoTCP on the Espressif ESP8266 wifi platform. This chip is very popular among hobbyists because it is really cheap, really small and pretty easy to get started with.

During this workshop we showed how easy it is to port picoTCP to such a platform and add functionality such as a DHCP server, mDNS support and a fully functional webserver serving http pages.

ESP8266 wifi chip

This evening, the twenty participants were able to learn what is needed to have picoTCP run on such a platform and receive all the performance and features of the TCP/IP stack.

If you are interested in learning how to do this yourself during such a workshop, let us know and we'll happily try to arrange another workshop near you.

HackerSpace @ May

On Tuesday May 31 6PM onwards, we're organizing the next picoTCP Hacker Night in our Ghent office. On this evening we'll go crazy with anything related to picoTCP. Bring your own projects, invent crazy plots to take over the world with picoTCP, help the project with some quick fixes or just listen in on what the rest is doing.

If you're interested in joining please send an email to info@picotcp.com with subject HackerSpace May Registration so we know to expect you and order some additional pizza and drinks.

You can find our office in the Ghelamco Arena in Ghent, which is here.

Here's an atmosphere photo of last time:

April HackerSpace in the Leuven office

workshop & presentation @ OpenTechSummit in Berlin

On May 5th, we'll organize our picoTCP introduction workshop for the very first time for the big audience at the OpenTechSummit in Berlin. So far, 70 people have followed our workshop and each of them had a great time getting to know picoTCP!

The workshop is entirely hands on, and will allow you to get started with picoTCP in your own projects! The best part is: You can join us for free, but seats are limited.

picoTCP workshop held in our Leuven office

picoTCP workshop held in our Leuven office

Register for the workshop: http://www.meetup.com/OpenXLab/events/230539055/
Register for OpenTechSummit: https://www.eventnook.com/event/ots16/register (Promotion code:WELOVEPICOTCP)

We'll give a presentation about picoTCP before noon, so don't forget to join us there too!

picoTCP v1.6.2 released!

Version 1.6.2 of picoTCP has been released containing the following changes:

  • Fixed major bug in timers, when timers are canceled and allocator reuses the address
  • Several bugfixes in PPP module
  • PPP: Added support for PAP
  • Improved C89 compatibility: support for Watcom DOS compiler
  • Several bugfixes in TCP
  • Support for TCP LINGER
  • Support for TCP KeepAlive mechanism
  • TCP: ensure the socket is destroyed upon connection abort from peer (RST)
  • Support for Multicast IPv6 + MLD
  • Improved IGMP support
  • DHCP client: support for hostname and domain name
  • DHCP client: avoid adding nameservers
  • IPv4: ensure that broadcast frames are not forwarded
  • IPv6: Fixed forwarding
  • Overall TioBE TICS score improved
  • fixed bug when using picotcp-memory manager where the wrong pico_free was called
  • fixed compiler warning for unused parameter
  • fixed unit tests (IGMP, MLD, PPP-CHAP)


This new section of the release notes will provide information on where and how the quality improved. To determine these numbers we use a whole range of tools like Tiobe Tics, TAHI IPv6 tests, Pareon Verify... (read more about this in our testing article)

picoTCP v1.6.2 TICS quality score label

picoTCP v1.6.2 TICS quality score label

We're working hard on including all these quality goodness reports into our release, here's already a sneak peak:

Grab it while it's hot on our GitHub page or use the direct links below.

picoTCP-1.6.2.tar.gz or picoTCP-1.6.2.zip (2MB)

From now on, we will include a compiled version of the manual with each release, check it out on our GitHub page

Presenting at Wireless Community

Our very own Daniele Lacamera will be attending and presenting at the 19th Wireless Community work meeting on October 29. We've done research on mesh networks using picoTCP in the past and will share the findings during this  event.

Wireless Community is an initiative by IMEC. It consists of a group of 150+ scientific experts from local industry, academia and innovation partners who share up-to-date information on wireless communication and standards.

VueForge Play Integration

With the whole "Internet of Things" revolution more and more data will be generated by machines in the coming years. VueForge helps making sense of this gigantic amount of valuable information, extracting the data that matters to you.

VueForge Play focusses on assisting you to manage these datastreams without having to develop your own Machine-to-Machine infrastructure. Here at picoTCP we've been very busy integrating our stack so tiny devices can communicate using the well known networking protocols when utilizing VueForge Play.

That being said, we showed off a demo using Seeedstudio's Arch Pro board at the IoT World Congress in Barcelona earlier this month. Things are shaping up nicely!

picoTCP v1.4.2 released!

The picoTCP team is happy to announce we released a brand new picoTCP version with the following updates and changes:

  • Added support for PPP over Serial line
  • Fixed memory/timer leaks in sNTP
  • Improved RFC compliance of DNS client
  • Accept RST/ACK as fast connection closing
  • Several minor bugfixes and improvements
  • Removed some dead code

Grab it while it's hot on our GitHub page or use the direct links below.

picoTCP-1.4.2.tar.gz or picoTCP-1.4.2.zip (2MB)

Unit Testing guidelines

We like to ensure everyone using picoTCP that we take software quality very serious. As we have discussed in a previous post, there is a big collection of testing tools and scripts that are running continuously on our code base (TICS, Check, ...)

Since picoTCP is freely available and everyone can contribute to it, it is important to define a good and standardized way of testing bits and pieces of functionality before it ends up in the master branch on GitHub. With this in mind, we've written a short description on how parts should be tested when working on a feature or specific code change in your fork.

Like all the other guides, we've published this guide on the picoTCP GitHub wiki.

picoTCP v1.4.0 released!

We just released a new version of picoTCP. Even though you can get the latest and greatest code from the GitHub master branch we like to make 'official' releases as well.

So what was changed since last version? Let's have a look:

  • Full compliance to IPv6 Specs RFC2460
  • Full compliance to SLAACv6 RFC4862
  • Full compliance to ICMPv6 RFC4443
  • Reworked IPv6 Neighbor discovery mechanism (RFC4861)
  • Fixed IPv6 fragmentation

This release has many improvements and full RFC compliance for multiple IPv6 components. This will ensure that your picoTCP IPv6 application can operate perfectly in any networking environment.

  • New dynamic routing protocol: AODV

It introduces a new routing protocol for ad hoc networks. We'll be covering this more in depth in an upcoming article

  • Unified support for Cortex M3/M4 
  • Explicit support for custom porting
  • TFTP: several bug fixed.
  • UDP: fix CRC calculation
  • Several minor memory access fixes
  • Fixed Copyright notes
  • Fixed coding style

Get it on our GitHub page, or use these direct links:

picoTCP-1.4.0.tar.gz or picoTCP-1.4.0.zip (2MB)

Zero Configuration Networking with picoTCP

Jelle De Vleeschouwer is implementing the Zero Configuration Networking module for picoTCP for his college education final project. In this post he explains what it is all about.

Zero Configuration Networking with picoTCP

As a result of the growing ‘Internet of Things’-revolution, more and more embedded devices are connected to a network. The need arises for a simple solution to configure these devices in order to let them communicate with each other. Very often, these devices don’t even have a direct user-interface, so configuring them isn’t as plug and play as we would like them to be. You might prefer them to work out of the box. A possible solution for this problem is Zero Configuration Networking.

Zero Configuration Networking

Zero Configuration Networking (zeroconf in short) is, as the name implies, networking without any (human) intervention. It is a combination of technologies to provide the possibility to do networking without having to configure them manually using three technologies: Addressing, Naming and Service Discovery. If you’re an Apple user, you might have already used zeroconf. Somehow all of your iDevices are able to find eachother and can exchange information. Apple calls their zeroconf implementation Bonjour.

AirPlay uses Bonjour to discover available streaming devices on the network automatically

AirPlay uses Bonjour to discover available streaming devices on the network automatically


First of all, if you want to communicate with a device in a network, it needs an IP address. There are several ways to obtain one, but the most common and straightforward way is using DHCP. If the DHCP-server is somehow unable to hand out IPs, zeroconf networks can handle this gracefully using link-local addressing. Such an address is only valid on the local link (known as the part of the network that never passes a router) which makes a device reachable within the network without relying on a server.


We have obtained an IP address to communicate with, but we don’t want to have to remember the IP of devices such as a printer. If it was auto configured, you don’t really know the IP and in fact you don’t want to know. Therefore a name to address a device would be easier to remember. DNS serves this purpose on the internet but having a DNS server in your local network is not preferable. That’s where multicast DNS (mDNS for short comes) into play. It uses the same packet format, resource records, etc. but you don’t need a server. All the hosts in the network work together to maintain the local domains. A common naming system would be to use a “.local” address, e.g. printer_color.local

Service Discovery

Instead of an IP, we remember the device’s name but there’s even better technology! Devices that offer a service can be made discoverable for others on the network. For example, if we are using VLC media player we’d like to discover video streaming services on the network or If we we want to print something, we want to discover all the printing services available. DNS based Service Discovery can do just that. DNS-SD is a layer on top of mDNS which includes SRV and TXT records. These records contain information such as a protocol, a port number etc. on how to connect to a specific service.

With information about services being exchanged by mDNS, hosts can discover them whenever they need something from the network without significantly impacting the link. This makes zeroconf networking especially interesting for ‘Internet of Things’-devices, which often have limited resources available. Zeroconf and picoTCP go hand in hand to provide fully automatic network configuration on embedded devices.

Check out the following info video by Cisco to learn more on mDNS and DNS-SD

Goal and status

The goal of this project is to provide a working DNS-SD module for picoTCP and using it to set up a zeroconf video streaming service. Jelle is very interested in this topic and is delighted to work with us and play a part in the picoTCP development.

Currently the mDNS module is a work in progress. Once it is finished, the DNS-SD functionality will be added. The roadmap for the mDNS module defines a working implementation by early April. If you are interested in the progress feel free to follow Jelle’s development logbook on GitHub.