[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