#3691 closed project (fixed)

RTEMS Testing TFTP Proxy Project

Reported by: Chris Johns Owned by: Chris Johns
Priority: normal Milestone: Indefinite
Component: unspecified Version: 5
Severity: normal Keywords: SoC, testing, ecosystem, python
Cc: Blocked By:


RTEMS Testing TFTP Proxy Project


  1. RTEMS Testing TFTP Proxy Project
    1. Mentors
    2. Status
  2. Introduction
  3. Project
    1. Goal
    2. Prerequisite
    3. Resources
  4. Tasks
    1. Proxy Tool
    2. Configuration Files
  5. Acknowledgements
  6. Miscellaneous Sections
  7. References


Chris Johns



This project involves working with the RTEMS Testing Tool that resides in the RTEMS Tools package and is part of the RTEMS Tools Project. The RTEMS Testing Tool provides a consistent way to test BSPs on different hardware. The tool aims to integrate with a wide range of testing tools and methods generating a consistent report for the RTEMS test suite.

An important part of test is testing on real hardware and this may use the TFTP protocol. The RTEMS Testing Tool contains a TFTP server so a single run of the tool results in a sequential run of the tests for the hardware. It also means there can only be a single test run on the host. These are both seen as limitation as the time to run all the tests on real hardware is long.


The project is to develop a TFTP proxy in C++ that is built for a host when the RTEMS Tools project is build on a host. The TFTP is to take a configuration that maps the TFTP client IP address to a proxy port. The rtems-test tool can be configure to connect to the proxy port and so to a TFTP client which is the board running the tests.

The RTEMS Tool's rtems-test command can test on hardware using the TFTP protocol and U-boot however the rtems-test command needs to be run as root because the standard TFTP port can only be used when root. A proxy can be run as root while the RTEMS Testing tool can be run as a user.

The U-Boot has support in the code to set a server IP address however there was no configuration option and the support is not built in by default. Using the server IP would mean standard U-Boot loaders shipped with boards could not be used.


  • Create a service or daemon that can run as root to proxy TFTP requests.
  • Read an INI configuration file of TFTP Client IP address mapped to remote IP and port.
  • Send a request from a client to the configured remote IP and port and so rtems-test for that board.
  • Provide optional logging via syslog.
  • Provide command line options to trace the proxy tool when integrating.


  • Knowledge of C, C++ and Python programming languages.
  • Knowledge of Unix software and Unix networking protocols.
  • Knowledge of the RTEMS Tool's Toolkit.
  • Requires Unix (Linux or FreeBSD) host.
  • Requires modern PC hardware. Building all tests and running takes.
  • A Zedboard, MicroZed? or BeagleBone? Black.
  • Optionally a Windows 10 machine to test and check.


  • Current RTEMS developers.
  • The existing RTEMS Testing Tool.


The following are the tasks:

Proxy Tool

Build a program to:

  1. Listen on the detault TFTP port for UDP requests
  2. Extract the source IP address and locate the IP address and port.
  3. Send the request to the remote IP address and port.
  4. Determine if the TFTP protocol will continue between the client and the remote server or the proxy tool need to listen for the remote's response to send to the client.

Configuration Files

Develop a simple configuration for management of boards and testers.



Miscellaneous Sections

As the project progresses, you will need to add to the RTEMS Testing section of the User manual. This section does not currently exist but it should be present even in a skeleton form.


  • None

Change History (2)

comment:1 Changed on Jan 14, 2020 at 8:58:57 PM by Gedare Bloom

Owner: set to Chris Johns
Status: newassigned

comment:2 Changed on Jan 20, 2020 at 4:12:26 AM by Chris Johns

Resolution: fixed
Status: assignedclosed

A Python command has been added to RTEMS Tools ...


Note: See TracTickets for help on using tickets.