From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ben Warren Date: Tue, 15 Jan 2008 22:19:36 -0500 Subject: [U-Boot-Users] [PATCH] TFTP: add host ip addr support In-Reply-To: <1200094989-600-1-git-send-email-plagnioj@jcrosoft.com> References: <1200094989-600-1-git-send-email-plagnioj@jcrosoft.com> Message-ID: <478D77C8.8050007@gmail.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Jean-Christophe PLAGNIOL-VILLARD wrote: > allow to use a different server as set in serverip > > Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD > > diff --git a/common/cmd_net.c b/common/cmd_net.c > index 21682c0..b86ca86 100644 > --- a/common/cmd_net.c > +++ b/common/cmd_net.c > @@ -51,7 +51,7 @@ int do_tftpb (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) > U_BOOT_CMD( > tftpboot, 3, 1, do_tftpb, > "tftpboot- boot image via network using TFTP protocol\n", > - "[loadAddress] [bootfilename]\n" > + "[loadAddress] [[hostIPaddr:]bootfilename]\n" > ); > > int do_rarpb (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) > diff --git a/net/tftp.c b/net/tftp.c > index 8b95bcf..9d87e2c 100644 > --- a/net/tftp.c > +++ b/net/tftp.c > @@ -34,7 +34,7 @@ > #define TFTP_ERROR 5 > #define TFTP_OACK 6 > > - > +static IPaddr_t TftpServerIP; > static int TftpServerPort; /* The UDP port at their end */ > static int TftpOurPort; /* The UDP port at our end */ > static int TftpTimeoutCount; > @@ -55,7 +55,7 @@ static int TftpState; > > #define DEFAULT_NAME_LEN (8 + 4 + 1) > static char default_filename[DEFAULT_NAME_LEN]; > -static char *tftp_filename; > +static char tftp_filename[2048]; > A 2k filename??? How about something more reasonable like 80 or 100 bytes. Use a #define for the size so you can use it later. > > #ifdef CFG_DIRECT_FLASH_TFTP > extern flash_info_t flash_info[]; > @@ -231,7 +231,7 @@ TftpSend (void) > break; > } > > - NetSendUDPPacket(NetServerEther, NetServerIP, TftpServerPort, TftpOurPort, len); > + NetSendUDPPacket(NetServerEther, TftpServerIP, TftpServerPort, TftpOurPort, len); > } > > > @@ -453,30 +453,38 @@ TftpStart (void) > char *ep; /* Environment pointer */ > #endif > > + TftpServerIP = NetServerIP; > if (BootFile[0] == '\0') { > sprintf(default_filename, "%02lX%02lX%02lX%02lX.img", > NetOurIP & 0xFF, > (NetOurIP >> 8) & 0xFF, > (NetOurIP >> 16) & 0xFF, > (NetOurIP >> 24) & 0xFF ); > - tftp_filename = default_filename; > + strcpy (tftp_filename, default_filename); > > Use strncpy, please, with the buffer length defined above. > printf ("*** Warning: no boot file name; using '%s'\n", > tftp_filename); > } else { > - tftp_filename = BootFile; > + char *p=BootFile; > + p = strchr (p, ':'); > + if (p != NULL) { > + TftpServerIP = string_to_ip (BootFile); > + ++p; > + strcpy (tftp_filename, p); > Again, strncpy please > + } else > + strcpy (tftp_filename, BootFile); > } > > #if defined(CONFIG_NET_MULTI) > printf ("Using %s device\n", eth_get_name()); > #endif > - puts ("TFTP from server "); print_IPaddr (NetServerIP); > + puts ("TFTP from server "); print_IPaddr (TftpServerIP); > puts ("; our IP address is "); print_IPaddr (NetOurIP); > > /* Check if we need to send across this subnet */ > if (NetOurGatewayIP && NetOurSubnetMask) { > IPaddr_t OurNet = NetOurIP & NetOurSubnetMask; > - IPaddr_t ServerNet = NetServerIP & NetOurSubnetMask; > + IPaddr_t ServerNet = TftpServerIP & NetOurSubnetMask; > > if (OurNet != ServerNet) { > puts ("; sending through gateway "); > This now works for me. Fix the file name buffer and I'll pull it in pronto. regards, Ben