From: Ilias Apalodimas <ilias.apalodimas@linaro.org>
To: Maxim Uvarov <maxim.uvarov@linaro.org>
Cc: u-boot@lists.denx.de, pbrobinson@redhat.com,
joe.hershberger@ni.com, rfried.dev@gmail.com, trini@konsulko.com,
goldsimon@gmx.de, lwip-devel@nongnu.org
Subject: Re: [PATCHv5 05/13] net/lwip: implement tftp cmd
Date: Thu, 3 Aug 2023 09:42:16 +0300 [thread overview]
Message-ID: <ZMtMSPDRHtkeMu4v@hades> (raw)
In-Reply-To: <20230802140658.10319-6-maxim.uvarov@linaro.org>
On Wed, Aug 02, 2023 at 08:06:50PM +0600, Maxim Uvarov wrote:
> Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>
> ---
> lib/lwip/Makefile | 1 +
> lib/lwip/apps/tftp/Makefile | 16 +++++
> lib/lwip/apps/tftp/lwip-tftp.c | 124 +++++++++++++++++++++++++++++++++
> 3 files changed, 141 insertions(+)
> create mode 100644 lib/lwip/apps/tftp/Makefile
> create mode 100644 lib/lwip/apps/tftp/lwip-tftp.c
>
> diff --git a/lib/lwip/Makefile b/lib/lwip/Makefile
> index a3521a9d18..1893162c1a 100644
> --- a/lib/lwip/Makefile
> +++ b/lib/lwip/Makefile
> @@ -67,3 +67,4 @@ obj-$(CONFIG_NET) += port/sys-arch.o
>
> obj-$(CONFIG_CMD_DHCP) += apps/dhcp/lwip-dhcp.o
> obj-$(CONFIG_CMD_DNS) += apps/dns/lwip-dns.o
> +obj-$(CONFIG_CMD_TFTPBOOT) += apps/tftp/
> diff --git a/lib/lwip/apps/tftp/Makefile b/lib/lwip/apps/tftp/Makefile
> new file mode 100644
> index 0000000000..299c95e9c0
> --- /dev/null
> +++ b/lib/lwip/apps/tftp/Makefile
> @@ -0,0 +1,16 @@
> +
> +ccflags-y += -I$(srctree)/lib/lwip/port/include
> +ccflags-y += -I$(srctree)/lib/lwip/lwip-external/src/include -I$(srctree)/lib/lwip
> +ccflags-y += -I$(obj)
> +
> +$(obj)/tftp.o: $(obj)/tftp.c
> +.PHONY: $(obj)/tftp.c
> +$(obj)/tftp.c:
> + cp $(srctree)/lib/lwip/lwip-external/src/apps/tftp/tftp.c $(obj)/tftp.c
> + cp $(srctree)/lib/lwip/lwip-external/src/include/lwip/apps/tftp_client.h $(obj)/tftp_client.h
> + cp $(srctree)/lib/lwip/lwip-external/src/include/lwip/apps/tftp_common.h $(obj)/tftp_common.h
> + cp $(srctree)/lib/lwip/lwip-external/contrib/examples/tftp/tftp_example.h $(obj)/tftp_example.h
> +
> +obj-$(CONFIG_CMD_TFTPBOOT) += tftp.o
> +obj-$(CONFIG_CMD_TFTPBOOT) += lwip-tftp.o
> +
> diff --git a/lib/lwip/apps/tftp/lwip-tftp.c b/lib/lwip/apps/tftp/lwip-tftp.c
> new file mode 100644
> index 0000000000..511d82e600
> --- /dev/null
> +++ b/lib/lwip/apps/tftp/lwip-tftp.c
> @@ -0,0 +1,124 @@
> +// SPDX-License-Identifier: GPL-2.0
> +
> +/*
> + * (C) Copyright 2023 Linaro Ltd. <maxim.uvarov@linaro.org>
> + */
> +
> +#include <common.h>
> +#include <command.h>
> +#include <console.h>
> +
> +#include "lwip/apps/tftp_client.h"
> +#include "lwip/apps/tftp_server.h"
> +#include <tftp_example.h>
> +
> +#include <string.h>
> +
> +#include "../../../lwip/ulwip.h"
> +
> +#if LWIP_UDP
> +
> +static ulong daddr;
> +static ulong size;
> +
> +static void *tftp_open(const char *fname, const char *mode, u8_t is_write)
> +{
> + LWIP_UNUSED_ARG(mode);
> + return NULL;
> +}
> +
> +static void tftp_close(void *handle)
> +{
> + printf("\ndone\n");
> + printf("Bytes transferred = %ld (0x%lx hex)\n", size, size);
Can you replace all the printf occurences with log_XXXX ?
> +
> + env_set_ulong("filesize", size);
> + ulwip_exit(0);
> +}
> +
> +static int tftp_read(void *handle, void *buf, int bytes)
> +{
> + return 0;
> +}
> +
> +static int tftp_write(void *handle, struct pbuf *p)
> +{
> + struct pbuf *q;
> +
> + for (q = p; q != NULL; q = q->next) {
> + memcpy((void *)daddr, q->payload, q->len);
> + /* printf("downloaded chunk size %d, to addr 0x%lx\n", q->len, daddr); */
Remove all those debug comments on the next version
> + daddr += q->len;
> + size += q->len;
> + printf("#");
> + }
> +
> + return 0;
> +}
> +
> +/* For TFTP client only */
> +static void tftp_error(void *handle, int err, const char *msg, int size)
> +{
> + char message[100];
> +
> + LWIP_UNUSED_ARG(handle);
> +
> + memset(message, 0, sizeof(message));
> + MEMCPY(message, msg, LWIP_MIN(sizeof(message)-1, (size_t)size));
Why aren't we using the native memcpy?
> +
> + printf("TFTP error: %d (%s)", err, message);
> +}
> +
> +static const struct tftp_context tftp = {
> + tftp_open,
> + tftp_close,
> + tftp_read,
> + tftp_write,
> + tftp_error
> +};
> +
> +int lwip_tftp(ulong addr, char *fname)
> +{
> + void *f = (void *)0x1; /*fake handle*/
If it's fake can't it just be NULL? What does 'fake' mean? is that safe to
be passed around the LWIP APIs?
> + err_t err;
> + ip_addr_t srv;
> + int ret;
> + char *server_ip;
> +
> + if (!fname || addr == 0)
> + return CMD_RET_FAILURE;
> +
> + size = 0;
> + daddr = addr;
> + server_ip = env_get("serverip");
> + if (!server_ip) {
> + printf("error: serverip variable has to be set\n");
> + return CMD_RET_FAILURE;
> + }
> +
> + ret = ipaddr_aton(server_ip, &srv);
> + LWIP_ASSERT("ipaddr_aton failed", ret == 1);
> +
> + printf("TFTP from server %s; our IP address is %s\n",
> + server_ip, env_get("ipaddr"));
> + printf("Filename '%s'.\n", fname);
> + printf("Load address: 0x%lx\n", daddr);
> + printf("Loading:");
> +
> + err = tftp_init_client(&tftp);
> + if (!(err == ERR_OK || err == ERR_USE))
> + printf("tftp_init_client err: %d\n", err);
> +
> + err = tftp_get(f, &srv, TFTP_PORT, fname, TFTP_MODE_OCTET);
> + /* might return different errors, like routing problems */
> + if (err != ERR_OK) {
> + printf("tftp_get err=%d\n", err);
> + }
> + LWIP_ASSERT("tftp_get failed", err == ERR_OK);
> +
> + env_set_hex("fileaddr", addr);
> + return err;
> +}
> +#else
> +#error "UDP has to be supported"
> +#endif /* LWIP_UDP */
> --
> 2.30.2
>
next prev parent reply other threads:[~2023-08-03 6:42 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-02 14:06 [PATCHv5 00/13] net/lwip: add lwip library for the network stack Maxim Uvarov
2023-08-02 14:06 ` [PATCHv5 01/13] net/lwip: add doc/develop/net_lwip.rst Maxim Uvarov
2023-08-02 21:31 ` Simon Glass
2023-08-02 14:06 ` [PATCHv5 02/13] net/lwip: integrate lwip library Maxim Uvarov
2023-08-02 21:31 ` Simon Glass
2023-08-03 14:18 ` Maxim Uvarov
2023-08-02 14:06 ` [PATCHv5 03/13] net/lwip: implement dns cmd Maxim Uvarov
2023-08-02 21:31 ` Simon Glass
2023-08-02 14:06 ` [PATCHv5 04/13] net/lwip: implement dhcp cmd Maxim Uvarov
2023-08-03 6:26 ` Ilias Apalodimas
2023-08-03 14:34 ` Maxim Uvarov
2023-08-02 14:06 ` [PATCHv5 05/13] net/lwip: implement tftp cmd Maxim Uvarov
2023-08-03 6:42 ` Ilias Apalodimas [this message]
2023-08-10 11:28 ` Maxim Uvarov
2023-08-10 19:23 ` Simon Goldschmidt
2023-08-02 14:06 ` [PATCHv5 06/13] net/lwip: implement wget cmd Maxim Uvarov
2023-08-03 6:48 ` Ilias Apalodimas
2023-08-03 14:59 ` Maxim Uvarov
2023-08-02 14:06 ` [PATCHv5 07/13] net/lwip: implement ping cmd Maxim Uvarov
2023-08-03 9:32 ` Ilias Apalodimas
2023-08-03 15:25 ` Maxim Uvarov
2023-08-02 14:06 ` [PATCHv5 08/13] net/lwip: add lwip configuration configuration Maxim Uvarov
2023-08-02 14:06 ` [PATCHv5 09/13] net/lwip: implement lwip port to u-boot Maxim Uvarov
2023-08-02 21:31 ` Simon Glass
2023-08-03 16:21 ` Maxim Uvarov
2023-08-08 10:07 ` Maxim Uvarov
2023-08-08 17:54 ` Simon Glass
2023-08-02 14:06 ` [PATCHv5 10/13] net/lwip: update .gitignore with lwip Maxim Uvarov
2023-08-02 21:31 ` Simon Glass
2023-08-03 6:01 ` Ilias Apalodimas
2023-08-02 14:06 ` [PATCHv5 11/13] net/lwip: connection between cmd and lwip apps Maxim Uvarov
2023-08-02 21:31 ` Simon Glass
2023-08-03 8:56 ` Ilias Apalodimas
2023-08-08 12:19 ` Maxim Uvarov
2023-08-08 18:12 ` Ilias Apalodimas
2023-08-09 19:29 ` Maxim Uvarov
2023-08-02 14:06 ` [PATCHv5 12/13] net/lwip: replace original net commands with lwip Maxim Uvarov
2023-08-02 21:31 ` Simon Glass
2023-08-08 14:05 ` Maxim Uvarov
2023-08-08 17:54 ` Simon Glass
2023-08-02 14:06 ` [PATCHv5 13/13] net/lwip: drop old net/wget Maxim Uvarov
2023-08-02 14:19 ` Maxim Uvarov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ZMtMSPDRHtkeMu4v@hades \
--to=ilias.apalodimas@linaro.org \
--cc=goldsimon@gmx.de \
--cc=joe.hershberger@ni.com \
--cc=lwip-devel@nongnu.org \
--cc=maxim.uvarov@linaro.org \
--cc=pbrobinson@redhat.com \
--cc=rfried.dev@gmail.com \
--cc=trini@konsulko.com \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.