mirror of
https://git.rtems.org/rtems-docs/
synced 2025-05-15 05:39:11 +08:00
167 lines
5.4 KiB
ReStructuredText
167 lines
5.4 KiB
ReStructuredText
.. SPDX-License-Identifier: CC-BY-SA-4.0
|
|
|
|
.. Copyright (C) 2020 Chris Johns <chrisj@rtems.org>
|
|
|
|
.. _RTEMSTFTPProxy:
|
|
|
|
RTEMS TFTP Proxy
|
|
================
|
|
|
|
.. index:: Tools, rtems-tftp-proxy
|
|
|
|
The RTEMS TFTP Proxy (:program:`rtems-tftp-proxy`) command is an RTEMS
|
|
tool to simplify hardware testing using the RTEMS Test and Run
|
|
commands. This command lets a test set up support a number of
|
|
similarly configured boards running tests at the same time by proxying
|
|
the TFTP session requests. The :ref:`tftp-and-uboot` section details
|
|
the process to run a test executable on a network connected board.
|
|
|
|
The TFTP Proxy approach does not require any special modifications in
|
|
a boot loader to work and works with any compliant TFTP boot client.
|
|
|
|
An identical SD card boot configuration can be used in similar board
|
|
when a test set up has a number of similar boards. There is no need to
|
|
specialize boot configurations. The TFTP proxy server identifies each
|
|
board by MAC address.
|
|
|
|
A configuration file maps a board's MAC address to a TFTP server's IP
|
|
address and port number. This provides a centralized means to
|
|
partition hardware in a test rack between members of a team, continuous
|
|
integration services or any other project demands.
|
|
|
|
The TFTP port number a proixed service runs with does not need to be
|
|
the privileged TFTP port number removing the need to be root to run
|
|
the RTEMS Test or Run commands. Only the TFTP Proxy needs to running
|
|
as a privileged user. The RTEMS Test and Run commands lets you
|
|
specified the TFTP port to bind too.
|
|
|
|
Operation
|
|
---------
|
|
|
|
A network connected board with a suitable boot loader such as U-Boot
|
|
is configured to boot using TFTP. The boot loader's configured TFTP
|
|
server IP address is the address of the host computer running the TFTP
|
|
Proxy server or the proxy. The TFTP Proxy runs as root or an
|
|
administrator as it binds by default to the default TFTP port of 69.
|
|
|
|
A reset board sends a TFTP read request (``RRQ``) packet to the host
|
|
machine running the TFTP proxy on the standard TFTP port (69). The
|
|
proxy server searches the configuration data for a matching MAC
|
|
address. A configuration match creates a session, forwarding the
|
|
read request to the proxied IP and port.
|
|
|
|
The response from the proxied server identifies the remote session
|
|
port number and the proxy server knows the board's client port number
|
|
from the initial request. The proxy transfers the TFTP data
|
|
transparently between the session's ports until the transfer finishes.
|
|
|
|
An example configuration is three different types of boards used for
|
|
RTEMS kernel regression testing and application development.
|
|
|
|
.. _fig-tftp-proxy-1:
|
|
|
|
.. figure:: ../../images/user/tftp-proxy-1.png
|
|
:width: 75%
|
|
:alt: RTEMS TFTP Proxy Test Lab
|
|
:figclass: align-center
|
|
|
|
RTEMS TFTP Proxy Test Lab
|
|
|
|
The project has a continuous integration (CI) server on address
|
|
``10.0.0.100`` and two boards, a BeagleBone Black and Xilinx MicroZed
|
|
board, are confgured for testing. A developer on another host machine
|
|
is using a RaspberryPi to develop an application. The configuration
|
|
file is:
|
|
|
|
.. code-block:: none
|
|
|
|
;
|
|
; Project Foo Test network.
|
|
;
|
|
[default]
|
|
clients = bbb, uzed, rpi2
|
|
|
|
[bbb]
|
|
mac = 1c:ba:8c:96:20:bc
|
|
host = 10.0.0.100:9001
|
|
|
|
[uzed]
|
|
mac = 6e:3a:1c:22:aa:5f, 8a:3d:5f:67:55:cb
|
|
host = 10.0.0.100:9002
|
|
|
|
[rpi2]
|
|
mac = b8:27:eb:29:6b:bc
|
|
host = 10.0.0.110:9001
|
|
|
|
The MicroZed board can be seen by different MAC addresses depending on
|
|
how U-Boot starts. As a result both are listed.
|
|
|
|
Configuration
|
|
-------------
|
|
|
|
The boot image tool is configured by an INI file that is passed to the
|
|
TFTP proxy on the command line when it starts.
|
|
|
|
The ``[default]`` section has to contain a ``clients`` entry that
|
|
lists the clients. There needs to be a client section for each listed
|
|
client.
|
|
|
|
A client section header is a client name listed in the ``clients``
|
|
record in the ``defaults`` section. A client section has to contain a
|
|
``mac`` record and a ``host`` record. The MAC record is a comma
|
|
separated list of MAC addresses in the standard 6 octet hex format
|
|
separated by ``:``. A list of MAC addresses will match for any address
|
|
listed. The host record is the IP address and port number of the
|
|
proxied TFTP server.
|
|
|
|
Command
|
|
-------
|
|
|
|
The :program:`rtems-tftp-proxy` tool runs a TFTP proxy server using a
|
|
user provided configuration file. The command line options are:
|
|
|
|
:program:`rtems-tftp-proxy`
|
|
|
|
.. option:: -h, --help
|
|
|
|
Display the command line help.
|
|
|
|
.. option:: -l, --log
|
|
|
|
Set the log file name.
|
|
|
|
.. option:: -v, --trace
|
|
|
|
Enable trace or debug logging.
|
|
|
|
.. option:: -c CONFIG, --config CONFIG
|
|
|
|
The INI format configuration file.
|
|
|
|
.. option:: -B BIND, --bind BIND
|
|
|
|
The interface address the proxy binds too. The default is ``all``
|
|
which means the proxy binds to all interfaces.
|
|
|
|
.. option:: -P PORT, --port PORT
|
|
|
|
The port the proxy server binds too. The default is the TFTP
|
|
standard port of 69. This is a privileged port so if using this
|
|
port number run the TFTP proxy with root or administrator
|
|
privileges.
|
|
|
|
Examples
|
|
--------
|
|
|
|
The examples show running the TFTP Proxy as a privileged user:
|
|
|
|
.. code-block:: none
|
|
|
|
$ sudo rtems-tftp-proxy -c foo-test-lab.ini
|
|
Password:
|
|
RTEMS Tools - TFTP Proxy, 5.1.0
|
|
Command Line: rtems-tftp-proxy -c foo-test-lab.ini
|
|
Host: FreeBSD ruru 12.0-RELEASE-p3 FreeBSD 12.0-RELEASE-p3 GENERIC amd64
|
|
Python: 3.6.9 (default, Nov 14 2019, 01:16:50) [GCC 4.2.1 Compatible FreeBSD Clang 6.0.1 (tags/RELEASE_601/final 335540)]
|
|
Proxy: all:6
|