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.

SOME/IP Model

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.

struct tag_rs_someip_data
#include <rs_someip.h>

Structure for configuring the SOME/IP interface.

Public Members

uint32_t len

Data LEN

uint32_t target_addr

Target address

uint8_t data[RS_BUF_SIZE]

SOME/IP Data

struct tag_rs_someip_subscribe_info
#include <rs_someip.h>

Contains information about SOME/IP subscribe details.

Public Members

uint16_t service_id

SOME/IP service ID.

uint16_t instance_id

SOME/IP instance ID.

uint16_t eventgrp_id

SOME/IP eventgroup ID.

uint16_t server_id

SOME/IP server ID.

uint16_t client_id

SOME/IP client ID Server use only.

rs_sock_addr_t socket_info

SOME/IP IP address storing.

struct tag_rs_someip_msg
#include <rs_someip.h>

Contains information about SOME/IP message information.

Public Members

uint8_t status

Message Status.

uint8_t source_addr[4]

Source address for server address //TODO macro.

uint32_t target_addr

Target address.

uint8_t *ptr_data

Pointer to data buffer.

uint32_t data_len

Number of bytes of data.

uint16_t max_data_len

Max number of bytes allowed.

struct tag_rs_someip_events
#include <rs_someip.h>

Contains information about SOME/IP events.

Public Members

uint16_t event_id

SOME/IP event ID.

uint8_t update_state

Update state of event ID.

uint8_t data_type

Data type of event.

uint32_t data_len

Length of data type.

void *ptr_data

Pointer to the data.

struct tag_rs_someip_event_data
#include <rs_someip.h>

Contains information about event data of vehicle information.

Public Members

uint8_t name[32]

Vehicle name.

int16_t power_factor

Power factor.

uint16_t rpm

RPM.

float vehic_speed

Vehicle speed.

float odo_value

ODO value.

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.

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.