Contents Menu Expand Light mode Dark mode Auto light/dark, in light mode Auto light/dark, in dark mode Skip to content
The iceoryx2 Book
iceoryx2 The Book

User Manual

  • Overview
    • What is iceoryx2?
    • Why Does It Matter?
    • How Does It Fit?
    • What Does It Enable?
    • Where Is It Going?
  • Getting Started
    • Quickstart
    • A Robot Nervous System
      • Publish–Subscribe
      • Event
      • Event-Driven Communication
      • Request-Response
      • Blackboard
      • Cross-host communication
      • Command Line Tools and Debugging
  • Fundamentals
    • Layered Architecture
    • Shared Memory
    • Communication Model
    • Messaging Patterns
      • Publish-Subscribe
      • Event
      • Request-Response
      • Blackboard
    • Execution Control
    • Cross-Language Support
    • Links
  • Tutorials
    • Execution Control Patterns
    • Gateway to ROS 2
      • Gateway Basics
      • Plain Struct as Payload
      • CDR Bytes as Payload
      • FlatBuffer as Payload
      • Event-Driven Execution
  • How To
    • Build for no_std targets
    • Build the ROS 2 gateway
    • Configure the logging backend
    • Customize the platform abstraction
  • Glossary

API Reference

  • Overview
  • Rust
  • Python
  • C++
  • C
Back to top

Links¶

A link extends iceoryx2 communication beyond its shared memory domain. It can be used to connect to other middlewares, or to other iceoryx2 systems outside its shared memory domain, such as those on other hosts, on other processors on the same board, or in virtual machines without shared memory between them.

A link discovers what is offered at both ends of the connection and makes it available at the other end. Applications use services made available by a link like any local service, and communicate across it without changes to their code.

Links can run in separate processes, isolating non-deterministic communication, such as networking, from safety-critical code.

Another Middleware e.g. ROS 2, DDS, MQTT Participant … Transport iceoryx2 System A Participant … Link Gateway Shared Memory Link Tunnel iceoryx2 System B Participant … Link Tunnel Shared Memory adapter carrier

A Gateway and a Tunnel Extending an iceoryx2 System¶

Link Backends¶

Each link combines a common core with a generic backend:

  • The core handles the local iceoryx2 system. It discovers the services offered locally and moves their data in and out of shared memory.

  • The backend handles the opposing side. It discovers what is offered there and moves data across the boundary.

Two kinds of backend are provided out-of-the-box, gateways and tunnels. Gateways are extended to new middlewares through adapters, and tunnels to new mechanisms through carriers. If neither kind fits, a new backend kind can be implemented.

iceoryx2 System Participant … Shared Memory Link Core Backend Gateway Tunnel … Opposing Side Participant Participant … discover move data relay discover move data

The Core and Backend of a Link¶

Note

Links aim to keep data copies to a minimum. Where the API of the mechanism allows it, data moves from shared memory straight into its send buffer, and from its receive buffer straight into shared memory.

Gateways¶

Gateways connect iceoryx2 to another middleware through an adapter. Besides the adapter, a gateway is configured with a mapping, which decides which services correspond to which of the middleware’s endpoints, and a translator, which converts data between their formats. This lets applications that do not use iceoryx2 participate in the communication.

iceoryx2 System Participant … Shared Memory Link Core Gateway Backend Mapping Translator Adapter Other Middleware Endpoint Endpoint … endpoint native form relay native messages

The Components of a Gateway¶

An adapter integrates a single middleware. It lists the middleware’s endpoints and exchanges messages with them. An adapter for ROS 2 is provided, and further middlewares can be supported by implementing additional adapters.

Tunnels¶

Tunnels connect iceoryx2 systems through a carrier, such as a network protocol or a hypervisor channel. Samples cross as-is, in the exact form they have in shared memory. By avoiding data transformation, tunnels minimize processing overhead.

3f a1 07 c2 iceoryx2 System A Shared Memory 3f a1 07 c2 Link Tunnel iceoryx2 System B Link Tunnel Shared Memory 3f a1 07 c2

A Sample Crossing a Tunnel¶

A carrier integrates a single communication mechanism. It announces services to its peers and carries their bytes. A carrier over Zenoh is provided, and further mechanisms can be supported by implementing additional carriers.

Further Reading¶

Explore the Link Implementation

Browse the link, its backends and their contracts.

https://github.com/eclipse-iceoryx/iceoryx2/tree/main/iceoryx2-link
Explore the Zenoh Tunnel

See a carrier tunneling iceoryx2 over Zenoh.

https://github.com/eclipse-iceoryx/iceoryx2/tree/main/integrations/zenoh/link-carrier
Explore the ROS 2 Gateway

See an adapter integrating iceoryx2 with ROS 2.

https://github.com/eclipse-iceoryx/iceoryx2/tree/main/integrations/ros2/link-adapter
Next
Tutorials
Previous
Cross-Language Support
Copyright © 2026 Eclipse Foundation
Eclipse iceoryx™ is free, open source software, licensed under Apache 2.0 or MIT.
Made with Sphinx and Furo
On this page
  • Links
    • Link Backends
      • Gateways
      • Tunnels
    • Further Reading