Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: jtc@redback.com (J.T. Conklin)
To: gdb-patches@cygnus.com
Subject: Re: Patch to support NACK packet from stub
Date: Wed, 17 Mar 1999 16:54:00 -0000	[thread overview]
Message-ID: <5m3e334nyq.fsf@jtc.redbacknetworks.com> (raw)
In-Reply-To: <36F0273C.D418EEF3@cygnus.com>

>> I discovered that the putpkt() routine does not handle NACK ('-')
>> packets from remote stub, instead the NACK is junked and putpkt()
>> waits until the subsequent read times out.  This is a big penalty
>> (the default value of remote_timeout is 20 seconds) that can be
>> easily avoided.

Andrew> I think it would be best if we leave this one out of 4.18 and
Andrew> have a hard think about it for devo.  If you get rid of the
Andrew> timeout there is a chance that other nastier things can
Andrew> happen.

Andrew> Remembering that the remote GDB protocol is only robust
Andrew> against data overrun what can happen is a sequence like:

Andrew> -> <start><scrambled-data-looking-like-eop>
Andrew> <- NACK
Andrew> -> <more crambled data looking like another packet>
Andrew> <- NACK

Andrew> It is probably safer to just drain the target like the code is
Andrew> currently doing.

No hurry.  I've checked it into in my local sources, and will be able 
to report how well it works after it's been in production.

I also consider this yet another nail in the coffin of the existing
remote protocol.  My current thinking is:

  * separate link layer framing from debug protocol.

    Instead of calling getDebugChar and putDebugChar(), the sample
    stubs would call getDebugPacket() and putDebugPacket().  These
    user-supplied functions would en/decapsulate the packet as
    required for the mediatype used for the debug channel.  I'm 
    currently experimenting with using the same framing used in
    SL/IP for serial connections.  Other possible framings would 
    be within UDP datagrams or even raw ethernet packets.  

    As possibilities are endless, so it would be best if support for
    different "back ends" for each media/framing could be added with-
    out extensive changes.  It would be even better if such backends
    could be dynamically loaded, but I'd settle for ease of
    integration.

  * There needs to be some re-definition of what remote_timeout is and
    is used for.  Currently it's used for the timeout for each
    character read, when it probably needs to be the timeout for the
    entire packet.  If a media type has need for an intercharacter
    timeout, it should be specific to that framing type.

  * Since the least common denominator would be a lossy datagram
    transport, the high level debug protocol must be responsible
    for handling lost and duplicate packets.

  * I'm currently thinking the that high level debug protocol might
    look something like this:

    <type><seq>?length?[<data>]<chksum>

    Instead of having explicit "ACK" packets, the each response to a
    command would contain the ACK.  This would improve performance on
    high latency links.

    I've ?'d length, since the received packet length might not be
    necessary with an ASCII protocol, perhaps not even with a binary
    protocol.  I haven't got this far yet...


	--jtc

-- 
J.T. Conklin
RedBack Networks


WARNING: multiple messages have this Message-ID
From: jtc@redback.com (J.T. Conklin)
To: gdb-patches@cygnus.com
Subject: Re: Patch to support NACK packet from stub
Date: Thu, 01 Apr 1999 00:00:00 -0000	[thread overview]
Message-ID: <5m3e334nyq.fsf@jtc.redbacknetworks.com> (raw)
Message-ID: <19990401000000.dqzEHwUBTAogFLne2GVLSsqhiaW3y2gMJ6KxH9PYC6Q@z> (raw)
In-Reply-To: <36F0273C.D418EEF3@cygnus.com>

>> I discovered that the putpkt() routine does not handle NACK ('-')
>> packets from remote stub, instead the NACK is junked and putpkt()
>> waits until the subsequent read times out.  This is a big penalty
>> (the default value of remote_timeout is 20 seconds) that can be
>> easily avoided.

Andrew> I think it would be best if we leave this one out of 4.18 and
Andrew> have a hard think about it for devo.  If you get rid of the
Andrew> timeout there is a chance that other nastier things can
Andrew> happen.

Andrew> Remembering that the remote GDB protocol is only robust
Andrew> against data overrun what can happen is a sequence like:

Andrew> -> <start><scrambled-data-looking-like-eop>
Andrew> <- NACK
Andrew> -> <more crambled data looking like another packet>
Andrew> <- NACK

Andrew> It is probably safer to just drain the target like the code is
Andrew> currently doing.

No hurry.  I've checked it into in my local sources, and will be able 
to report how well it works after it's been in production.

I also consider this yet another nail in the coffin of the existing
remote protocol.  My current thinking is:

  * separate link layer framing from debug protocol.

    Instead of calling getDebugChar and putDebugChar(), the sample
    stubs would call getDebugPacket() and putDebugPacket().  These
    user-supplied functions would en/decapsulate the packet as
    required for the mediatype used for the debug channel.  I'm 
    currently experimenting with using the same framing used in
    SL/IP for serial connections.  Other possible framings would 
    be within UDP datagrams or even raw ethernet packets.  

    As possibilities are endless, so it would be best if support for
    different "back ends" for each media/framing could be added with-
    out extensive changes.  It would be even better if such backends
    could be dynamically loaded, but I'd settle for ease of
    integration.

  * There needs to be some re-definition of what remote_timeout is and
    is used for.  Currently it's used for the timeout for each
    character read, when it probably needs to be the timeout for the
    entire packet.  If a media type has need for an intercharacter
    timeout, it should be specific to that framing type.

  * Since the least common denominator would be a lossy datagram
    transport, the high level debug protocol must be responsible
    for handling lost and duplicate packets.

  * I'm currently thinking the that high level debug protocol might
    look something like this:

    <type><seq>?length?[<data>]<chksum>

    Instead of having explicit "ACK" packets, the each response to a
    command would contain the ACK.  This would improve performance on
    high latency links.

    I've ?'d length, since the received packet length might not be
    necessary with an ASCII protocol, perhaps not even with a binary
    protocol.  I haven't got this far yet...


	--jtc

-- 
J.T. Conklin
RedBack Networks


  parent reply	other threads:[~1999-03-17 16:54 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <5mu2vqw2co.fsf.cygnus.patches.gdb@jtc.redbacknetworks.com>
1999-04-01  0:00 ` Andrew Cagney
1999-03-17 14:05   ` Andrew Cagney
1999-03-17 16:54   ` J.T. Conklin [this message]
1999-04-01  0:00     ` J.T. Conklin
1999-04-01  0:00 J.T. Conklin
1999-03-12 18:28 ` J.T. Conklin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5m3e334nyq.fsf@jtc.redbacknetworks.com \
    --to=jtc@redback.com \
    --cc=gdb-patches@cygnus.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox