[RTEMS Project] #3850: Modular Network Stacks

RTEMS trac trac at rtems.org
Mon Jan 6 17:17:22 UTC 2020


#3850: Modular Network Stacks
--------------------------+--------------------------
 Reporter:  Gedare Bloom  |       Owner:  Chris Johns
     Type:  project       |      Status:  assigned
 Priority:  normal        |   Milestone:  Indefinite
Component:  admin         |     Version:
 Severity:  normal        |  Resolution:
 Keywords:  SoC,kernel    |  Blocked By:
 Blocking:                |
--------------------------+--------------------------
Description changed by Gedare Bloom:

Old description:

> = Modular Network Stacks =
>
> [[PageOutline(1-5, Contents, inline)]]
>
> == Mentors ==
> Chris Johns, Sebastian Huber, Pavel Pisa, Joel Sherrill
>
> == Students ==
>
> TBD
>
> == Status ==
>
> Looking for funding/motivated students.
>
> = Introduction =
>
> The goal of this project is to facilitate use of networking stacks in a
> more modular fashion.
>
> RTEMS has 3 commonly used networking stacks known as:
> * legacy (cpukit/libnetworking): used primarily by established users with
> networking needs. The most visible of these is the [https://epics-
> controls.org/ EPICS Project].
> * libbsd (git.rtems.org/rtems-libbsd.git): state-of-the-art for high-
> performance networking. It is the recommended stack for new development
> for systems with sufficient resources to run the stack.
> * lwIP: useful for low-resource (usually, RAM) systems to use.
> Other networking stacks are also possible to use, but these are the
> mainly interesting ones.
>
> == Prerequisites ==
>
> * Ability to read/write C programs (pointer-based data structures).
> * Ability to debug C programs.
> * Ability to read/write Python programs with OOP.
> * Ability to compile and run networking applications in *nix and RTEMS.
> * Ability to use Wireshark to view network packets.
> * Knowledge of one or more assembly languages.
> * Knowledge of OSI model.
> * Knowledge of hardware and device drivers.
>
> == Resources ==
>
> * Current RTEMS developers.
> * [https://docs.rtems.org/branches/master/networking/index.html RTEMS
> Networking Manual] for the legacy stack.
> * [wiki:Packages/LWIP] describes some of the prior work with lwIP.
> * [http://ragustechblog.blogspot.com/2015/08/rtems-beaglebone-black-with-
> lwip.html Ragunath's Blog] describes his experience using lwIP with RTEMS
> on the Beaglebone Black.
> * [https://beej.us/guide/bgnet/ Beej's Guide to Network Programming] is
> an excellent resource to understand the interface provided by networking
> stacks.
>
> = Tasks =
>
> The following are the high-level tasks to accomplish:
>
> == Legacy Stack ==
>
> The legacy stack is loosely coupled to RTEMS. It is built from within
> rtems.git/cpukit/libnetworking when the --enable-networking option is
> given during the configure stage of building RTEMS. This subdirectory
> needs to be factored out of rtems.git and put in its own standalone
> repository that can be compiled separately from compiling RTEMS. Then,
> the build process for the legacy network stack should be added to the
> RSB.
>
> == lwIP ==
>
> lwIP is meant to be compiled and customized with baremetal and RTOS code
> bases. The main problem with lwIP is that too much customization can make
> it hard to maintain, and then the port of lwIP bitrots and is no longer
> usable with RTEMS. Thus, the integration of lwIP with RTEMS needs to be
> made more seamless and maintainable. The first step in that direction is
> to revive and fix the RSB recipe for building lwIP, see #3770 for more
> information. Other problems raised in the [Packages/LWIP] page may also
> be relevant, and the integration may also require adding any missing bits
> to newlib as mentioned in #2833.
>
> == libbsd ==
>
> Not much needs to be done here, other than to avoid breaking anything.
> The libbsd already builds via RSB as a standalone module that can be
> linked with RTEMS.
>
> = Testing =
>
> A network-ready target and application should be used for testing.
> Consult with mentors during the planning phase. The most likely candidate
> is to use Qemu with a simple networking example.

New description:

 = Modular Network Stacks =

 [[PageOutline(1-5, Contents, inline)]]

 == Mentors ==
 Chris Johns, Sebastian Huber, Pavel Pisa, Joel Sherrill

 == Students ==

 TBD

 == Status ==

 Looking for funding/motivated students.

 = Introduction =

 The goal of this project is to facilitate use of networking stacks in a
 more modular fashion.

 RTEMS has 3 commonly used networking stacks known as:
 * legacy (cpukit/libnetworking): used primarily by established users with
 networking needs. The most visible of these is the [https://epics-
 controls.org/ EPICS Project].
 * libbsd (git.rtems.org/rtems-libbsd.git): state-of-the-art for high-
 performance networking. It is the recommended stack for new development
 for systems with sufficient resources to run the stack.
 * lwIP: useful for low-resource (usually, RAM) systems to use.
 Other networking stacks are also possible to use, but these are the mainly
 interesting ones.

 == Prerequisites ==

 * Ability to read/write C programs (pointer-based data structures).
 * Ability to debug C programs.
 * Ability to read/write Python programs with OOP.
 * Ability to compile and run networking applications in *nix and RTEMS.
 * Ability to use Wireshark to view network packets.
 * Knowledge of one or more assembly languages.
 * Knowledge of OSI model.
 * Knowledge of hardware and device drivers.

 == Resources ==

 * Current RTEMS developers.
 * [https://docs.rtems.org/branches/master/networking/index.html RTEMS
 Networking Manual] for the legacy stack.
 * [wiki:Packages/LWIP] describes some of the prior work with lwIP.
 * [http://ragustechblog.blogspot.com/2015/08/rtems-beaglebone-black-with-
 lwip.html Ragunath's Blog] describes his experience using lwIP with RTEMS
 on the Beaglebone Black.
 * [https://beej.us/guide/bgnet/ Beej's Guide to Network Programming] is an
 excellent resource to understand the interface provided by networking
 stacks.

 = Tasks =

 The following are the high-level tasks to accomplish:

 == Legacy Stack ==

 The legacy stack is loosely coupled to RTEMS. It is built from within
 rtems.git/cpukit/libnetworking when the --enable-networking option is
 given during the configure stage of building RTEMS. This subdirectory
 needs to be factored out of rtems.git and put in its own standalone
 repository that can be compiled separately from compiling RTEMS. Then, the
 build process for the legacy network stack should be added to the RSB.

 == lwIP ==

 lwIP is meant to be compiled and customized with baremetal and RTOS code
 bases. The main problem with lwIP is that too much customization can make
 it hard to maintain, and then the port of lwIP bitrots and is no longer
 usable with RTEMS. Thus, the integration of lwIP with RTEMS needs to be
 made more seamless and maintainable. One of the first steps in that
 direction is to revive and fix the RSB recipe for building lwIP, see #3770
 for more information. Other problems raised in the [wiki:Packages/LWIP]
 page are also relevant, and the integration may also require adding any
 missing bits to newlib as mentioned in #2833. It is important to make a
 tight integration between lwIP and RTEMS to avoid excessive indirection
 overhead, while balancing with the need to maintain and update the lwIP
 package.

 == libbsd ==

 Not much needs to be done here, other than to avoid breaking anything. The
 libbsd already builds via RSB as a standalone module that can be linked
 with RTEMS.

 = Testing =

 A network-ready target and application should be used for testing. Consult
 with mentors during the planning phase. The most likely candidate is to
 use Qemu with a simple networking example.

--

--
Ticket URL: <http://devel.rtems.org/ticket/3850#comment:1>
RTEMS Project <http://www.rtems.org/>
RTEMS Project


More information about the bugs mailing list