[U-Boot] [PATCH 0/4] Network defrag
Wolfgang Denk
wd at denx.de
Mon Aug 17 21:05:24 CEST 2009
Dear Robin Getz,
In message <200908171315.40365.rgetz at blackfin.uclinux.org> you wrote:
>
> Comments welcome...
I guess the code is largely untested?
> diff --git a/net/tftp.c b/net/tftp.c
> index 9544691..56db247 100644
> --- a/net/tftp.c
> +++ b/net/tftp.c
> @@ -66,6 +66,9 @@ static ulong TftpLastBlock; /* last packet sequence number received */
> static ulong TftpBlockWrap; /* count of sequence number wraparounds */
> static ulong TftpBlockWrapOffset; /* memory offset due to wrapping */
> static int TftpState;
> +#ifdef CONFIG_TFTP_TSIZE
> +static int TftpTsize; /* Tsize */
> +#endif
Why static int? This gives a random init value for the second and each
following TFTP transfers.
> @@ -212,6 +215,10 @@ TftpSend (void)
> sprintf((char *)pkt, "%lu", TIMEOUT / 1000);
> debug("send option \"timeout %s\"\n", (char *)pkt);
> pkt += strlen((char *)pkt) + 1;
> +#ifdef CONFIG_TFTP_TSIZE
> + pkt += sprintf((char *)pkt,"tsize%c%d", 0,0);
> + pkt += strlen((char *)pkt) + 1;
Looks to me as if you were adding the length twice?
> +#endif
> /* try for more effic. blk size */
> pkt += sprintf((char *)pkt,"blksize%c%d%c",
> 0,TftpBlkSizeOption,0);
> @@ -321,8 +328,14 @@ TftpHandler (uchar * pkt, unsigned dest, unsigned src, unsigned len)
> simple_strtoul((char*)pkt+i+8,NULL,10);
> debug("Blocksize ack: %s, %d\n",
> (char*)pkt+i+8,TftpBlkSize);
> - break;
> }
> +#ifdef CONFIG_TFTP_TSIZE
> + if (strcmp ((char*)pkt+i,"tsize") == 0) {
> + TftpTsize = simple_strtoul((char*)pkt+i+6,NULL,10);
> + debug("size = %s, %d\n",
> + (char*)pkt+i+6, TftpTsize);
> + }
It seems you rely on TftpTsize to be zero otherwise. The current code
(with a static int) does not guarantee that, though.
> - } else {
> + }
> +#ifdef CONFIG_TFTP_TSIZE
> + else if (TftpTsize) {
> +
> + printf("%2d\b\b", NetBootFileXferSize * 100 / TftpTsize);
> + }
> +#endif
Hm... maybe we should rather print hashes (say one '#' for each 2%,
resulting in a maximum of 50 characters output.
Otherwise we actually increase the amount of characters sent over the
serial line (and the intention was to reduce it, right?)
> +#ifdef CONFIG_TFTP_TSIZE
> + if (TftpTsize)
> + puts("100%");
> +#endif
> +
> puts_quiet("\ndone\n");
Here we see the bad consequences of this puts_quiet() stuff (which I
really dislike. The longer I see it, the more I tend to reject it.
Here, the (necessary!) newline terminating the "100%" output, is not
always sent, only when puts_quiet() is "active".
> @@ -550,6 +579,9 @@ TftpStart (void)
> #ifdef CONFIG_TFTP_TIME
> start_time = get_timer(0);
> #endif
> +#ifdef CONFIG_TFTP_TSIZE
> + TftpTsize = 0;
> +#endif
Ah. I see :-)
Best regards,
Wolfgang Denk
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
Question: How does one get fresh air into a Russian church?
Answer: One clicks on an icon, and a window opens!
More information about the U-Boot
mailing list