summaryrefslogtreecommitdiffstats
path: root/commands/tftp.c
diff options
context:
space:
mode:
Diffstat (limited to 'commands/tftp.c')
-rw-r--r--commands/tftp.c52
1 files changed, 26 insertions, 26 deletions
diff --git a/commands/tftp.c b/commands/tftp.c
index 08366b476f..6ac822c9e8 100644
--- a/commands/tftp.c
+++ b/commands/tftp.c
@@ -1,20 +1,8 @@
-/*
- * tftp.c - (up)load tftp files
- *
- * Copyright (c) 2012 Sascha Hauer <s.hauer@pengutronix.de>, Pengutronix
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- */
+// SPDX-License-Identifier: GPL-2.0-only
+// SPDX-FileCopyrightText: © 2012 Sascha Hauer <s.hauer@pengutronix.de>, Pengutronix
+
+/* tftp.c - (up)load tftp files */
+
#include <common.h>
#include <command.h>
#include <linux/stat.h>
@@ -32,17 +20,25 @@ static int do_tftpb(int argc, char *argv[])
{
char *source, *dest, *freep;
int opt;
- unsigned long flags;
int tftp_push = 0;
+ int port = -1;
int ret;
IPaddr_t ip;
char ip4_str[sizeof("255.255.255.255")];
+ char mount_opts[sizeof("port=12345")];
- while ((opt = getopt(argc, argv, "p")) > 0) {
+ while ((opt = getopt(argc, argv, "pP:")) > 0) {
switch(opt) {
case 'p':
tftp_push = 1;
break;
+ case 'P':
+ port = simple_strtoul(optarg, NULL, 0);
+ if (port <= 0 || port > 0xffff) {
+ pr_err("invalid port '%s'\n", optarg);
+ return COMMAND_ERROR_USAGE;
+ }
+ break;
default:
return COMMAND_ERROR_USAGE;
}
@@ -58,13 +54,10 @@ static int do_tftpb(int argc, char *argv[])
else
dest = argv[optind];
- if (tftp_push) {
+ if (tftp_push)
dest = freep = basprintf("%s/%s", TFTP_MOUNT_PATH, dest);
- flags = O_RDONLY;
- } else {
+ else
source = freep = basprintf("%s/%s", TFTP_MOUNT_PATH, source);
- flags = O_WRONLY | O_CREAT;
- }
if (!freep)
return -ENOMEM;
@@ -75,7 +68,13 @@ static int do_tftpb(int argc, char *argv[])
ip = net_get_serverip();
sprintf(ip4_str, "%pI4", &ip);
- ret = mount(ip4_str, "tftp", TFTP_MOUNT_PATH, NULL);
+
+ if (port >= 0)
+ sprintf(mount_opts, "port=%u", port);
+ else
+ mount_opts[0] = '\0';
+
+ ret = mount(ip4_str, "tftp", TFTP_MOUNT_PATH, mount_opts);
if (ret)
goto err_rmdir;
@@ -100,12 +99,13 @@ BAREBOX_CMD_HELP_TEXT("server address is taken from the environment (ethX.server
BAREBOX_CMD_HELP_TEXT("")
BAREBOX_CMD_HELP_TEXT("Options:")
BAREBOX_CMD_HELP_OPT ("-p", "push to TFTP server")
+BAREBOX_CMD_HELP_OPT ("-P PORT", "tftp server port number")
BAREBOX_CMD_HELP_END
BAREBOX_CMD_START(tftp)
.cmd = do_tftpb,
BAREBOX_CMD_DESC("load (or save) a file using TFTP")
- BAREBOX_CMD_OPTS("[-p] SOURCE [DEST]")
+ BAREBOX_CMD_OPTS("[-p] [-P <port>] SOURCE [DEST]")
BAREBOX_CMD_GROUP(CMD_GRP_NET)
BAREBOX_CMD_HELP(cmd_tftp_help)
BAREBOX_CMD_END