From: Rongqing Li <rongqing.li@windriver.com>
To: <openembedded-devel@lists.openembedded.org>
Cc: joe.macdonald@windriver.com
Subject: Re: [PATCH meta-networking] atftp: port a patch from OpenSUSE to fix "Sorcerer's Apprentice Syndrome"(SAS)
Date: Fri, 6 Sep 2013 08:16:36 +0800 [thread overview]
Message-ID: <52291EE4.9060306@windriver.com> (raw)
In-Reply-To: <1376981857-9687-1-git-send-email-rongqing.li@windriver.com>
ping...
Thanks
-Roy
On 08/20/2013 02:57 PM, rongqing.li@windriver.com wrote:
> From: "Roy.Li" <rongqing.li@windriver.com>
>
> Signed-off-by: Roy.Li <rongqing.li@windriver.com>
> ---
> meta-networking/recipes-daemons/atftp/atftp_git.bb | 1 +
> .../files/atftp-0.7-sorcerers_apprentice.patch | 94 ++++++++++++++++++++
> 2 files changed, 95 insertions(+)
> create mode 100644 meta-networking/recipes-daemons/atftp/files/atftp-0.7-sorcerers_apprentice.patch
>
> diff --git a/meta-networking/recipes-daemons/atftp/atftp_git.bb b/meta-networking/recipes-daemons/atftp/atftp_git.bb
> index 4b9ff05..8f9b4e3 100644
> --- a/meta-networking/recipes-daemons/atftp/atftp_git.bb
> +++ b/meta-networking/recipes-daemons/atftp/atftp_git.bb
> @@ -13,6 +13,7 @@ SRC_URI = "git://atftp.git.sourceforge.net/gitroot/atftp/atftp;protocol=git \
> file://atftpd-0.7_unprotected_assignments_crash.patch \
> file://atftpd.init \
> file://atftpd.service \
> + file://atftp-0.7-sorcerers_apprentice.patch \
> "
> S = "${WORKDIR}/git"
>
> diff --git a/meta-networking/recipes-daemons/atftp/files/atftp-0.7-sorcerers_apprentice.patch b/meta-networking/recipes-daemons/atftp/files/atftp-0.7-sorcerers_apprentice.patch
> new file mode 100644
> index 0000000..fc64291
> --- /dev/null
> +++ b/meta-networking/recipes-daemons/atftp/files/atftp-0.7-sorcerers_apprentice.patch
> @@ -0,0 +1,94 @@
> +atftp exhibits the well known "Sorcerer's Apprentice Syndrome"(SAS) problem.
> +According to RFC 1350, the fix to SAS is quite simple: further copies of the
> +acknowledgment for a particular data block would be ignored.
> +
> +Patch originally from OpenSUSE:
> +https://build.opensuse.org/package/view_file?file=atftp-0.7-sorcerers_apprentice.patch&package=atftp.539&project=openSUSE%3A12.1%3AUpdate&rev=84569792975e00573d7df597d2a6e895
> +
> +Upstream-Status: Pending
> +
> +Signed-off-by: Roy.Li <rongqing.li@windriver.com>
> +Index: atftp-0.7/tftp_file.c
> +===================================================================
> +--- atftp-0.7.orig/tftp_file.c 2011-11-22 15:12:53.792744083 +0100
> ++++ atftp-0.7/tftp_file.c 2011-11-22 15:13:51.706421893 +0100
> +@@ -605,6 +605,7 @@
> + int timeout_state = state; /* what state should we go on when timeout */
> + int result;
> + long block_number = 0;
> ++ long last_requested_block = -1;
> + long last_block = -1;
> + int data_size; /* size of data received */
> + int sockfd = data->sockfd; /* just to simplify calls */
> +@@ -765,6 +766,17 @@
> + connected = 1;
> + }
> + block_number = ntohs(tftphdr->th_block);
> ++
> ++ if (last_requested_block >= block_number)
> ++ {
> ++ if (data->trace)
> ++ fprintf(stderr, "received duplicated ACK <block: %ld >= %ld>\n",
> ++ last_requested_block, block_number);
> ++ break;
> ++ }
> ++ else
> ++ last_requested_block = block_number;
> ++
> + if (data->trace)
> + fprintf(stderr, "received ACK <block: %ld>\n",
> + block_number);
> +Index: atftp-0.7/tftpd_file.c
> +===================================================================
> +--- atftp-0.7.orig/tftpd_file.c 2011-11-22 15:12:53.793744112 +0100
> ++++ atftp-0.7/tftpd_file.c 2011-11-22 15:15:04.617534260 +0100
> +@@ -403,6 +403,7 @@
> + int timeout_state = state;
> + int result;
> + long block_number = 0;
> ++ long last_requested_block = -1;
> + long last_block = -1;
> + int block_loops = 0;
> + int data_size;
> +@@ -859,6 +860,32 @@
> + {
> + logger(LOG_DEBUG, "received ACK <block: %d>", block_number);
> + }
> ++
> ++ /* check whether the block request isn't already fulfilled */
> ++
> ++ /* multicast, block numbers could contain gaps */
> ++ if (multicast) {
> ++ if (last_requested_block >= block_number)
> ++ {
> ++ if (data->trace)
> ++ logger(LOG_DEBUG, "received duplicated ACK <block: %d >= %d>", last_requested_block, block_number);
> ++ break;
> ++ }
> ++ else
> ++ last_requested_block = block_number;
> ++ /* unicast, blocks should be requested one after another */
> ++ } else {
> ++ if (last_requested_block + 1 != block_number && last_requested_block != -1)
> ++ {
> ++ if (data->trace)
> ++ logger(LOG_DEBUG, "received out of order ACK <block: %d != %d>", last_requested_block + 1, block_number);
> ++ break;
> ++ }
> ++ else
> ++ last_requested_block = block_number;
> ++ }
> ++
> ++
> + if (ntohs(tftphdr->th_block) == 65535)
> + {
> + block_loops++;
> +@@ -958,6 +985,8 @@
> + /* nedd to send an oack to that client */
> + state = S_SEND_OACK;
> + fseek(fp, 0, SEEK_SET);
> ++ /* reset the last block received counter */
> ++ last_requested_block = -1;
> + }
> + else
> + {
>
--
Best Reagrds,
Roy | RongQing Li
next prev parent reply other threads:[~2013-09-06 0:16 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-20 6:57 [PATCH meta-networking] atftp: port a patch from OpenSUSE to fix "Sorcerer's Apprentice Syndrome"(SAS) rongqing.li
2013-09-06 0:16 ` Rongqing Li [this message]
2013-09-06 1:22 ` Joe MacDonald
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=52291EE4.9060306@windriver.com \
--to=rongqing.li@windriver.com \
--cc=joe.macdonald@windriver.com \
--cc=openembedded-devel@lists.openembedded.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.