[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