SOME/IP NPDU Manager

Overview

RAPIDSEA supports SOME/IP NPDU module. The SOME/IP NPDU (Network Protocol Data Unit) Manager module is responsible for efficient handling of SOME/IP message transmission and reception over UDP and TCP. It enables bundling of multiple SOME/IP messages into a single network packet and manages buffering, timeout, and transmission strategies. The SOME/IP NPDU Manager is designed to optimize network communication while ensuring reliable message delivery in accordance with the SOME/IP specification.

The below diagram captures the block level diagram of the SOME/IP NPDU manager and how it interfaces with other modules.

SOME/IP NPDU Block Diagram

Application Interface

The NPDU Manager ensures efficient communication by providing mechanisms for:

  • Aggregating multiple SOME/IP messages into a single NPDU for transmission.

  • Parsing multiple SOME/IP messages from a received NPDU.

  • Managing transmit and receive buffers.

  • Handling NPDU timeout and flush mechanisms.

  • Preventing buffer overflow through controlled transmission.

  • Supporting both UDP and TCP communication.

  • Maintaining message order within an NPDU.

The RAPIDSEA SOME/IP NPDU Manager module provides well-defined API functions that enable users to implement and integrate efficient message aggregation, buffer management, transmission, and parsing mechanisms.

The below table captures the function that are to be called from the application logic.

API Functions

Function

Description

someip_npdu_manager_init

To initializes the SOME/IP NPDU manager by setting up the NPDU information structures.

someip_npdu_message_handler

To handles SOME/IP NPDU messages by processing the message and updating the NPDU information structures.

someip_set_free_npdu_info

To set a SOME/IP NPDU information structure as free.

someip_npdu_clear

To clear SOME/IP NPDU information structures for a specific transport handle.

Implementation Guide

  1. Initialize the NPDU Manager information using someip_npdu_manager_init.

  2. Provide transmit messages to the NPDU Manager someip_npdu_message_handler.

  3. Store and aggregate messages in the transmit buffer in NPDU information.

  4. Trigger transmission based on buffer condition or timeout.

  5. Receive NPDU packets from the network layer.

  6. Parse and extract individual SOME/IP messages.

  7. Forward messages to the appropriate upper-layer modules.

  8. Reset buffers after processing using someip_set_free_npdu_info.

Note

If the NPDU information structure is not configured (NULL) or the number of NPDU information entries is zero, the system shall bypass NPDU processing. In such cases, message transmission and reception shall proceed using standard SOME/IP communication without message aggregation or NPDU-based handling.

Transmission

The SOME/IP NPDU Manager handles outgoing SOME/IP messages from both server and client modules by buffering and optionally bundling them into a single packet.

  • Incoming transmit messages shall be stored in the NPDU transmit buffer.

  • Multiple messages shall be concatenated into a single NPDU based on:
    • Destination IP address

    • Destination port

    • Communication type (UDP/TCP, unicast/multicast)

  • The NPDU Manager shall trigger transmission when:
    • The buffer reaches its maximum capacity

    • A configured timeout expires

    • The transmit message length more than the NPDU limit.

  • If a new message cannot fit into the buffer:

  • The existing buffer content shall be transmitted

  • The buffer shall be reset

  • The new message shall be stored in the cleared buffer

Note

If the transmit message length equal to the NPDU maximum limit, the message shall bypass NPDU buffering and be sent directly using someip_****_pdu_write.

Reception

The NPDU Manager processes incoming network packets containing one or more SOME/IP messages.

Upon receiving an NPDU, the module shall:
  • Iterate through the packet using the SOME/IP length field

  • Extract each SOME/IP message sequentially

  • Validate message boundaries

Each extracted message shall be:
  • Forwarded to the appropriate upper-layer handler

  • Processed independently of other messages in the same NPDU

SOME/IP Server Transmission and Reception using NPDU

Server handles:
  • Responses

  • Notifications (event messages)

Server supports bundling of:
  • Multiple responses

  • Responses + notifications

