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.
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.
- 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
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
Add to your Cargo.toml:
[dependencies]
recentip = "0.1"API Documentation — Configuration, API overview, and compile-checked examples
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/compliancecertifying 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 --docRecentIP comes with a lint rule for detecting wrong usage of the it that cannot be enforced by types.
- The
RUNTIME_MUST_SHUTDOWNlint warns when aSomeIpmight be dropped withoutshutdown().
Use the included dylint lint crate:
# Install dylint
cargo install cargo-dylint dylint-link
# Run lints
cargo dylint --allThis implementation targets full compliance with the open SOME/IP 2025-12 specification. Support per requirement can be verified using the traceability report.
┌─────────────────────────────────────────────────────────────┐
│ 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.
- SOME/IP-TP
- Encryption
- De-/Serialization
- Fields, Getter, Setter
- Configuration handling
This project is licensed under the GPL-3.0 License.
See CONTRIBUTING.md.