[Click] Writing your own element

Ian Rose ianrose at eecs.harvard.edu
Sat Jan 23 20:28:10 EST 2010


Ok so let me see if I have this straight.  You want to:

1) send out packets at some regular interval (via a timer), similar to pings

2) send a response packet (like a ping reply) whenever a packet is received

Why not make these 2 different elements for simplicity?  So element #1 
(PingSender) would just send out packets based on a timer - you could 
maybe even just reuse TimedSource for this although if you are including 
a sequence number or something such that the packets are not all 
identical then you may have to write your own, but it should be pretty 
simple.  This would be an PUSH element with 0 inputs and 1 output.

Element #2 (PingResponder) would be a PUSH element with 1 input and 1 
output.  Whenever a packet is received, you respond with another packet.

Put it all together and your click config could be something like:

FromDevice -> PingResponder -> out::Queue -> ToDevice;
PingSender -> out;

Of course you will probably also need some Classifier() and other 
elements in there, but you get the general idea I hope...

Does that sound like it could accomplish what you are trying to do?

- Ian



Amita Ekbote wrote:
> Hey,
> 
> The element is going to try and measure the link quality. In my element 
> I have the run_timer which is just sending out packets, I have written a 
> small client program to make sure that these packets make it. Once a 
> packet is received the client sends back a packet. I have the pull 
> function which just contains the pull print statement. I put a print 
> statement before my click element and it does receive a packet. For 
> processing I have used "a/a" . 
> 
> 
> On Sat, Jan 23, 2010 at 12:15 PM, Ian Rose <ianrose at eecs.harvard.edu 
> <mailto:ianrose at eecs.harvard.edu>> wrote:
> 
>     Could you say a bit more about how you want this element to work -
>     I'm afraid I'm not really getting the full picture.  Perhaps an
>     example of how a packet should be handled would help.  And when you
>     say that the receive "is not working out", what do you mean?  Are
>     packets never received by your element?  It might help to put a
>     Print element right before your element (in your click
>     configuration) - this element will Print some stuff to the console
>     every time a packet flows through it, so if nothing is ever printed
>     then you know that packets simply aren't moving and it might be a
>     problem with your click config itself (in which case, send it in an
>     email so we can take a look).
> 
>     Also, what does your elements 'processing' method return?  Just look
>     in <yourelement>.hh and you should see something like:
> 
>     const char *processing() const  { return PUSH; }
> 
>     or
> 
>     const char *processing() const  { return AGNOSTIC; }
> 
>     If you don't see a processing method then you are using the default
>     (AGNOSTIC).
> 
>     - Ian
> 
> 
>     Amita Ekbote wrote:
> 
>         Hello,
> 
>         I need to write an element which can send packets and receive
>         packets. The
>         send needs to be like the timed source and based on packets
>         received the
>         send packet will be modified. The send and receive is to the
>         same ip but
>         different port numbers. I have the run_timer function which
>         sends the packet
>         but integrating  the receive part in the same element is not
>         working out. I
>         could write another element for receive and pass it as
>         configuration to the
>         send but was hoping to integrate them into one element. Any
>         suggestions
>         would be appreciated.
> 
>         Thanks
> 
> 
> 
> 
> -- 
> Amita Ekbote


More information about the click mailing list