The below block diagram captures the SOMEIP/IP Server Transmission using NPDU

SOME/IP Server transmission with NPDU

The below block diagram captures the SOMEIP/IP Server Reception using NPDU

SOME/IP Server reception with NPDU

The below sequence diagram captures the SOMEIP/IP Server Transmission and Reception with NPDU

SOME/IP server transmission and reception flow diagram with NPDU

SOME/IP Client Transmission and Reception using NPDU

Client handles:
  • Requests

Client supports bundling of:
  • Multiple requests

The below block diagram captures the SOMEIP/IP Client Transmission using NPDU

SOME/IP Client transmission with NPDU

The below block diagram captures the SOMEIP/IP Client Reception using NPDU

SOME/IP Client reception with NPDU

The below sequence diagram captures the SOMEIP/IP Client Transmission and Reception with NPDU

SOME/IP Client transmission and reception flow diagram with NPDU

Note

When multiple SOME/IP messages are received as concatenated data over TCP, the internal mechanisms shall parse, validate, and reframe them into individual messages.

Dependency

This stack depends on the below RAPIDSEA interfaces that can be obtained or custom implemented.

SOME/IP NPDU Header Details

Documentation from the relevant header as follows:

SOME/IP NPDU Communication APIs.

This file have declaration and details of SOME/IP NPDU communication manager APIs

Author

Embien RAPIDSEA Team

Copyright

Embien Technologies India Pvt. Ltd.

Defines

SOME_NPDU_TX_MSG_STATE_FREE

TX NPDU message status is free.

SOME_NPDU_TX_MSG_STATE_INPROGRESS

TX NPDU message status is inprogress.

SOME_NPDU_TX_MSG_STATE_DONE

TX NPDU message status is done.

SOME_NPDU_MAX_LIMIT

Functions

rs_ret_val_t someip_npdu_manager_init(rs_someip_npdu_info_t *ptr_npdu_info, uint32_t u32_num_info)

Called to initialize the SOME/IP NPDU manager.

This function initializes the SOME/IP NPDU manager by setting up the NPDU information structures.

Parameters:
  • ptr_npdu_info[in] - Pointer to the NPDU information array

  • u32_num_info[in] - Number of NPDU information structures in the array

Returns:

0 for success, error code otherwise

rs_ret_val_t someip_npdu_message_handler(rs_someip_npdu_info_t *ptr_npdu_info, uint32_t u32_num_info, rs_someip_msg_t *ptr_tx_msg, void *ptr_transport_info)

Called to handle SOME/IP NPDU messages.

This function handles SOME/IP NPDU messages by processing the message and updating the NPDU information structures.

Parameters:
  • ptr_npdu_info[in] - Pointer to the NPDU information array

  • u32_num_info[in] - Number of NPDU information structures in the array

  • ptr_tx_msg[in] - Pointer to the SOME/IP message

  • ptr_transport_info[in] - Pointer to the transport information

Returns:

Number of bytes sent for success or negative value for failure

rs_ret_val_t someip_set_free_npdu_info(rs_someip_npdu_info_t *ptr_npdu_info)

Called to set a SOME/IP NPDU information structure as free.

This function sets a SOME/IP NPDU information structure as free, making it available for reuse.

Parameters:

ptr_npdu_info[in] - Pointer to the NPDU information structure

Returns:

0 for success, error code otherwise

rs_ret_val_t someip_npdu_clear(rs_someip_npdu_info_t *ptr_npdu_info, uint32_t u32_num_info, rs_handle_t transport_handle)

Called to clear SOME/IP NPDU information structures for a specific transport handle.

This function clears SOME/IP NPDU information structures associated with a specific transport handle, making them available for reuse.

Parameters:
  • ptr_npdu_info[in] - Pointer to the NPDU information array

  • u32_num_info[in] - Number of NPDU information structures in the array

  • transport_handle[in] - Transport handle associated with the NPDU information structures

Returns:

0 for success, error code otherwise