This article provides an overview of the Eclipse iceoryx architecture and explains the rationale for it.
Software layers
The main packages which Eclipse iceoryx is composed of are depicted below.
The next sections briefly describe the components and their libraries one by one.
Components and libraries
The different libraries and their namespaces are depicted below.
iceoryx hoofs
Handy Objects Optimized For Safety (hoofs) is a library and contains various building blocks like fixed size containers, concurrency classes and modern, next-gen C++ constructs from upcoming C++ standard releases.
For more information about the components, refer to its detailed description.
iceoryx posh
The package iceoryx_posh (POSIX SHared memory) contains everything related to shared memory inter-process communication.
Core library
This section describes the namespaces of the core library.
popo: The namespace posh ports contains the user-API classes which are used to transfer data.capro: The namespace canonical protocol implements the canonical protocol pattern protocol, which is used byiceoryx_poshto connect and discoverpopo::Publisherandpopo::Server.mepoo: The namespace memory pool contains all memory-related classes. For example theMemoryManagerorSharedPointer.version: The namespace version contains ABI compatibilities checks.build: The namespace build contains certain maximium values which can be changed before compilation.
Gatway library
- The gateway library and its namespace
gwcontain generic abstractions to create a gateway. They are used byiceoryx_dds.
RouDi library
- The library RouDi and its namespace
roudicontains classes which are used by the RouDi middleware daemon.
iceoryx C binding
The module iceoryx_binding_c makes the inter-process communication features of iceoryx_posh available in C.
iceoryx DDS
The package iceoryx_dds provides a bi-directional DDS gateway using Eclipse Cyclone DDS.
The gateway can be used to send data over a network e.g. via Ethernet.
For more information, refer to the Readme.
iceoryx introspection
The introspection client can be used for live debugging and provides information of the current system like memory usage and established connections.
For more information, refer to the icecrystal example.