[Click] Writing your own element

Bart Braem bart.braem at ua.ac.be
Mon Jan 25 03:43:56 EST 2010


When using Click, it is often easier to use smaller elements where you can reuse existing functionality. There are so much elements available, of high quality, so I always prefer to reuse existing code.
As Ian noted, it is also easier to debug. Adding a Print element is easy and can be done quickly, without recompiling.

best regards,
Bart

On 24 Jan 2010, at 03:59, Amita Ekbote wrote:

> Yup it will. I have the PingSender already written, I was just wondering if
> it could be done in a single element. But I think ill go ahead with the two
> element thing. Thanks a lot for the inputs.
> 
> On Sat, Jan 23, 2010 at 7:28 PM, Ian Rose <ianrose at eecs.harvard.edu> wrote:
> 
>> 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
>>> 
>> 
> 
> 
> -- 
> Amita Ekbote
> _______________________________________________
> click mailing list
> click at amsterdam.lcs.mit.edu
> https://amsterdam.lcs.mit.edu/mailman/listinfo/click




More information about the click mailing list