9
0
Fork 0

Move tftp/nfs specific code to net/*

This adds a few bytes of binary space but is done to put
the code where it belongs to.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
Sascha Hauer 2010-01-04 10:08:52 +01:00
parent 085e30b4b0
commit 88351d2e4b
3 changed files with 126 additions and 110 deletions

View File

@ -32,12 +32,8 @@
#include <driver.h>
#include <net.h>
#include <fs.h>
#include <fcntl.h>
#include <errno.h>
#include <libbb.h>
#include <libgen.h>
static int netboot_common (proto_t, cmd_tbl_t *, int , char *[]);
void netboot_update_env(void)
{
@ -77,37 +73,6 @@ void netboot_update_env(void)
setenv ("domain", NetOurNISDomain);
}
static int do_tftpb (cmd_tbl_t *cmdtp, int argc, char *argv[])
{
return netboot_common (TFTP, cmdtp, argc, argv);
}
static const __maybe_unused char cmd_tftp_help[] =
"Usage: tftp <file> [localfile]\n"
"Load a file via network using BootP/TFTP protocol.\n";
BAREBOX_CMD_START(tftp)
.cmd = do_tftpb,
.usage = "Load file using tftp protocol",
BAREBOX_CMD_HELP(cmd_tftp_help)
BAREBOX_CMD_END
/**
* @page tftp_command tftp
*
* Usage is: tftp \<filename\> [\<localfilename\>]
*
* Load a file via network using BootP/TFTP protocol. The loaded file you
* can find after download in you current ramdisk. Refer \b ls command.
*
* \<localfile> can be the local filename only, or also a device name. In the
* case of a device name, the will gets stored there. This works also for
* partitions of flash memory. Refer \b erase, \b unprotect for flash
* preparation.
*
* Note: This command is available only, if enabled in the menuconfig.
*/
#ifdef CONFIG_NET_RARP
extern void RarpRequest(void);
@ -137,79 +102,6 @@ BAREBOX_CMD_START(rarpboot)
BAREBOX_CMD_END
#endif /* CONFIG_NET_RARP */
#ifdef CONFIG_NET_NFS
static int do_nfs (cmd_tbl_t *cmdtp, int argc, char *argv[])
{
return netboot_common(NFS, cmdtp, argc, argv);
}
static const __maybe_unused char cmd_nfs_help[] =
"Usage: nfs <file> [localfile]\n"
"Load a file via network using nfs protocol.\n";
BAREBOX_CMD_START(nfs)
.cmd = do_nfs,
.usage = "boot image via network using nfs protocol",
BAREBOX_CMD_HELP(cmd_nfs_help)
BAREBOX_CMD_END
#endif /* CONFIG_NET_NFS */
int net_store_fd;
extern void TftpStart(char *); /* Begin TFTP get */
extern void NfsStart(char *);
static int
netboot_common (proto_t proto, cmd_tbl_t *cmdtp, int argc, char *argv[])
{
int rcode = 0;
int size;
char *localfile;
char *remotefile;
if (argc < 2)
return COMMAND_ERROR_USAGE;
remotefile = argv[1];
if (argc == 2)
localfile = basename(remotefile);
else
localfile = argv[2];
net_store_fd = open(localfile, O_WRONLY | O_CREAT);
if (net_store_fd < 0) {
perror("open");
return 1;
}
if (NetLoopInit(proto) < 0)
goto out;
switch (proto) {
case TFTP:
TftpStart(remotefile);
break;
case NFS:
NfsStart(remotefile);
default:
break;
}
if ((size = NetLoop()) < 0) {
rcode = size;
goto out;
}
/* NetLoop ok, update environment */
netboot_update_env();
out:
close(net_store_fd);
return rcode;
}
static int do_ethact (cmd_tbl_t *cmdtp, int argc, char *argv[])
{
struct eth_device *edev;

View File

@ -29,6 +29,9 @@
#include <malloc.h>
#include <libgen.h>
#include <fs.h>
#include <libgen.h>
#include <fcntl.h>
#include <errno.h>
#include "nfs.h"
/*#define NFS_DEBUG*/
@ -63,7 +66,7 @@ static char *nfs_filename;
static char *nfs_path;
static char nfs_path_buff[2048];
extern int net_store_fd;
static int net_store_fd;
static __inline__ int
store_block (uchar * src, unsigned offset, unsigned len)
@ -703,3 +706,54 @@ NfsStart (char *p)
NfsSend ();
}
static int do_nfs (cmd_tbl_t *cmdtp, int argc, char *argv[])
{
int rcode = 0;
char *localfile;
char *remotefile;
if (argc < 2)
return COMMAND_ERROR_USAGE;
remotefile = argv[1];
if (argc == 2)
localfile = basename(remotefile);
else
localfile = argv[2];
net_store_fd = open(localfile, O_WRONLY | O_CREAT);
if (net_store_fd < 0) {
perror("open");
return 1;
}
if (NetLoopInit(NFS) < 0)
goto out;
NfsStart(remotefile);
rcode = NetLoop();
if (rcode < 0) {
rcode = 1;
goto out;
}
/* NetLoop ok, update environment */
netboot_update_env();
out:
close(net_store_fd);
return rcode;
}
static const __maybe_unused char cmd_nfs_help[] =
"Usage: nfs <file> [localfile]\n"
"Load a file via network using nfs protocol.\n";
BAREBOX_CMD_START(nfs)
.cmd = do_nfs,
.usage = "boot image via network using nfs protocol",
BAREBOX_CMD_HELP(cmd_nfs_help)
BAREBOX_CMD_END

