SOME/IP Protocol
SOME/IP Overview
SOME/IP is a communication protocol primarily used in automotive and other embedded systems. It facilitates communication between electronic control units (ECUs) within a networked environment. The protocol is built on top of the Internet Protocol (IP) stack, making it suitable for use in IP-based networks.
Embien’s SOME/IP stack covers all the services defined as part of the AUTOSAR standard specification, enabling communication between ECUs. Our SOME/IP stack is implemented on top of the Internet Protocol (IP) stack.
Some of the salient features of RAPIDSEA SOME/IP protocol stack are
Support for both server mode and client mode
ISO-TP layer with up to 4095 bytes transfer support
MISRA-C compliant ANSI C source code
Can be used with or without RTOS
Can support 8, 16, 32, 64-bit CPUs
The implementation is fully configurable and are offered for both server and client mode of operation.

Supported Services
1. Service Discovery (SD)
Automatically announces and discovers services and instances on the network.
Handles service availability and offers/requests using multicast messages.
- Key features include:
Service offer/request announcements.
Service version and instance management.
Subscription to event groups.
2. Message Serialization and Deserialization
Encodes and decodes data for communication between client and server.
Supports multiple data types such as arrays, structures, and basic data types.
Ensures compatibility between different system components.
3. Remote Procedure Call (RPC)
Facilitates remote invocation of services and methods over IP.
Supports synchronous and asynchronous communication patterns.
4. Event Notification
Provides mechanisms for servers to notify clients of changes or updates via events.
Supports subscription-based notification for specific event groups.
5. Event Group Handling
Groups related events together for efficient subscription and notification.
Allows clients to subscribe to specific event groups for tailored data updates.
SOME/IP Server
SOME/IP server is typically implemented in the ECUs so that the client can connect to it and perform data tranfer operations on the same. RAPIDSEA implements the SOME/IP server with the following features.
Support for all the services
Modular and extensible design
Portable across architectures
The SOME/IP Server stack implementation is covered in detail in the SOME/IP Server Stack page.
SOME/IP Client
RAPIDSEA implements SOME/IP client where service discovery process, Request and response can be performed on the ECUs. APIs are provided to perform services on the server with high level of control and performance.RAPIDSEA implements the SOME/IP client with the following features.
Support for all the services
Modular and extensible design
Portable across architectures
The SOME/IP Client stack implementation is covered in detail in the SOME/IP Client Stack page.
SOME/IP Header Details
Documentation from the relevant header as follows:
SomeIP Module.
This file contains the APIs for using defined SOME/IP Module
- Author
Embien RAPIDSEA Team
- Copyright
Embien Technologies India Pvt. Ltd.
Defines
-
RS_SOMEIP_PROTOCOL_VERSION
SOME/IP protocol version.
-
RS_SOMEIP_INTERFACE_VERSION
SOME/IP interface version.
-
RS_SOMEIP_DEF_MAJOR_VERSION
SOME/IP major version.
-
RS_SOMEIP_DEF_MINOR_VERSION
SOME/IP minor version.
-
RS_SOMEIP_SERVICE_ARRAY
SOME/IP Number of instance size.
-
RS_SOMEIP_EVENTGRP_ARRAY
SOME/IP Number of eventgroup size.
-
RS_SOMEIP_MAX_METHOD_ID_VAL
SOME/IP maximum method ID value.
-
RS_SOMEIP_DISCOVERY
SOME/IP discovery process index.
-
RS_SOMEIP_NOTIFICATION
SOME/IP notification process index.
-
RS_BUF_SIZE
SOME/IP message buffer size.
-
RS_SOMEIP_SRV_ID_SIZE
SOME/IP service ID array size.
-
RS_SOMEIP_INST_ID_SIZE
SOME/IP instance ID array size.
-
RS_SOMEIP_MSG_STATUS_FREE
Message is unused.
-
RS_SOMEIP_MSG_STATUS_IN_USE
Message is used.
-
RS_SOMEIP_MSG_STATUS_READY_FOR_TX
Message is ready to be transmitted.
-
RS_SOMEIP_MSG_STATUS_DISCARD
Message is to be discarded.
-
RS_SOMEIP_SUBSCRIBE_EVENTGROUP
SOME/IP subscribe eventgroup message type.
-
RS_SOMEIP_STOP_SUBSCRIBE_EVENTGROUP
SOME/IP stop subscribe eventgroup message type.
-
RS_SOMEIP_OFFER_SERVICE
SOME/IP offer service message type.
-
RS_SOMEIP_SUBSCRIBE_EVENTGROUP_ACK
SOME/IP subscribe eventgroup ACK message type.
-
RS_SOMEIP_SUBSCRIBE_EVENTGROUP_NACK
SOME/IP subscribe eventgroup NACK message type.
-
RS_SOMEIP_FIND_SERVICE
SOME/IP find service message type.
-
RS_SOMEIP_STOP_OFFER_SERVICE
SOME/IP stop offer service message type.
-
RS_DATA_TYPE_STRUCTURE
SOME/IP data type macro.
-
RS_DATA_TYPE_UINT8
-
RS_IP_ADDR_LEN
IP address length.
Typedefs
-
typedef struct tag_rs_someip_process_info rs_someip_process_info_t
Contains information about SOME/IP process details.
-
typedef struct tag_rs_someip_data rs_someip_data_t
Structure for configuring the SOME/IP interface.
-
typedef struct tag_rs_someip_subscribe_info rs_someip_subscribe_info_t
Contains information about SOME/IP subscribe details.
-
typedef struct tag_rs_someip_msg rs_someip_msg_t
Contains information about SOME/IP message information.
-
typedef struct tag_rs_someip_events rs_someip_events_t
Contains information about SOME/IP events.
-
typedef struct tag_rs_someip_event_data rs_someip_event_data_t
Contains information about event data of vehicle information.
-
typedef struct tag_rs_someip_eventgrp rs_someip_eventgrp_t
Contains information about SOME/IP eventgroup details.
-
typedef struct tag_rs_someip_service_info rs_someip_service_info_t
Contains information about SOME/IP service details.
-
struct tag_rs_someip_process_info
- #include <rs_someip.h>
Contains information about SOME/IP process details.
Public Members
-
rs_socket_config_t udp_socket_config
UDP socket configuration.
-
rs_udp_instance_t udp_socket_instance
UDP socket instance(Information)
-
rs_handle_t comm_handle
Handle for communication.
-
uint32_t data_len
Data length of RX/TX packet.
-
uint8_t state
SOME/IP process state.
-
uint8_t run_state
SOME/IP run state.
-
uint8_t data_buff[RS_BUF_SIZE]
Data buffer to store information.
-
rs_buffer_mgr_t tx_buf_mgr
Transmit buffer manager.
-
rs_buffer_mgr_t rx_buf_mgr
Receive buffer manager.
-
rs_buffer_mgr_t rx_msg_queue_mgr
RX message FIFO.
-
rs_buffer_mgr_t tx_msg_queue_mgr
TX message FIFO.
-
rs_socket_config_t udp_socket_config
-
struct tag_rs_someip_data
- #include <rs_someip.h>
Structure for configuring the SOME/IP interface.
-
struct tag_rs_someip_subscribe_info
- #include <rs_someip.h>
Contains information about SOME/IP subscribe details.
-
struct tag_rs_someip_msg
- #include <rs_someip.h>
Contains information about SOME/IP message information.
-
struct tag_rs_someip_events
- #include <rs_someip.h>
Contains information about SOME/IP events.
-
struct tag_rs_someip_event_data
- #include <rs_someip.h>
Contains information about event data of vehicle information.
-
struct tag_rs_someip_eventgrp
- #include <rs_someip.h>
Contains information about SOME/IP eventgroup details.
Public Members
-
uint16_t eventgrp_id
SOME/IP eventgroup ID.
-
uint16_t num_of_events
Number of events.
-
uint8_t registered
Register/deregister.
-
rs_someip_events_t *ptr_events
Pointer to the event information.
-
uint16_t eventgrp_id
-
struct tag_rs_someip_service_info
- #include <rs_someip.h>
Contains information about SOME/IP service details.
Public Members
-
uint16_t service_id
SOME/IP service ID.
-
uint16_t instance_id
SOME/IP instance ID.
-
uint16_t num_of_eventgrp
Number of eventgroup.
-
rs_someip_eventgrp_t *ptr_eventgrp
Pointer to the eventgroup information.
-
uint16_t service_id