[click] paper help
Douglas S. J. De Couto
decouto at lcs.mit.edu
Thu Nov 8 12:57:23 EST 2001
We are using Click as the software infrastructure for the Grid ad hoc
routing protocol.
There are two main kinds of advantages: implementation details, and
unique Click-specific benefits.
Implementation benefits (no particular order):
1) nice build system, no screwing around with makefiles. the ability
to do click-mkmindriver. of course, we wouldn't need this if click
didn't include the kitchen sink...
2) ``self''-documenting. the ability to extract man pages from
element source is really cool, and encourages you to keep comments
up to date. i even use the man pages for my own elements...
3) userlevel. this aids debugging. it also makes it more portable.
we have on set of code that has run on FreeBSD, OpenBSD, Linux,
i386, ipaqs, etc. a key benefit of userlevel is that you can
create multiple ``virtual'' routers in a network by coding up the
appropriate perl script and config file. this is useful for
testing: nothing has to actually run connected to the real world.
Even if your final protocol deployment runs in the kernel, you can
still use the userlevel testing...
4) relatively rich c++ library (strings, vector, map, etc). it's too
bad it doesn't use the standard c++ library... oh well.
Unique Click benefits (no particular order):
1) elements are great. they are a really cool concrete realization of
modularity. when you split your protocol into elements (even if
they are probably not quite the right breakdown for the specific
protocol), you get a unit of code that is easier to compile and
test. Also, it somehow makes it easier to be incremental about
changes. i can't put my finger on it though...
2) Having a configuration language is great. You can change your
protocol without programming. Also, many kinds of bugs happen at a
level that can be fixed without recompilation. These are mostly
bugs from bad constants, like classifier offsets and patterns.
Although it may be true that some of these bugs *come from*
splitting the configuration/hookup from the C++ level (which knows
about sizes and offsets) -- this is not an issue if you are using
predefined protocols like IP etc. which have a rich set of
elements with lots of protocol knowledge coded into them
(IPCLassifier for example).
The configuration is great for debugging. i.e. Print
debuggin... you can add print statements to trace packet flow and
contents without recompiling any code. Bonus!
3) We use the predefined els for IP and ICMP processing, IP
classifications, ARP, and NAT functions. Double Bonus!
4) The easy-to-use control mechanisms. ControlSocket/ChatterSocket
(plus chatter channels) let you expose cool protocol stuff to the
application with no kernel / system call hacking. This makes it
easier to prototype the protocol/application interface with low
overhead. e.g. we have adding a Grid traceroute protocol,
geocasting, and application access to routing tables and other
protocol data structures.
I probably forgot some other really useful stuff.
cheers,
d
--
Douglas S. J. De Couto decouto at lcs.mit.edu
More information about the click
mailing list