View File

@ -11,6 +11,8 @@
#include <clock.h>
#include <fs.h>
#include <errno.h>
#include <libgen.h>
#include <fcntl.h>
#include "tftp.h"
#undef ET_DEBUG
@ -49,7 +51,7 @@ static int TftpState;
static char *tftp_filename;
extern int net_store_fd;
static int net_store_fd;
static int store_block(unsigned block, uchar * src, unsigned len)
{
@ -253,3 +255,71 @@ void TftpStart(char *filename)
TftpSend();
}
static int do_tftpb (cmd_tbl_t *cmdtp, int argc, char *argv[])
{
int rcode = 0;
char *localfile;
char *remotefile;
if (argc < 2)
return COMMAND_ERROR_USAGE;
remotefile = argv[1];
if (argc == 2)
localfile = basename(remotefile);
else
localfile = argv[2];
net_store_fd = open(localfile, O_WRONLY | O_CREAT);
if (net_store_fd < 0) {
perror("open");
return 1;
}
if (NetLoopInit(TFTP) < 0)
goto out;
TftpStart(remotefile);
rcode = NetLoop();
if (rcode < 0) {
rcode = 1;
goto out;
}
/* NetLoop ok, update environment */
netboot_update_env();
out:
close(net_store_fd);
return rcode;
}
static const __maybe_unused char cmd_tftp_help[] =
"Usage: tftp <file> [localfile]\n"
"Load a file via network using BootP/TFTP protocol.\n";
BAREBOX_CMD_START(tftp)
.cmd = do_tftpb,
.usage = "Load file using tftp protocol",
BAREBOX_CMD_HELP(cmd_tftp_help)
BAREBOX_CMD_END
/**
* @page tftp_command tftp
*
* Usage is: tftp \<filename\> [\<localfilename\>]
*
* Load a file via network using BootP/TFTP protocol. The loaded file you
* can find after download in you current ramdisk. Refer \b ls command.
*
* \<localfile> can be the local filename only, or also a device name. In the
* case of a device name, the will gets stored there. This works also for
* partitions of flash memory. Refer \b erase, \b unprotect for flash
* preparation.
*
* Note: This command is available only, if enabled in the menuconfig.
*/