The Click modular router: fast modular packet processing and analysis
Pull request Compare This branch is 17 commits ahead, 366 commits behind kohler:master.
Feng23 and Yuri Volchkov bug: a string created by "operator new" should destroyed by "delete"
This fixes a crash in case click is configured with --enable-dmalloc:
"free" gets a parameter which is not the beginning address of the
allocated memory.
Latest commit a092d40 Oct 4, 2017
Failed to load latest commit information.
apps clicky: Fix display on recent GTK+. Jan 17, 2013
bsdmodule Handler flag cleanup. Sep 29, 2013
conf uses the device's default gateway. Jan 17, 2013
doc More elementdoc nits. Jul 22, 2013
drivers Add polling patch for e1000- driver. Feb 28, 2010
elements minios: fix memory leak: packets have to be freed with lwip (issue #40) Aug 29, 2017
etc Package make clean cleans all. Mar 18, 2014
exopc Lexer: Make configuration parsing iterative rather than recursive. Apr 22, 2012
include Merge branch 'for-kohler' of git:// into cnp… Jun 3, 2014
lib Minios nits. Jun 3, 2014
linuxmodule RecycledSkbPool: make _lock non-volatile Dec 10, 2013
m4 configure: Fix argument order for probing libpcap. May 21, 2013
minios bug: a string created by "operator new" should destroyed by "delete" Oct 16, 2017
ns nsclick: Correct offset when parsing serialized defines. Sep 11, 2013
test click: Fix issue with IPFilter processing Ethernet addresses May 20, 2014
tools Stop supporting Linux 2.4. Sep 28, 2013
userlevel Use newer spelling of Handler::h_nonexclusive. Sep 29, 2013
.gitignore Add an ignorable. Mar 20, 2014
AUTHORS Minor authors updates Sep 28, 2011
COPYING Clarify licensing terms. Jun 21, 2013
DISTFILES Clipboard: Simple regression testie Apr 28, 2014
FAQ List all driver names explicitly. Dec 1, 2011
INSTALL INSTALL: update links to moved repositories Sep 14, 2017
LICENSE Clarify licensing terms. Jun 21, 2013 click: Add minios build Apr 15, 2014
NEWS Prepare for 2.1 release. Jan 17, 2013
NODIST Add more files to the distribution. Jul 17, 2011
README Stop lying about CVS Oct 6, 2013
aclocal.m4 update makefile boilerplate, including using the true aclocal May 12, 2006 Fix click-buildtool makepackage for newer object suffixes. Mar 18, 2014 Netmap zero-copy (and some other improvements). Feb 21, 2012
click-mkelemmap Avoid uninitialized variable warning. Jul 12, 2011
click.spec We no longer need $infodir. Nov 9, 2011 Enabled assertions support for bsdmodule. Jul 12, 2011 Stop supporting Linux 2.4. Sep 28, 2013 minios: Compile with HAVE_PORTABLE_LLRPC May 27, 2014 Timestamp closure. Aug 25, 2008 User-level Click: Support netmap. Feb 20, 2012
config.guess Yet newer config.sub and config.guess. Sep 21, 2011 Merge branch 'for-kohler' of git:// into cnp… Jun 3, 2014 Build process: Support building packages with DESTDIR. Nov 9, 2011
config.sub Yet newer config.sub and config.guess. Sep 21, 2011
configure Merge branch 'for-kohler' of git:// into cnp… Jun 3, 2014 Merge branch 'for-kohler' of git:// into cnp… Jun 3, 2014
install-sh update makefile boilerplate, including using the true aclocal May 12, 2006 README updates; add install-only-if-changed support, even when instal… May 19, 2006
missing update makefile boilerplate, including using the true aclocal May 12, 2006
mkinstalldirs update makefile boilerplate, including using the true aclocal May 12, 2006 Minios nits. Jun 3, 2014



    This is the README file for the source release for the Click modular
software router. More recent information may be available on the Web at

    Click is a modular router toolkit. To use it you'll need to know how to
compile and install the software, how to write router configurations, and
how to write new elements. Our ACM Transactions on Computer Systems paper,
available from the Web site, will give you a feeling for what Click can
do. Using the optimization tools under CLICKDIR/tools, you can get even
better performance than that paper describes.


CLICKDIR			this directory
CLICKDIR/apps			Click-related applications
CLICKDIR/apps/clicky		... GTK program for displaying configurations
				    and interacting with drivers
CLICKDIR/apps/ClickController	... Java program for interacting with drivers
CLICKDIR/bsdmodule		FreeBSD 4.5 kernel module driver [NOT WORKING]
CLICKDIR/conf			configuration files
CLICKDIR/doc			documentation
CLICKDIR/drivers		polling device drivers
CLICKDIR/elements		element source code
CLICKDIR/elements/analysis	... for trace analysis and manipulation
CLICKDIR/elements/app		... for application-level protocol elements
CLICKDIR/elements/aqm		... for active queue management (RED, etc.)
CLICKDIR/elements/bsdmodule	... for FreeBSD kernel-specific elements
CLICKDIR/elements/ethernet	... for Ethernet elements
CLICKDIR/elements/etherswitch	... for Ethernet-switch elements
CLICKDIR/elements/grid		... for Grid elements (experimental)
CLICKDIR/elements/icmp		... for ICMP elements
CLICKDIR/elements/ip		... for IP, ICMP, and TCP/UDP elements
CLICKDIR/elements/ip6		... for IPv6 elements
CLICKDIR/elements/ipsec		... for IPsec elements
CLICKDIR/elements/linuxmodule	... for Linux kernel-specific elements
CLICKDIR/elements/local		... for your own elements (empty)
CLICKDIR/elements/ns		... for 'ns'-specific elements
CLICKDIR/elements/radio		... for communicating with wireless radios
CLICKDIR/elements/standard	... for generic elements
CLICKDIR/elements/tcpudp	... for TCP and UDP elements
CLICKDIR/elements/test		... for regression test elements
CLICKDIR/elements/threads	... for thread management elements
CLICKDIR/elements/userlevel	... for user-level-specific elements
CLICKDIR/elements/wifi	        ... for 802.11-specific 'WiFi' elements
CLICKDIR/etc			Linux and NS patches and other files
CLICKDIR/etc/samplepackage	sample source code for Click element package
CLICKDIR/etc/samplellrpc	sample source code for reading Click LLRPCs
CLICKDIR/etc/diagrams		files for drawing Click diagrams
CLICKDIR/etc/libclick		files for standalone user-level Click library
CLICKDIR/include/click		common header files
CLICKDIR/include/clicknet	header files defining network headers
CLICKDIR/lib			common non-element source code
CLICKDIR/linuxmodule		Linux kernel module driver
CLICKDIR/ns			'ns' driver (integrates with the ns simulator)
CLICKDIR/test			regression tests
CLICKDIR/tools			Click tools
CLICKDIR/tools/lib		... common code for tools
CLICKDIR/tools/click-align	... handles alignment for non-x86 machines
CLICKDIR/tools/click-combine	... merges routers into combined configuration
CLICKDIR/tools/click-devirtualize   ... removes virtual functions from source
CLICKDIR/tools/click-fastclassifier ... specializes Classifiers into C++ code
CLICKDIR/tools/click-mkmindriver    ... build environments for minimal drivers
CLICKDIR/tools/click-install	... installs configuration into kernel module
CLICKDIR/tools/click-pretty	... pretty-prints Click configuration as HTML
CLICKDIR/tools/click-undead	... removes dead code from configurations
CLICKDIR/tools/click-xform	... pattern-based configuration optimizer
CLICKDIR/tools/click2xml	... convert Click language <-> XML
CLICKDIR/userlevel		user-level 'click' driver


    The 'INSTALL' file in this directory contains installation
instructions. User documentation is in the 'doc' subdirectory. This
directory contains manual pages for the Click language, the Linux kernel
module, and several tools; it also has a script that generates manual pages
for many of the elements distributed in this package. To install these
manual pages so you can read them, follow the 'INSTALL' instructions, but
'make install-man' instead of 'make install'.


    Before playing with a Click router, you should get familiar with the
Click configuration language. You use this to tell Click how to process
packets. The language describes a graph of "elements", or packet processing
modules. See the 'doc/click.5' manual page for a detailed description, or
check the 'conf' directory for some simple examples.

    Click can be compiled as a user-level program or as a kernel module for
Linux. Either driver can receive and send packets; the kernel module
directly interacts with device drivers, while the user-level driver uses
packet sockets (on Linux) or the pcap library (everywhere else).

User-Level Program

    Run the user-level program by giving it the name of a configuration
file: 'click CONFIGFILE'.

Linux Kernel Module

    See the 'doc/click.o.8' manual page for a detailed description. To
summarize, install a configuration by running 'click-install CONFIGFILE'.
This will also install the kernel module if necessary and report any errors
to standard error. (You must run 'make install' before 'click-install' will

NS-3 Simulator

    See 'INSTALL' for more information on how to enable the NS-3 Click
Integration. Further information on ns-3-click is available in the ns-3

NS-2 Simulator

    See 'INSTALL' for more information.  Once a Click-enabled version of NS-2
is installed, the 'ns' command is able to run Click scripts as part of a
normal NS-2 simulation.


    A few configurations are included in the 'conf' directory, including a
Perl script that generated the IP router configurations used in our TOCS
paper ('conf/') and a set of patterns for the Click pattern
optimizer, click-xform ('conf/ip.clickpat'). Please check back to our Web
site for more up-to-date configurations.


    Please see the FAQ in this directory to learn how to add elements to


    Most of Click is distributed under the Click license, a version of
the MIT License. See the 'LICENSE' file for details. Each source file
should identify its license. Source files that do not identify a
specific license are covered by the Click license.

    Parts of Click are distributed under different licenses. The
specific licenses are listed below.

    drivers/e1000*, etc/linux-*-patch, linuxmodule/proclikefs.c: These
portions of the Click software are derived from the Linux kernel, and
are thus distributed under the GNU General Public License, version 2.
The GNU General Public License is available via the Web at
<>, or in the COPYING file in this

    include/click/bigint.hh: This portion of the Click software
derives from the GNU Multiple Precision Arithmetic Library, and is
thus distributed under the GNU Lesser General Public License, version
3. This license is available via the Web at
<>. The LGPL specifically permits
direct linking with code with other licenses.

    Element code that uses only Click's interfaces will *not* be
derived from the Linux kernel. (For instance, those interfaces have
multiple implementations, including some that run at user level.)
Thus, for element code that uses only Click's interfaces, the BSD-like
Click license applies, not the GPL or the LGPL.


    We welcome bug reports, questions, comments, code, whatever you'd
like to give us. We also have a mailing list for software
announcements. Write us at

	- The Click maintainers:
	  Eddie Kohler
	  and others