[Click] strange Queue behaviour

Peter De Cleyn peter.decleyn at gmail.com
Tue Oct 12 05:08:14 EDT 2004


Thanks Eddie, for this fix!

Peter

On Fri, 08 Oct 2004 14:58:43 -0700, Eddie Kohler <kohler at cs.ucla.edu> wrote:
> Hi Peter!
> 
> It turned out this was a bug in user-level ToDevice.  Here's the relevant patch:
> 
> diff -u -u -w -r1.27 todevice.hh
> --- elements/userlevel/todevice.hh      8 Oct 2004 21:25:23 -0000       1.27
> +++ elements/userlevel/todevice.hh      8 Oct 2004 21:54:13 -0000
> @@ -90,7 +90,7 @@
>     ~ToDevice();
> 
>     const char *class_name() const               { return "ToDevice"; }
> -  const char *processing() const               { return AGNOSTIC; }
> +  const char *processing() const               { return "a/h"; }
>     const char *flags() const                    { return "S2"; }
> 
>     int configure_phase() const { return FromDevice::CONFIGURE_PHASE_TODEVICE; }
> 
> So what was going on, you ask??  In the configuration with a Queue, ToDevice was
> operating in "full pull mode" -- rather than the intended input=pull,
> output=push -- and Discard (NOT ToDevice) ended up pulling packets off the
> queue.  They went trhough ToDevice as if ToDevice was a Null element, causing
> the "Error on send" printouts; but there hadn't been an Error on send, there'd
> been no *attempt* to send!
> 
> So, our bug, fixed now in cvs.  Thanks for reporting it!
> 
> Eddie
> 
> 
> 
> 
> Peter De Cleyn wrote:
> > Hi all,
> >
> > While debugging a larger configuration used in userspace, which
> > occasionally reported errors when sending packets (packets were
> > returned on output 1 of ToDevice whithout further indication of an
> > error), I wrote myself the following simple testconfiguration.
> >
> > out::Queue()->ToDevice(eth1)->Print("Error on send")->Discard;
> > arpq::ARPQuerier(192.168.0.1, 00:0E:0C:37:BF:36);
> >
> > FromDevice("eth1")->class::Classifier(12/0806 20/0001, //arp request
> >                         12/0806 20/0002, //arp response
> >                         12/0800, //ip
> >                         -); //other
> >
> > class[0]->ARPResponder(192.168.0.1 00:0E:0C:37:BF:36)
> >         ->out;
> >
> > class[1]->[1]arpq->out;
> >
> > class[2]->CheckIPHeader(14)->IPPrint("incoming")->Discard();
> >
> > class[3]->Print("Discard")->Discard();
> >
> > ICMPPingSource(192.168.0.1, 192.168.0.2, INTERVAL 1)
> >         ->arpq;
> >
> > I expected some basic ping behaviour, but the only output I got on screen was:
> >
> > Error on send:   42 | ffffffff ffff000e 0c37bf36 08060001 08000604 0001000e
> > Error on send:   42 | ffffffff ffff000e 0c37bf36 08060001 08000604 0001000e
> > ...
> >
> > Which are actually the ARP requests one would expect to be sent before
> > the ICMP messages could be sent.
> >
> > When I omitted the Queue from the configuration, everything worked fine.
> > thus the first line of the configuration became:
> >
> > out::ToDevice(eth1)->Print("Error on send")->Discard;
> >
> > As the ToDevice did not provided extra output ( looking into the code
> > of ToDevice, I expected some messages), I added my own debug output at
> > the beginning of send_packet() and push() and noticed that this was
> > printed when I didn't use the Queue, but they didn't appear when using
> > it. I tried with Queue, SimpleQueue and MSQueue and click versions
> > 1.4.1, 1.4pre1 and 1.3pre1. The configuration was also tested with
> > different machines, using different types of NICs.
> >
> > Could someone point me out what I am missing here?
> >
> > thanks a lot for helping me out!
> >
> > Peter
> > _______________________________________________
> > click mailing list
> > click at amsterdam.lcs.mit.edu
> > https://amsterdam.lcs.mit.edu/mailman/listinfo/click
> 
>


More information about the click mailing list