Back to work

Network protocol development

Network Protocol

Layer 2 Tunneling Protocol for Linux

The Layer 2 Tunneling Protocol (L2TP) is a standard network protocol for tunnelling network traffic over public IP networks.

It is widely used in VPN connections, as well as in home broadband connections to tunnel customer traffic into the ISP's network.

The Linux Kernel L2TP subsystem

We authored the mainline kernel L2TP subsystem, and continue to maintain it.

Our code was first merged as a part of Linux 2.6.23, back in 2007. Since then we have contributed ongoing improvements, including the addition of L2TPv3 support in version 2.6.35.

When working on the initial L2TP code we worked with the Linux kernel community to design the implementation such that the datapath is handled entirely by the kernel, while the control aspects of the protocol are delegated to userspace.

This design maximises the efficiency of bulk data transfer, while keeping the complexity and flexibility of the control protocol implementation in userspace -- the best of both worlds!

Userspace daemons

In addition to implementing the kernel L2TP support, we have developed a range of userspace daemons implementing the L2TP control protocol in userspace.

Our early OpenL2TP daemon featured L2TPv2 support, and was packaged in mainstream distros. It went on to form the basis for our commercial ProL2TP prodcut line, which we have licensed to network equipment manufacturers and network operators around the world.

Open Source L2TP

In addition to our commercial ProL2TP suite, we have also released an open source golang L2TP library, go-l2tp, intended for building L2TP applications on Linux systems using the Go programming language.

The bundled kl2tpd application in go-l2tp is now used by default by nm-l2tp, a VPN plugin for the widely-used NetworkManager tool.