[Click] dynamic changes to a click configuration

Mike Wilson mlw2 at arl.wustl.edu
Sun Mar 18 10:44:12 EST 2007


Hi, all,

 	I've used click for a number of fairly typical projects - IP 
routers, tracking latency and throughput, etc.  Now I've got a project 
that I don't think fits the click model.  I certainly don't see a good
way to do it, but I wanted to double-check with the rest of the click 
community before I abandoned click as an option.

 	Picture a router with a potentially unlimited number of virtual 
interfaces of varying forms of encapsulation.  What I need is a way to
dynamically add and remove interfaces, and change the encapsulation of 
virtual interfaces on this router.  It's enough that these virtual 
interfaces only exist within click, but I've got nothing against them
also being OS-level virtual interfaces, too.  The protocols over the
virtual interfaces are not necessarily all IP.
 	For any static configuration, click is simple and easy.  I'd have 
something like this, for a 2-interface version:

FromDevice("eth0") -> Classifier(...)[0] -> Strip(...) -> ... ;
                       Classifier(...)[1] -> Strip(...) -> ... ;

 	Now if I need to add a new interface, I can't because the number 
of Classifier outputs are static.  I suppose I could use a classifier with 
a huge number of output and only map to the ones in use, then change the 
filters on the fly.  Classifier doesn't do this, but the IPRouteTable 
does, and I'm sure some of the other elements do.  However, they *don't* 
allow me to change the decapsulation in the next stage.

 	A heavy-handed approach would be to re-write the configuration 
file and kill/restart click.  Unfortunately, this loses everything in the 
Queues.  I could dummy out a kludged configuration where there are 
multiple click configs and the queuing is all in separate configurations, 
but this strikes me as increasingly ugly.  I think I'd potentially lose a 
packet in the non-queuing configurations, too.

 	The next approach is to write my own elements that just track
all of the virtual interfaces internally, applying the appropriate 
decapsulation and processing for each one.  I think I'd end up embodying 
most of the functionality from a lot of other elements in my new element, 
losing the major benefit of click -- having it all pre-written and 
tested.

 	Is this problem just ill-suited for the click model, or is there 
an option I'm missing?  The ideal would be to change the configuration on 
the fly by adding new elements, changing the intial Classifier to add the 
new element chain (and probably the queues at the far end to accept 
packets from it).  I don't think this is even in the click model, is it?

-Mike Wilson


More information about the click mailing list