You are here

Introduction to Click Modular Router

Submitted by bryan on Sat, 02/09/2013 - 12:33

The Click Modular Router was originally developed by Eddie Kohler at MIT as a Ph.D project, finished in Nov 2000. The idea behind the project was to show that a router could be represented as a directed graph, where packets would flow along the edges, and be processed by elements, located at the vertices. This paradigm is not uncommon to router developers, but it is very hard to find any software tool that supports this to the extent that makes it really usable for router development. One might argue that for example Netfilter can do the same, since packets jump from table to table. But there is more to it than that. Click implements push and pull processing, meaning that a device that reads a packet from the network pushes the packet into the router, but a device that sends a packet pulls it instead. For example, a queue has a push input and a pull output. Click also allows an element to inspect its upstream and downstream paths, asking for example “are there any upstream queues that are non-empty?” and getting the right answer even when there are several other elements between the caller and the actual queues..
Click was originally designed to run in-kernel, but a user-space driver is also available and has become very popular. Both the in-kernel and the user-space implementations forward around 0.4 Mpps on standard hardware, mainly due to the old-fashioned “skb” packet mechanism in Linux. Click can however be configured to use Netmap from university of Pisa instead. They claim to have measured around 4 Mpps.
My name is Lars Bro. I work with Siemens in a department that develops wireless systems for communication between trains and landside. I design routers to test these systems, generating and validating traffic flows, simulating any number of running trains, correlating with packets obtained from radio sniffers and introducing errors and delays. I have had very good experience using Click, in fact, the only Linux networking command I need to use is “ip link set up”. My main focus is on writing code generators, since Click routers tend to grow quite large. When you first have a good understanding of the problem at hand, say, verifying one packet flow through one train, it is fairly easy to duplicate this into thousands of data flows through hundreds of trains.
During the talk, I would like to make a small demo, showing how elements are put together to perform some simple tasks, and how to control the router execution.

Schedule info
Lars Bro