Skip to content

Serval Support in the Linux Kernel

erimatnor edited this page Nov 1, 2012 · 3 revisions

The Linux kernel's network stack is somewhat modular, but doesn't really provide clean interfaces between network protocols and layers in a way that one would hope for and expect. This makes it harder to support new network protocols and stacks, like Serval. Perhaps the kernel's design, in many cases, out of necessity (e.g., for performance reasons), but in many cases it is just poor design or a consequence of historical cruft. If you are hacking the network stack (like we are in the Serval project), you quickly notice that the network code is frequently restructured between kernel releases, often with changes in kernel interfaces and data structures. This is a double edge sword---on one hand changes accommodate new features and clean up cruft, but they also make it hard to keep code that lives out of the kernel tree compatible with older kernels. More important, this may also be an indication that the Linux kernel has yet to nail down a good design for the network code that naturally accommodate new protocols and features without significantly altering the existing code.

Here we will point to a couple of design decisions in the Linux kernel's network stack that could benefit from improved abstractions. Now, I am personally not in favor of abstractions in code for abstractions sake, but when they truly help, I think they are a very powerful tool that deserve considerable thought and attention.

To be updated.

Clone this wiki locally