tftp: get the tftp block size from config file and from the environment
authorAlessandro Rubini <rubini-list@gnudd.com>
Fri, 7 Aug 2009 11:59:06 +0000 (13:59 +0200)
committerBen Warren <biggerbadderben@gmail.com>
Tue, 25 Aug 2009 20:35:54 +0000 (13:35 -0700)
Increasing the block size is useful if CONFIG_IP_DEFRAG is
used. Howerver, the last fragments in a burst may overflow the
receiving ethernet, so the default is left at 1468, with thre new
CONFIG_TFTP_BLOCKSIZE for config files. Further, "tftpblocksize"
can be set in the environment.

Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
Signed-off-by: Ben Warren <biggerbadderben@gmail.com>
net/tftp.c

index fb98a346ea6e55fe2fdbcf6d5c0992cc1c56d13b..0fd6c6560499ea0871c1e2efa45a95d0264756c2 100644 (file)
@@ -84,8 +84,14 @@ extern flash_info_t flash_info[];
 /* 512 is poor choice for ethernet, MTU is typically 1500.
  * Minus eth.hdrs thats 1468.  Can get 2x better throughput with
  * almost-MTU block sizes.  At least try... fall back to 512 if need be.
+ * (but those using CONFIG_IP_DEFRAG may want to set a larger block in cfg file)
  */
+#ifdef CONFIG_TFTP_BLOCKSIZE
+#define TFTP_MTU_BLOCKSIZE CONFIG_TFTP_BLOCKSIZE
+#else
 #define TFTP_MTU_BLOCKSIZE 1468
+#endif
+
 static unsigned short TftpBlkSize=TFTP_BLOCK_SIZE;
 static unsigned short TftpBlkSizeOption=TFTP_MTU_BLOCKSIZE;
 
@@ -466,9 +472,12 @@ TftpTimeout (void)
 void
 TftpStart (void)
 {
-#ifdef CONFIG_TFTP_PORT
        char *ep;             /* Environment pointer */
-#endif
+
+       /* Allow the user to choose tftpblocksize */
+       if ((ep = getenv("tftpblocksize")) != NULL)
+               TftpBlkSizeOption = simple_strtol(ep, NULL, 10);
+       debug("tftp block size is %i\n", TftpBlkSizeOption);
 
        TftpServerIP = NetServerIP;
        if (BootFile[0] == '\0') {