Thanks for your help Donald,

after deeper discussion today, we can consider this thread resolved. There isn't any simple way...and after all, no need to optimize this process so much. It works good and reliable as it is now, that's the most important.

Best regards
Jan Janovic


On 15.01.2015 13:41, Donald Sharp wrote:
Jan -

If a retransmission is happening then the ack for a packet was not received. Are you sending the NULL update with the ACK seq # in it or not?

When a Hello is received for a new peer in EIGRP, it immediately sends a HELLO packet and then immediately a NULL packet. The above sequence of events does not state that. Are you doing that in the code?

donald

On Thu, Jan 15, 2015 at 5:23 AM, Jan Janovic <[email protected] <mailto:[email protected]>> wrote:

    Thanks for reply,

    I'll try to explain situation in more detail. It's simple but
    still a little bit challenging.

    When you create a new EIGRP neighbor adjacency, you need to do
    this sequence:

    Router A                              Router B
           (just booted)                        (up and running)

           (1)---------------->
               HELLO (multicast)             <----------------    (2)
                Seq=0, Ack=0               HELLO (multicast)
                                           Seq=0, Ack=0

                                                 <----------------   (3)
                                              UPDATE (unicast)
                                           Seq=10, Ack=0, INIT
           (4)---------------->            UPDATE 11 is queued
                UPDATE (unicast)
                Seq=100, Ack=10, INIT      <----------------   (5)
                                           UPDATE (unicast)
                                           Seq=11, Ack=100, EOT
(6)--------------->
                ACK (unicast)
                Seq=0, Ack=11


    Our sequence works correctly and reliably, but still I want to
    optimize it to achieve state above. In Quagga, we send UPDATE INIT
    with Ack 0 immediately, after hearing new hello on the interface.
    First INIT should be acknowledged in another INIT from other side
    (not in general Ack packet), otherwise we cannot proceed in
    sequence. Second, remaining INIT is then acknowledged in EOT
    UPDATE(step 5 in above diagram) . This is optimal sequence from RFC.

    In Quagga<->Cisco, we both send UPDATE INIT with Ack 0 to each
    other and then wait for INIT Ack from other side. Cisco waits 2
    seconds of retransmission timer and sends the same INIT, but now
    with Ack correctly set to Sequence No. of my INIT. Then I can
    continue to EOT packet and ack his UPDATE INIT. This introduces a
    little delay and sometimes 1 or more not needed packets sent.

    In Cisco<->Cisco environment you will never see this. Especially
    in 15.x version, where it works just like in RFC. They always
    somehow decide, who should start with INIT process. Only starting
    router sends UPDATE INIT with Ack 0. Not both like in our
    situation. No retransmissions, only fast, optimized process
    without any not needed packets.

    I remember from a meeting with Cisco's EIGRP developers, they've
    mentioned something like random little delay before first INIT,
    which ensures that one of the routers will go first and second can
    send his optimized INIT with Ack. Now I would like to try
    something similar. To delay sending of the first INIT UPDATE and
    if in a meanwhile I receive INIT from other side, I would
    Acknowledge it in my delayed packet.

    Hope it is sufficient and understandable explanation. I will
    appreciate any help, or hint. Thanks in advance.

    Best regards
    Jan Janovic


    On 15.01.2015 00:58, Donald Sharp wrote:
    Why would you need to delay packet sending in EIGRP by a random
    amount?

    Typically one stops another threads execution through an agreed
    upon communication method. I'm not aware of a command to use to
    remotely suspend another thread without using the agreed upon
    communication method.

    In any event before any specific recommendations about what can
    be done, it would be nice to have a more detailed description of
    the problem that you are facing.

    donald

    On Wed, Jan 14, 2015 at 3:40 PM, Jan Janovic <[email protected]
    <mailto:[email protected]>> wrote:

        Hello community!

        Is it possible to somehow pause specific thread in Quagga for
        several miliseconds while not affecting work of other
        threads? They would continue their jobs. I'm just thinking
        loudly. Maybe it's stupid consideration.

        I need to address one situation in our new EIGRP daemon, when
        it would be best to delay packet sending for a little, but
        random amount of time...and then decide what next. It's
        possible that in a meanwhile, when thread is stopped, we will
        receive another specific packet and the next step in previous
        stopped thread will be slightly different.

        I can provide you with more specific information if needed.

        Thanks for info.

        Best regards
        Jan Janovic

        _______________________________________________
        Quagga-dev mailing list
        [email protected] <mailto:[email protected]>
        https://lists.quagga.net/mailman/listinfo/quagga-dev





_______________________________________________
Quagga-dev mailing list
[email protected]
https://lists.quagga.net/mailman/listinfo/quagga-dev

Reply via email to