[Xorp-hackers] XRL is busy and does not send

Ben Greear greearb at candelatech.com
Thu May 19 11:40:25 PDT 2011


On 05/19/2011 11:29 AM, Philip Hugg wrote:
> On 19/05/2011 12:32 PM, Ben Greear wrote:
>> On 05/19/2011 08:24 AM, Philip Hugg wrote:
>>> Hello everyone,
>>>
>>> I'm currently working on Xorp-OLSR.
>>>
>>> The problem with OLSR is the route flapping.
>>> I've managed to find a few obvious bugs up to now however this one
>>> involves the interface to the XRL. I'm not sure how to fix.
>>>
>>> The problem I found is in file 'xrl_port.cc' where OLSR is sending the
>>> packets
>>
>>>
>>> Now what I'm seeing is the debug message "PortOutput ...: send skipped
>>> (pending XRL)".
>>> It doesn't happen all the time but it's just enough to cause route flapping.
>>>
>>> My question is how could I fix the pending issue without causing a race
>>> condition in the code?
>>
>> I took a look at that code, and it looks quite fragile.
>> As the code exists currently, I suppose you'd
>> need to check the results of send_to and queue up pkts for retransmit
>> if sending failed.
>>
>> Maybe it was to make sure some initial config logic completed before
>> send_to started functioning?
>>
>> Maybe use a different flag like _setup_complete that is set in
>> socket_setup_complete() and have send_to fail to send until
>> setup is complete?
>>
>> It doesn't look like an general XRL problem to me, by the way.
>>
>> Thanks,
>> Ben
>>
> Hi Ben,
>
> Thank you for answering so quickly.
>
> I presume the socket setup is done when xorp is started and is done only once.
> In my case, the socket has been setup and is currently sending and receiving packets.
>
> The problem I'm seeing is that when a send-to call is made it becomes busy (pending=true)
> for a short while. It is freed (pending=false) when the callback 'send_cb' is returned from cl.send_send_to(...).
>
> It just sometimes happens that OLSR is sending packets in that short busy state.
>
> To me, this is a problem!
>
> A queuing mechanism on the OLSR side would probably mean implementing a new thread
> of code just spinning and waiting for the XRL to become free.
> This will take a while but I'll take a look at the other protocols (BGP, OSPF) to see how
> they are handling the XRL pending.

I don't think there is any real reason sending while 'busy'.

Please post your existing patches, and for your testing, try just
commenting out this code:

     if (success)
	_pending = true;

in send_to()

Thanks,
Ben

>
> again thanks,
> Phil.
>


-- 
Ben Greear <greearb at candelatech.com>
Candela Technologies Inc  http://www.candelatech.com



More information about the Xorp-hackers mailing list