| Crates.io | someip-rs |
| lib.rs | someip-rs |
| version | 0.1.0-alpha.1 |
| created_at | 2025-12-20 06:04:12.270104+00 |
| updated_at | 2025-12-20 06:04:12.270104+00 |
| description | SOME/IP protocol implementation built on std::net |
| homepage | https://github.com/reneherrero/someip-rs |
| repository | https://github.com/reneherrero/someip-rs |
| max_upload_size | |
| id | 1996060 |
| size | 101,287 |
A Rust library for the SOME/IP (Scalable service-Oriented MiddlewarE over IP) protocol, built on std::net.
std::netServiceId, MethodId, ClientId, SessionId newtypes[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/responseRun 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_client
MIT OR Apache-2.0. See LICENSING.md.