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
next prev 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