[Click] Queues and notifications

Mike Wilson mlw2 at arl.wustl.edu
Thu Jan 25 15:18:43 EST 2007


I've got a large, complex click config where I read from UDP sockets and 
write to a raw socket, routing packets from UDP tunnels.  Unfortunately, I 
can't seem to get notifications working in the Queues.

I've stripped the config down to a fairly simple case that replicates the 
problem, at least on my system.  If I use Queue or NotifierQueue 
components for the queues, I either get nothing out the interface, or I 
get 1-2 packets and then nothing.  If I use a SimpleQueue, everything 
works just fine.

My limited understanding is that the SimpleQueue doesn't do notifiers, so 
the pull components downstream must use polling.  In other words, it's a 
massive CPU hog - I get 99% utilization to click with a SimpleQueue.  With 
Queue, I don't even see click in my top(1) list.

Am I mis-using the queue components somehow, or is this a bug?  Do 
RawSockets use notifiers?

-Mike Wilson

---replication example---

// Warning, this config will send bogus UDP packets to 172.16.46.20.
// Unfortunately, the problem doesn't manifest with a Discard at the end.

AddressInfo(myip  128.252.160.209,
             NetRtr 172.16.46.12,
             HostRtr 172.16.46.20,
             NetRoute 172.16.46.0/24);

PortInfo(NetTun 0xA121,
          HostTun 0xA122);

out :: RawSocket("UDP");
rt :: RangeIPLookup(NetRoute  0, HostRtr 1);
sched :: DRRSched();

TimedSource -> UDPIPEncap(HostRtr, 5005, HostRtr, 5005) -> 
IPPrint("Injecting Packet") -> check :: CheckIPHeader;
Idle -> rt;

check[1] -> Print("Injected Bad packet") -> Discard;
check[0] -> IPPrint("Injected Valid Packet") -> GetIPAddress(16) -> rt;

rt[0] -> UDPIPEncap(myip, NetTun, NetRtr, NetTun) -> IPPrint("Net Route") 
-> SimpleQueue -> [0]sched;
rt[1] -> UDPIPEncap(myip, HostTun, HostRtr, HostTun) -> IPPrint("Host 
Route") -> SimpleQueue -> [1]sched;

sched -> IPPrint("Sending") -> out;



More information about the click mailing list