A Rust library for the SOME/IP (Scalable service-Oriented MiddlewarE over IP) protocol, built on std::net.
- Pure Rust - No C dependencies, built on
std::net - Complete header support - Full 16-byte SOME/IP header with serialization
- Type-safe IDs -
ServiceId,MethodId,ClientId,SessionIdnewtypes - TCP & UDP - Both transport protocols with client/server support
- Builder pattern - Fluent API for message construction
- Request/Response - Built-in session management and correlation
[dependencies]
someip-rs = "0.1"use someip_rs::{SomeIpMessage, ServiceId, MethodId};
use someip_rs::transport::TcpClient;
let mut client = TcpClient::connect("127.0.0.1:30490")?;
let request = SomeIpMessage::request(ServiceId(0x1234), MethodId(0x0001))
.payload(b"Hello, SOME/IP!".as_slice())
.build();
let response = client.call(request)?;
println!("Response: {:?}", response.payload);use someip_rs::transport::TcpServer;
use someip_rs::MessageType;
let server = TcpServer::bind("127.0.0.1:30490")?;
for connection in server.incoming() {
let mut conn = connection?;
let request = conn.read_message()?;
if request.header.message_type == MessageType::Request {
let response = request.create_response()
.payload(b"Hello back!".as_slice())
.build();
conn.write_message(&response)?;
}
}use someip_rs::{SomeIpMessage, ServiceId, MethodId};
use someip_rs::transport::{UdpClient, UdpServer};
// Client
let mut client = UdpClient::new()?;
let request = SomeIpMessage::request(ServiceId(0x1234), MethodId(0x0001))
.payload(b"ping".as_slice())
.build();
let response = client.call_to("127.0.0.1:30491", request)?;
// Server
let mut server = UdpServer::bind("127.0.0.1:30491")?;
let (request, client_addr) = server.receive()?;
server.respond(&request, b"pong".as_slice(), client_addr)?;SOME/IP messages consist of a 16-byte header followed by an optional payload:
+----------------+----------------+----------------+----------------+
| Service ID (16) | Method ID (16) |
+----------------+----------------+----------------+----------------+
| Length (32) |
+----------------+----------------+----------------+----------------+
| Client ID (16) | Session ID (16) |
+----------------+----------------+----------------+----------------+
| Proto Ver (8) | Iface Ver (8) | Msg Type (8) | Return Code(8) |
+----------------+----------------+----------------+----------------+
| Payload (variable) |
+----------------+----------------+----------------+----------------+
See examples/ for complete working examples:
message_basics.rs- Message creation, serialization, and parsingtcp_server.rs- TCP echo servertcp_client.rs- TCP client with request/responseudp_server.rs- UDP server with responsesudp_client.rs- UDP client with request/response
Run examples:
# Message basics (standalone)
cargo run --example message_basics
# TCP (run server first, then client)
cargo run --example tcp_server
cargo run --example tcp_client
# UDP (run server first, then client)
cargo run --example udp_server
cargo run --example udp_clientMIT OR Apache-2.0. See LICENSING.md.