recentip 0.1.0-alpha.6

An opinionated async SOME/IP implementation for Rust — boring by design, backed by Tokio.
Documentation

RecentIP

Warning! This is an alpha stage hobby project for exploration. The goal is to create a solid, easy-to-use and performant middleware implementation that is easily and fearlessly maintainable.

Crate Docs License: GPL-3.0

An opinionated async and boring SOME/IP protocol implementation.

SOME/IP (Scalable service-Oriented MiddlewarE over IP) is the standard middleware protocol for automotive Ethernet communication, enabling service-oriented communication between ECUs in modern vehicles.

Features

  • Zero-panic expect, unwrap, indexing forbidden by clippy rule
  • Lock-free hot paths Data is passed using channels for uninterrupted non-blocking flows
  • Tokio-backed async scales from single to multicore execution
  • Spec compliance testsuite and report
  • Lint rule for proper usage
  • No-unsafe forbidden by clippy rule

Supported SOME/IP

Right now, this lib implements these core parts of the SOME/IP protocol:

  • Service Discovery — Automatic discovery via multicast SD protocol
  • RPC — Request/response and fire-and-forget method calls
  • Pub/Sub — Event subscriptions with eventgroup management

Installation

Add to your Cargo.toml:

[dependencies]
recentip = "0.1"

Documentation

API Documentation — Configuration, API overview, and compile-checked examples

Testing

The library heavily leverages turmoil for deterministic and fast network and time simulation. There are several test suites:

  • Unit tests in each module
  • Compliance tests in tests/compliance certifying compliance with the SOME/IP specs backed.
  • Real network tests not using turmoil.
  • API behavior tests for non-spec behavior.
# Run most tests (~10s)
cargo nextest run

# Run all tests (~10s)
cargo nextest run --cargo-profile fast-release --features slow-tests

# Generate coverage report
cargo llvm-cov nextest --features slow-tests

# Doc tests
cargo test --doc

RecentIP Lints

RecentIP comes with a lint rule for detecting wrong usage of the it that cannot be enforced by types.

  • The RUNTIME_MUST_SHUTDOWN lint warns when a SomeIp might be dropped without shutdown().

Use the included dylint lint crate:

# Install dylint
cargo install cargo-dylint dylint-link

# Run lints
cargo dylint --all

Specification Compliance

This implementation targets full compliance with the open SOME/IP 2025-12 specification. Support per requirement can be verified using the traceability report.

Architecture

┌─────────────────────────────────────────────────────────────┐
│                      User Application                       │
│ SomeIp-Handle     OfferedService          ServiceOffering   │
└────┬────────────────────┬─────────────────────┬─────────────┘
     │                    │▲ Events             │▲ Events
     │           Commands ▼│           Commands ▼│
┌─────────────────────────────────────────────────────────────┐
│                     SomeIp (Event Loop)                     │
│   Multiplexes: commands, SD, RPC, TCP, timers               │
└─────────────────────────────────────────────────────────────┘
           │                              │
           ▼                              ▼
    ┌─────────────┐                ┌─────────────────────────┐
    │ SD Socket   │                │ Pub/Sub and RPC Sockets │
    │ UDP:30490   │                │ UDP/TCP                 │
    └─────────────┘                └─────────────────────────┘

Handles (OfferedService, ServiceOffering) don't perform I/O directly—they send commands to the central event loop, which owns all sockets and state.

Not yet implemented

  • SOME/IP-TP
  • Encryption
  • De-/Serialization
  • Fields, Getter, Setter
  • Configuration handling

License

This project is licensed under the GPL-3.0 License.

Contributing

See CONTRIBUTING.md.