From: DI PEDE Michele <michele.dipede@altran.com>
To: Antony Pavlov <antonynpavlov@gmail.com>
Cc: barebox <barebox@lists.infradead.org>,
Daniele Lacamera <daniele.lacamera@altran.com>
Subject: Re: picotcp barebox integration
Date: Sun, 1 Mar 2015 01:29:56 +0100 [thread overview]
Message-ID: <5243411.sF5OIl90BO@linux-small.site> (raw)
In-Reply-To: <20150228210101.cfcbb70a472f7a910e19aada@gmail.com>
On Sat 28 Feb 2015 21:01:01
Antony Pavlov <antonynpavlov@gmail.com> wrote:
> On Wed, 28 Jan 2015 14:35:19 +0100
>
> DI PEDE Michele <michele.dipede@altran.com> wrote:
> > Hi all,
> > HEAD of development branch contains the required API for a smooth
> > integration with Barebox.
> > User manual contains all the information for use them. There is also a
> > small demo TFTP client that show how to use the application driven
> > interface test/test_tftp_app_client.c. To build it just do make clean;
> > make test; cd test; make.
> > Now should be easy to integrate out stack in Barebox code.
> > Let me know how the integration effort proceed. We could provide proper
> > support from our side to speed up things.
>
> I have tryed to integrate picotcp tftp support into barebox.
Unfortunately I made a mistake in my commit (test/test_tftp_app_client.c was
missing due to the wrong insertion of the binary executable); I do apologize.
It contains the call sequence you need for the integration in Barebox. Please
take a look at test/test_tftp_app_client.c
[...]
> IMHO the tftp interface introduced in this picotcp development branch
> can't be easely integrated into barebox tftp filesystem support code.
Please take a look at the application driven API.
>
> I'll illustrate this on sample barebox tftp file download session:
>
> barebox user setup network parameters and run 'tftp <filename>' command;
>
> the tftp commands mounts tftp-server rootdir to barebox
> "/.tftp_tmp_path"; and start file copy operation
> (/.tftp_tmp_path/<filename> -> /<filename>).
>
> copy operation consists of standard calls (very schematically):
>
> srcfd = open(<source file>, O_RDONLY);
> ...
> dstfd = open(<destination file>, O_WRONLY | O_CREAT | O_TRUNC);
> ...
> stat(srcfd, ...); /* just determine source file size if possible */
> ...
> while (r = read(srcfd, buffer, 4096)) {
> write(dstfd, buffer, r);
> ...
> }
>
> so reading data block from tftp-server is made by initiative of
> barebox command. The barebox tftp support code realize all standard calls
> (open, stat, read, write ...).
>
> But let's examine picotcp tftp API. Picotcp tftp downloading file code
> consist of
>
> priv->session = pico_tftp_session_setup(&tpriv->server_ip4,
> PICO_PROTO_IPV4); ...
> pico_tftp_start_rx(priv->session, short_be(PICO_TFTP_PORT),
> filename, cb_tftp_rx_opt, priv);
>
> But pico_tftp_start_rx() tries to download WHOLE FILE from
> tftp-server. I see no means to suspend data transfer initiated by
> pico_tftp_start_rx(), so I have no means to realize necessary read() and
> write() calls.
You tried to use the wrong API.
In order to integrate our stack you should use the application driven API. It
is documented in user manual in section 3.12 (TFTP). In order to receive a
file the sequence should be:
session = pico_tftp_app_setup(&server_address, short_be(PICO_TFTP_PORT),
PICO_PROTO_IPV4, &synchro);
ret = pico_tftp_app_start_rx(session, filename);
ret = pico_tftp_get_file_size(session, &file_size);
if (ret)
printf("Information about file size has not been received"\n);
while (file_is_not_complete) {
len = pico_tftp_get(session, buf, PICO_TFTP_PAYLOAD_SIZE);
....
}
The example contained in test/test_tftp_app_client.c demonstrate how to use
the interface for application driven behaviour.
Best regards
Michele Di Pede
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
next prev parent reply other threads:[~2015-03-01 0:30 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-11-21 14:25 Antony Pavlov
2014-11-28 19:38 ` Daniele Lacamera
2014-12-19 17:28 ` Michele Di Pede
2015-01-28 13:35 ` DI PEDE Michele
2015-02-28 17:01 ` Antony Pavlov
2015-03-01 0:29 ` DI PEDE Michele [this message]
2015-03-01 12:54 ` Antony Pavlov
2015-03-01 16:15 ` DI PEDE Michele
2015-03-31 12:50 ` Antony Pavlov
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=5243411.sF5OIl90BO@linux-small.site \
--to=michele.dipede@altran.com \
--cc=antonynpavlov@gmail.com \
--cc=barebox@lists.infradead.org \
--cc=daniele.lacamera@altran.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox