DEENESPTFRRUARHIKOZHNL

SOME/IP Transport Protocol (SomeIpTp)

ModulSomeIpTp (SOME/IP Transport Protocol)
BSW-Modul-ID177
Standard-Header#include "SomeIpTp.h"
SWS-SpezifikationAUTOSAR_CP_SWS_SOMEIPTransportProtocol.pdf, AUTOSAR_SWS_SOMEIPTransportProtocol.pdf
Umfang84 Records · 14 Snippets
ClusterEthernet-Stack

SOME/IP Transport Protocol (SomeIpTp)

AUTOSAR Classic Communication Services-Modul SOME/IP Transport Protocol (SomeIpTp, Spezifikation: AUTOSAR_CP_SWS_SOMEIPTransportProtocol.pdf, AUTOSAR_SWS_SOMEIPTransportProtocol.pdf).

Funktionen — Übersicht

Typen — Übersicht

Anforderungen — Übersicht

Funktionen & Typen — Detailansicht

function SomeIpTp_Init [SWS_SomeIpTp_00046] 📄 PDF

void SomeIpTp_Init(const SomeIpTp_ConfigType* config);

Initializes the SOME/IP TP module.

function SomeIpTp_TriggerTransmit [SWS_SomeIpTp_00053] 📄 PDF

Std_ReturnType SomeIpTp_TriggerTransmit(PduIdType TxPduId, PduInfoType* PduInfoPtr);

Within this API, the upper layer module (called module) shall check whether the available data fits into the buffer size reported by PduInfoPtr->SduLength. If it fits, it shall copy its data into the buffer provided by PduInfoPtr->SduDataPtr and update the length of the actual copied data in PduInfoPtr->SduLength. If not, it returns E_NOT_OK without changing PduInfoPtr.

function SomeIpTp_MainFunctionTx [SWS_SomeIpTp_00058] 📄 PDF

void SomeIpTp_MainFunctionTx(void);

This function performs the processing of the AUTOSAR SOME/IP TP module's transmission activities.

function SomeIpTp_MainFunctionRx [SWS_SomeIpTp_00069] 📄 PDF

void SomeIpTp_MainFunctionRx(void);

This function performs the processing of the AUTOSAR SOME/IP TP module's reception activities.

type SomeIpTp_ConfigType [SWS_SomeIpTp_91002] 📄 PDF

This type shall contain at least all parameters that are post-build able according to chapter 10.

requirement SWS_SomeIpTp_00001 [SWS_SomeIpTp_00001] 📄 PDF

The SOME/IP TP module shall remember the PDU length separately for every PDU ID which is passed by the PduInfoPtr parameter of the Some IpTp_Transmit() call.

requirement SWS_SomeIpTp_00003 [SWS_SomeIpTp_00003] 📄 PDF

The size of every segmented SOME/IP message shall con- sist of the sum of 12 bytes of SOME/IP header, and the Payload bytes itself.

requirement SWS_SomeIpTp_00004 [SWS_SomeIpTp_00004] 📄 PDF

The SOME/IP TP module shall derive the maximum pos- sible size of the segmented SOME/IP PDUs using the parameter SomeIpTpTxNPdu Ref.

requirement SWS_SomeIpTp_00005 [SWS_SomeIpTp_00005] 📄 PDF

The SOME/IP TP module shall generate segmented SOME/IP PDUs not larger than the size derived from the parameter SomeIpTpTxNPdu Ref.

requirement SWS_SomeIpTp_00006 [SWS_SomeIpTp_00006] 📄 PDF

Every payload of a segmented SOME/IP message except the last one has to be a multiple of 16 bytes.

requirement SWS_SomeIpTp_00007 [SWS_SomeIpTp_00007] 📄 PDF

The SOME/IP TP module shall buffer the pointer to the Meta-data for every PDU ID separately which is passed by the PduInfoPtr parameter of the API SomeIpTp_Transmit(), and forward this information when PduR_SomeIpTp Transmit() is called for each segment.

requirement SWS_SomeIpTp_00008 [SWS_SomeIpTp_00008] 📄 PDF

The SOME/IP TP module shall store the Request ID, Pro- tocol Version, Interface Version, Message Type, and the Return Code of the SOME/IP header for every PDU ID separately which is returned by the first call of PduR_Some IpTpCopyTxData() triggered by the API call SomeIpTp_Transmit().

requirement SWS_SomeIpTp_00009 [SWS_SomeIpTp_00009] 📄 PDF

If the provided SDU fits into one single PDU, the provided SOME/IP header shall be used with no modification. If the provided SDU does not fit into one single SOME/IP PDU, the SOME/IP TP module shall set the TP-Flag of the Message Type to '1' for every SOME/IP segment which is going to be sent on the bus via the PduR. All the other bits contained in the Message Type field shall stay untouched.

requirement SWS_SomeIpTp_00010 [SWS_SomeIpTp_00010] 📄 PDF

The SOME/IP TP module shall create and attach the Off- set Field, the Reserved bits, and the More Segment Flag to every SOME/IP segment which is going to be sent on the bus.

requirement SWS_SomeIpTp_00012 [SWS_SomeIpTp_00012] 📄 PDF

The SOME/IP TP module shall increase the value of the Offset Field for every successfully transmitted SOME/IP segment by the amount of bytes which have been transmitted by the previous SOME/IP segment divided by 16.

requirement SWS_SomeIpTp_00013 [SWS_SomeIpTp_00013] 📄 PDF

The SOME/IP TP module shall set the Reserved bits stati- cally to '000' by the sender and shall be ignored by the receiver.

requirement SWS_SomeIpTp_00014 [SWS_SomeIpTp_00014] 📄 PDF

The SOME/IP TP module shall set the More Segment Flag to '1' except for the last SOME/IP segment.

requirement SWS_SomeIpTp_00015 [SWS_SomeIpTp_00015] 📄 PDF

The SOME/IP TP module shall set the More Segment Flag to '0' for the last SOME/IP segment.

requirement SWS_SomeIpTp_00016 [SWS_SomeIpTp_00016] 📄 PDF

If the API SomeIpTp_Transmit() is called, the SOME/IP TP module shall check for an ongoing segmentation for the provided PDU ID.

requirement SWS_SomeIpTp_00017 [SWS_SomeIpTp_00017] 📄 PDF

If the API SomeIpTp_Transmit()is called while no segmen- tation is ongoing for this PDU ID, the SOME/IP TP module shall perform the following steps in the following order: • Remember the provided PDU length (provided PduInfoPtr). • Derive the PDU ID which shall be used for every segmented SOME/IP PDU (see SomeIpTpTxNPduRef). • Calculate the size of the SOME/IP for the first segment (considering header and payload) • Call the API PduR_SomeIpTpTransmit() using the derived PDU ID and the calcu- lated PDU size and set the SduDataPtr to NULL_PTR.

requirement SWS_SomeIpTp_00018 [SWS_SomeIpTp_00018] 📄 PDF

When the API SomeIpTp_TriggerTransmit() is called, cre- ate the header for the SOME/IP segment and call the API PduR_SomeIpTpCopyTx Data()using the calculated payload for this segment, and set the parameter retry to NULL_PTR.

requirement SWS_SomeIpTp_00019 [SWS_SomeIpTp_00019] 📄 PDF

The size for consecutive SOME/IP TP segments all but not the last, shall be derived by the maximum possible size of the segmented SOME/ IP PDUs using the parameter SomeIpTpTxNPduRef.

requirement SWS_SomeIpTp_00020 [SWS_SomeIpTp_00020] 📄 PDF

The SOME/IP TP module shall debounce subsequent calls of the API PduR_ SomeIpTpTransmit() for the same PDU ID,using the parameter SomeIpTpNPduSep- arationTime. It defines the time span between the call of SomeIpTp_TxConfirmation(), and the sub- sequent call of the API PduR_SomeIpTpTransmit(). If SomeIpTpTxBurstSize is config- ured to a value > 1 the SOME/IP TP module shall debounce for the same PDU ID only every SomeIpTpTxBurstSize segments.

requirement SWS_SomeIpTp_00021 [SWS_SomeIpTp_00021] 📄 PDF

If the last SOME/IP segment of the original SOME/IP PDU has been transmitted successfully (i.e. the call of SomeIpTp_TxConfirmation()with pa- rameter success equals TRUE occurred for the last call of PduR_SomeIpTpCopyTx Data()), the SOME/IP TP module shall • Call the API PduR_SomeIpTpTxConfirmation().

requirement SWS_SomeIpTp_00022 [SWS_SomeIpTp_00022] 📄 PDF

If the API SomeIpTp_Transmit() is called with a PDU ID which is currently used for an ongoing segmentation, • E_NOT_OK shall be returned. • The ongoing disassembly process for this PDU ID shall be canceled. • The API PduR_SomeIpTpTxConfirmation()with result set to E_NOT_OK shall be called. • The API Det_ReportRuntimeError() shall be called with the runtime error code SOMEIPTP_E_DISASSEMBLY_INTERRUPT.

requirement SWS_SomeIpTp_00023 [SWS_SomeIpTp_00023] 📄 PDF

If the API SomeIpTp_TxConfirmation() is called with pa- rameter success set to FALSE, • The disassembly process for this PDU ID shall be canceled. • The API PduR_SomeIpTpTxConfirmation()with result set to E_NOT_OK shall be called. • The API Det_ReportRuntimeError() shall be called with the runtime error code SOMEIPTP_E_DISASSEMBLY_INTERRUPT.

requirement SWS_SomeIpTp_00024 [SWS_SomeIpTp_00024] 📄 PDF

In case the available buffer returned by PduR_SomeIpTpCopyTxData() via available- DataPtr does not satisfied the following conditions • larger or equal to 16 bytes, • larger (for all but the last segment) or equal (for the last segment) size of SOME/ IP TP segments, the SOME/IP TP module shall: • Cancel the disassembly process for this PDU ID . • Call the API PduR_SomeIpTpTxConfirmation() with result set to E_NOT_OK. • Call the API Det_ReportRuntimeError() with the runtime error code SOMEIPTP_ E_DISASSEMBLY_INTERRUPT.

requirement SWS_SomeIpTp_00025 [SWS_SomeIpTp_00025] 📄 PDF

If an API PduR_SomeIpTpCopyTxData()returns some- thing else than BUFREQ_OK, • The disassembly process for this PDU ID shall be canceled. • The API PduR_SomeIpTpTxConfirmation()with result set to E_NOT_OK shall be called. • The API Det_ReportRuntimeError() shall be called with the runtime error code SOMEIPTP_E_DISASSEMBLY_INTERRUPT.

requirement SWS_SomeIpTp_00026 [SWS_SomeIpTp_00026] 📄 PDF

If the API SomeIpTp_RxIndication() is called, the SOME/ IP TP module shall derive the following SOME/IP header information from the first 12 bytes of the received PDU: • Request ID [32 bit] • Protocol Version [8 bit] • Interface Version [8 bit] • Message Type [8 bit] • Return Code [8 bit] • Offset [28 bit] • Reserved bits [3 bit] • More Segment Flag [1 bit]

requirement SWS_SomeIpTp_00027 [SWS_SomeIpTp_00027] 📄 PDF

The SOME/IP TP module shall be able to store the value of the Offset Field for every PDU ID separately.

requirement SWS_SomeIpTp_00028 [SWS_SomeIpTp_00028] 📄 PDF

The SOME/IP TP module shall be able to store the number of Payload bytes for every PDU ID separately which has been passed by a call of Some IpTp_RxIndication().

requirement SWS_SomeIpTp_00029 [SWS_SomeIpTp_00029] 📄 PDF

The SOME/IP TP module shall store the status of the More Segment Flag for every PDU ID separately which is passed by a call of SomeIpTP_Rx Indication().

requirement SWS_SomeIpTp_00030 [SWS_SomeIpTp_00030] 📄 PDF

The SOME/IP TP module shall buffer the pointer to the Meta-data for every PDU ID separately which is passed by the PduInfoPtr parameter of the API SomeIpTp_RxIndication(), and forward this information when PduR_Some IpTpStartOfReception is called.

requirement SWS_SomeIpTp_00031 [SWS_SomeIpTp_00031] 📄 PDF

If SomeIpTp_RxIndication() is called with TP Flag set to '0', SOME/IP TP shall call PduR_SomeIpTpStartOfReception, PduR_SomeIpTpCopy RxData(), and PduR_SomeIpTpRxIndication(), directly after each other providing the received indication.

requirement SWS_SomeIpTp_00032 [SWS_SomeIpTp_00032] 📄 PDF

If a SOME/IP segment is successfully received with Offset Field set to 0, the SOME/IP TP module shall store the values of the received SOME/ IP header for each PDU ID separately.These values shall be used as reference values for the (expected) following consecutive receiving SOME/IP segments (i.e. with Offset Field set to > 0).

requirement SWS_SomeIpTp_00033 [SWS_SomeIpTp_00033] 📄 PDF

If a SOME/IP segment is successfully received with Offset Field set to 0, the SOME/IP TP module shall • Start the Rx timeout time defined by SomeIpTpRxTimeoutTime. • Call the API PduR_SomeIpTpStartOfReception() with the PDU ID derived from the parameter SomeIpTpRxSduRef and the TpSduLength set to '0'.

requirement SWS_SomeIpTp_00034 [SWS_SomeIpTp_00034] 📄 PDF

If a SOME/IP segment is successfully received with Offset Field set to 0 and after the SOME/IP TP module has called the API PduR_SomeIpTpStartOfReception(), the SOME/IP TP module shall check the size returned via bufferSizePtr. If the returned size is greater or equal to the sum of the received payload and the added SOME/IP header, the SOME/IP TP module shall call the API PduR_SomeIpT- pCopyRxData() to pass the SOME/IP header (excluding the SOME/IP TP header) of the assembled SOME/IP message to the SOME/IP TP's upper layer. This shall include the following content: • Request ID [32 bit] • Protocol Version [8 bit] • Interface Version [8 bit] • Message Type [8 bit] - see [SWS_SomeIpTp_00028] • Return Code [8 bit]

requirement SWS_SomeIpTp_00035 [SWS_SomeIpTp_00035] 📄 PDF

The SOME/IP TP module shall set the TP-Flag contained in the Message Type back to '0' before the assembled SOME/IP header is passed to the upper layer.

requirement SWS_SomeIpTp_00036 [SWS_SomeIpTp_00036] 📄 PDF

The SOME/IP TP module shall store the number of Pay- load bytes for every PDU ID separately which has been passed to the upper layer.

requirement SWS_SomeIpTp_00037 [SWS_SomeIpTp_00037] 📄 PDF

If a SOME/IP segment is successfully received with Offset Field> 0, the SOME/IP TP module shall compare the received SOME/IP header fields with the values of the stored SOME/IP header fields which has been received with the first segment (i.e. Offset was set to 0): • Request ID [32 bit] • Protocol Version [8 bit] • Interface Version [8 bit] • Message Type [8 bit] • Return Code [8 bit] If these values match restart the SomeIpTpRxTimeoutTime and continue with the as- sembly process.

requirement SWS_SomeIpTp_00038 [SWS_SomeIpTp_00038] 📄 PDF

The SOME/IP TP module shall store the number of Pay- load bytes for every PDU ID separately which has been passed to the upper layer.

requirement SWS_SomeIpTp_00039 [SWS_SomeIpTp_00039] 📄 PDF

The SOME/IP TP module shall compare the value of the Offset Field with the sum divided by 16 of copied Payload bytes since the first received SOME/IP segment (i.e. with Offset Field set to '0'). If this sum divided by 16 matches with the current Offset Value and if the bufferSize Ptr provided by the previous call of the API PduR_SomeIpTpCopyRxData()is greater or equal to the received payload, call the API PduR_SomeIpTpCopyRxData()with Sdu Length set to the received Payload bytes.

requirement SWS_SomeIpTp_00040 [SWS_SomeIpTp_00040] 📄 PDF

If a SOME/IP segment is successfully received with the More Segment Flag set to '0', the SOME/IP TP module shall • Cancel the Rx timeout time defined by SomeIpTpRxTimeoutTime. • Call the API PduR_SomeIpTpRxIndication() after it has copied the remaining re- ceived Payload bytes to the upper layer(as defined in SWS_SomeIpTp_00033).

requirement SWS_SomeIpTp_00041 [SWS_SomeIpTp_00041] 📄 PDF

If the Rx timeout time defined by SomeIpTpRxTimeout Time expires, • The current assembly process shall be interrupted as defined by SWS_SomeIp Tp_00054. • The API Det_ReportRuntimeError() shall be called with the runtime error code SOMEIPTP_E_ASSEMBLY_INTERRUPT.

requirement SWS_SomeIpTp_00042 [SWS_SomeIpTp_00042] 📄 PDF

If the API SomeIpTp_RxIndication() is called with the Off- set Value is > 0 but no session is currently running, • The received PDU shall be ignored • The API Det_ReportRuntimeError() shall be called with the runtime error code SOMEIPTP_E_INCONSISTENT_SEQUENCE.

requirement SWS_SomeIpTp_00043 [SWS_SomeIpTp_00043] 📄 PDF

Module Header File Imported Type ComStack_Types.h BufReq_ReturnType ComStack_Types.h PduIdType ComStack_Types.h PduInfoType ComStack_Types.h PduLengthType ComStack_Types.h RetryInfoType ComStack_Types ComStack_Types.h TpDataStateType Std_Types.h Std_ReturnType Std Std_Types.h Std_VersionInfoType

requirement SWS_SomeIpTp_00045 [SWS_SomeIpTp_00045] 📄 PDF

If the API SomeIpTp_RxIndication() is called and a session is currently active, the SOME/IP TP module shall check if the TP-Flag of the Message Type is set to '1'. If the TP-Flag is not set to '1', • The current assembly process shall be interrupted as defined by SWS_SomeIp Tp_00054. • The API Det_ReportRuntimeError() shall be called with the runtime error code SOMEIPTP_E_MESSAGE_TYPE.

requirement SWS_SomeIpTp_00048 [SWS_SomeIpTp_00048] 📄 PDF

If the API SomeIpTp_RxIndication() is called, the SOME/IP TP module shall check the value of the Offset Field. If the received Offset Value equals '0' while the received Payload bytes of the previous SOME/IP segments is greater than '0', the SOME/IP TP module shall perform the following steps in the following order: • The current assembly process shall be interrupted as defined by SWS_SomeIp Tp_00054. • The API Det_ReportRuntimeError() shall be called with the runtime error code SOMEIPTP_E_INCONSISTENT_SEQUENCE. • Start the assembly process according to chapter 7.3.1 SOME/IP segment re- ceived with Offset 0

requirement SWS_SomeIpTp_00049 [SWS_SomeIpTp_00049] 📄 PDF

If the bufferSizePtr provided by the API PduR_SomeIpTp StartOfReception()or PduR_SomeIpTpCopyRxData()is smaller than the sum of the re- ceived and the added SOME/IP header (in case of the first segment) or the received payload (in case of any subsequent segment), • The current assembly process shall be interrupted as defined by SWS_SomeIp Tp_00054. • The API Det_ReportRuntimeError()shall be called with the runtime error code SOMEIPTP_E_ASSEMBLY_INTERRUPT.

requirement SWS_SomeIpTp_00050 [SWS_SomeIpTp_00050] 📄 PDF

If the API PduR_SomeIpTpCopyRxData()returns some- thing else than BUFREQ_OK, • The assembly process for this PDU ID shall be interrupted as defined by SWS_ SomeIpTp_00054. • . • The API Det_ReportRuntimeError() shall be called with the runtime error code SOMEIPTP_E_ASSEMBLY_INTERRUPT.

requirement SWS_SomeIpTp_00051 [SWS_SomeIpTp_00051] 📄 PDF

If the API PduR_SomeIpTpStartOfReception() returns something else than BUFREQ_OK, • The assembly process for this PDU ID shall be stopped. • The API Det_ReportRuntimeError() shall be called with the runtime error code SOMEIPTP_E_ASSEMBLY_INTERRUPT.

requirement SWS_SomeIpTp_00052 [SWS_SomeIpTp_00052] 📄 PDF

Type of error Related error code Error value SOME/IP TP module not initialized SOMEIPTP_E_UNINIT 0x01 Null pointer has been passed as an argument SOMEIPTP_E_PARAM_POINTER 0x02 Unknown parameter has been passed SOMEIPTP_E_PARAM 0x03

requirement SWS_SomeIpTp_00054 [SWS_SomeIpTp_00054] 📄 PDF

If the SOME/IP TP module interrupts the assembly pro- cess because of a detected error, the SOME/IP TP module shall • Call the API PduR_SomeIpTpRxIndication()for this PDU ID with E_NOT_OK. • The Rx timeout time defined by SomeIpTpRxTimeoutTime shall be canceled (if still running) for this PDU ID.

requirement SWS_SomeIpTp_00055 [SWS_SomeIpTp_00055] 📄 PDF

In case the given PduInfoPtr->SduLength is smaller than the computed size of the SOME/IP-TP segment (considering header and payload), SomeIpTp_TriggerTransmit() shall not copy any data and return E_NOT_OK.

requirement SWS_SomeIpTp_00057 [SWS_SomeIpTp_00057] 📄 PDF

If development error detection is enabled: SomeIpTp_Rx Indication() shall check that the service SomeIpTp_Init() was previously called. If the check fails, SomeIpTp_RxIndication()shall raise the development error SOMEIPTP_E_ UNINIT.

requirement SWS_SomeIpTp_00059 [SWS_SomeIpTp_00059] 📄 PDF

A call to SomeIpTp_MainFunctionTx() shall simply return if the AUTOSAR SOME/IP TP module was not previously initialized with a call to Some IpTp_Init().

requirement SWS_SomeIpTp_00060 [SWS_SomeIpTp_00060] 📄 PDF

Det_ReportRuntimeError Det.h Service to report runtime errors. If a callout has been configured then this callout shall be called. PduR_SomeIpTpCopyRxData PduR_SomeIpTp.h This function is called to provide the received data of an I-PDU segment (N-PDU) to the upper layer. Each call to this function provides the next part of the I-PDU data. The size of the remaining buffer is written to the position indicated by bufferSizePtr. PduR_SomeIpTpCopyTxData PduR_SomeIpTp.h This function is called to acquire the transmit data of an I-PDU segment (N-PDU). Each call to this function provides the next part of the I-PDU data unless retry->TpDataState is TP_DATARETRY. In this case the function restarts to copy the data beginning at the offset from the current position indicated by retry->TxTpDataCnt. The size of the remaining data is written to the position indicated by availableDataPtr. API Function Header File Description PduR_SomeIpTpRxIndication PduR_SomeIpTp.h Called after an I-PDU has been received via the TP API, the result indicates whether the transmission was successful or not. PduR_SomeIpTpStartOfReception PduR_SomeIpTp.h This function is called at the start of receiving an N-SDU. The N-SDU might be fragmented into multiple N-PDUs (FF with one or more following CFs) or might consist of a single N-PDU (SF). The service shall provide the currently available maximum buffer size when invoked with TpSdu Length equal to 0. PduR_SomeIpTpTransmit PduR_SomeIpTp.h Requests transmission of a PDU. PduR_SomeIpTpTxConfirmation PduR_SomeIpTp.h This function is called after the I-PDU has been transmitted on its network, the result indicates whether the transmission was successful or not.

requirement SWS_SomeIpTp_00062 [SWS_SomeIpTp_00062] 📄 PDF

If the SOME/IP TP module detects an inconsistency of the received SOME/IP TP headers (i.e.: Request ID, Protocol Version, Interface Version, Message Type or Return Code are not equal for all received segments), • The current assembly process shall be interrupted as defined by SWS_SomeIp Tp_00054. • The API Det_ReportRuntimeError() shall be called with the runtime error code SOMEIPTP_E_INCONSISTENT_HEADER.

requirement SWS_SomeIpTp_00063 [SWS_SomeIpTp_00063] 📄 PDF

If the API SomeIpTp_RxIndication() is called, the SOME/ IP TP module shall check whether the received payload bytes are dividable by16 in case the More Segment Flag is set to '1'. If the received payload bytes are not dividable by 16 in this case, • The current assembly process shall be interrupted as defined by SWS_SomeIp Tp_00054. • The API Det_ReportRuntimeError() shall be called with the runtime error code SOMEIPTP_E_ASSEMBLY_INTERRUPT.

requirement SWS_SomeIpTp_00064 [SWS_SomeIpTp_00064] 📄 PDF

If the API SomeIpTp_RxIndication() is called, the SOME/ IP TP module shall check the value of the Offset Field. If the Offset Value in units of 16 bytes does not match to the sum of the received Payload bytes of the previous SOME/ IP segments, • The current assembly process shall be interrupted as defined by SWS_SomeIp Tp_00054. • The API Det_ReportRuntimeError() shall be called with the runtime error code SOMEIPTP_E_INCONSISTENT_SEQUENCE.

requirement SWS_SomeIpTp_00065 [SWS_SomeIpTp_00065] 📄 PDF

Type of error Related error code Error value The TP-Flag (of Message Type) was set to '0' SOMEIPTP_E_MESSAGE_TYPE 0x04 Inconsistent subsequent segment received SOMEIPTP_E_INCONSISTENT_SEQUENCE 0x05 Inconsistent header received SOMEIPTP_E_INCONSISTENT_HEADER 0x06 Disassembly Interrupt due to the upper layer SOMEIPTP_E_DISASSEMBLY_INTERRUPT 0x07 Assembly Interrupt due to the upper layer SOMEIPTP_E_ASSEMBLY_INTERRUPT 0x08

requirement SWS_SomeIpTp_00066 [SWS_SomeIpTp_00066] 📄 PDF

If the parameter SomeIpTp_VersionInfoPtr of the API SomeIpTp_GetVersionInfo() equals NULL_PTR and if development error detection is enabled (i.e. SomeIpTpDevErrorDetect is set to TRUE), the function SomeIpTp_Get VersionInfo, the API Det_ReportError()shall be called with the development error code SOMEIPTP_E_PARAM_POINTER.

requirement SWS_SomeIpTp_00067 [SWS_SomeIpTp_00067] 📄 PDF

If development error detection is enabled: SomeIpTp_Tx Confirmation() shall check that the service SomeIpTp_Init() was previously called. If the check fails, SomeIpTp_TxConfirmation()shall raise the development error SOMEIPTP_E_UNINIT.

requirement SWS_SomeIpTp_00070 [SWS_SomeIpTp_00070] 📄 PDF

A call to SomeIpTp_MainFunctionRx() shall simply return if the AUTOSAR SOME/IP TP module was not previously initialized with a call to Some IpTp_Init().

requirement SWS_SomeIpTp_00071 [SWS_SomeIpTp_00071] 📄 PDF

If SomeIpTp_RxIndication() is called with • TP Flag set to '1', • Offset Field set to '0', and • More Segment Flag set to '0', SOME/IP TP shall call PduR_SomeIpTpStartOfReception(), PduR_SomeIpTpCopyRx Data(), and SomeIpTp_RxIndication(), directly after each other providing the received indication.

requirement SWS_SomeIpTp_00072 [SWS_SomeIpTp_00072] 📄 PDF

If development error detection is enabled: SomeIpTp_Trig- gerTransmit() shall check that the service SomeIpTp_Init() was previously called. If the check fails, SomeIpTp_TriggerTransmit()shall raise the development error SOMEIPTP_E_ UNINIT.

requirement SWS_SomeIpTp_00073 [SWS_SomeIpTp_00073] 📄 PDF

If development error detection is enabled: SomeIpTp_ Transmit() shall check that the service SomeIpTp_Init() was previously called. If the check fails, SomeIpTp_Transmit()shall raise the development error SOMEIPTP_E_ UNINIT.

requirement SWS_SomeIpTp_00074 [SWS_SomeIpTp_00074] 📄 PDF

If parameter TxPduId of SomeIpTp_Transmit() has an in- valid value and if development error detection is enabled (i.e. SomeIpTpDevErrorDe- tect is set to TRUE), the API Det_ReportError() shall be called with the development error code SOMEIPTP_E_PARAM.

requirement SWS_SomeIpTp_00075 [SWS_SomeIpTp_00075] 📄 PDF

If parameter PduInfoPtr of SomeIpTp_Transmit() equals NULL_PTR and if development error detection is enabled (i.e. SomeIpTpDevError Detect is set to TRUE), the API Det_ReportError() shall be called with the development error code SOMEIPTP_E_PARAM_POINTER.

requirement SWS_SomeIpTp_00076 [SWS_SomeIpTp_00076] 📄 PDF

If SomeIpTp_Transmit()is called before the SOME/IP TP module has been initialized with a call of SomeIpTp_Init(), the AP shall return with E_ NOT_OK and stop the new session.

requirement SWS_SomeIpTp_00077 [SWS_SomeIpTp_00077] 📄 PDF

If the TP flag is not set and no assembly session is active, only the following parameters shall be extracted : • Request ID [32 bit] • Protocol Version [8 bit] • Interface Version [8 bit] • Message Type [8 bit] • Return Code [8 bit]

requirement SWS_SomeIpTp_00078 [SWS_SomeIpTp_00078] 📄 PDF

The SOME/IP TP module shall verify that the available buffer returned by PduR_SomeIpTpCopyTxData() via availableDataPtr is larger (for all but the last segment) or equal (for the last segment) size of SOME/IP TP segments.

requirement SWS_SomeIpTp_00079 [SWS_SomeIpTp_00079] 📄 PDF

After calling PduR_SomeIpTpCopyRxData() to pass the SOME/IP header (excluding the SOME/IP TP header) of the assembled SOME/IP message to the SOME/IP TP's upper layer (see [SWS_SomeIpTp_00034]), the SOME/IP TP module shall call the API PduR_SomeIpTpCopyRxData() again, to provide the payload of the assembled SOME/ IP message.

requirement SWS_SomeIpTp_00080 [SWS_SomeIpTp_00080] 📄 PDF

Header Inconsistency check before TP-Flag check Before checking the TP-Flag of the Message, as a condition to interrupt the as- sembly process, (see [SWS_SomeIpTp_00045]), the SOME/IP TP module shall check for inconsistencies of the received SOME/IP TP headers according to [SWS_SomeIpTp_00062].

requirement SWS_SomeIpTp_00082 [SWS_SomeIpTp_00082] 📄 PDF

[SWS_SomeIpTp_00082] Handling if PduR_SomeIpTpTransmit() return some- thing different than E_OK for a PDU-ID during the process of an ongoing seg- mentation Upstream requirements: RS_SOMEIP_00010 ⌈If PduR_SomeIpTpTransmit() returns something different than E_OK during the pro- cess of ongoing segmentation. • The ongoing disassembly process for this PDU ID shall be canceled. • The API PduR_SomeIpTpTxConfirmation() with result set to E_NOT_OK shall be called. • Set the corresponding SomeIpTpTxNSdu to state NSDU_AVAILABLE, after PduR_SomeIpTpTxConfirmation() returns • The API Det_ReportRuntimeError() shall be called with the runtime error code SOMEIPTP_E_DISASSEMBLY_INTERRUPT. ⌋

requirement SWS_SomeIpTp_00094 [SWS_SomeIpTp_00094] 📄 PDF

[SWS_SomeIpTp_00094] Each N-SDU shall have a N-SDU state Upstream requirements: RS_SOMEIP_00010 ⌈The SomeIpTp module shall maintain for each N-SDU of all configured SomeIpT- pRxNSdu and SomeIpTpTxNSdu at each SomeIpTpRxChannel and SomeIpTpTx- Channel two states: state NSDU_AVAILABLE and state NSDU_IN_USE⌋ Specification on SOME/IP Transport Protocol

requirement SWS_SomeIpTp_00096 [SWS_SomeIpTp_00096] 📄 PDF

[SWS_SomeIpTp_00096]) is currently running, • The received PDU shall be ignored • The API Det_ReportRuntimeError() shall be called with the runtime error code SOMEIPTP_E_INCONSISTENT_SEQUENCE. ⌋ Note: This check identifies that at least the first segment has not been received.

Request a governed re-review of this record. The record is not changed immediately.

Record
AUTOSAR/AP/record/CP_MOD_SomeIpTp
Status
unspecified
Version
AUTOSAR/AP/record/CP_MOD_SomeIpTp@rel:R20-11#1d4ec902
Content hash
1d4ec902
Source
https://www.autosar.org/fileadmin/standards/R20-11/CP/AUTOSAR_SWS_SOMEIPTransportProtocol.pdf#nameddest=SWS_SomeIpTp_00044

Topic map

Initialization and status

2

Detail view

Select an entry in the outline.

Initialization and status

Returns the version information of this module.

void SomeIpTp_GetVersionInfo(Std_VersionInfoType* VersionInfo);
SomeIpTp_Init function

Initializes the SOME/IP TP module.

void SomeIpTp_Init(const SomeIpTp_ConfigType* config);

Services

Requests transmission of a PDU.

Std_ReturnType SomeIpTp_Transmit(PduIdType TxPduId, const PduInfoType* PduInfoPtr);

Callbacks

Indication of a received PDU from a lower layer communication interface module.

void SomeIpTp_RxIndication(PduIdType RxPduId, const PduInfoType* PduInfoPtr);

Within this API, the upper layer module (called module) shall check whether the available data fits into the buffer size reported by PduInfoPtr->SduLength. If it fits, it shall copy its data into the buffer provided by PduInfoPtr->SduDataPtr and update the length of the actual copied data in PduInfoPtr->SduLength. If not, it returns E_NOT_OK without changing PduInfoPtr.

Std_ReturnType SomeIpTp_TriggerTransmit(PduIdType TxPduId, PduInfoType* PduInfoPtr);

The lower layer communication interface module confirms the transmission of a PDU, or the failure to transmit a PDU.

void SomeIpTp_TxConfirmation(PduIdType TxPduId, Std_ReturnType result);

Cyclic

This function performs the processing of the AUTOSAR SOME/IP TP module's reception activities.

void SomeIpTp_MainFunctionRx(void);

This function performs the processing of the AUTOSAR SOME/IP TP module's transmission activities.

void SomeIpTp_MainFunctionTx(void);

Types

This type shall contain at least all parameters that are post-build able according to chapter 10.

Requirements

SWS_SomeIpTp_00001 requirement

The SOME/IP TP module shall remember the PDU length separately for every PDU ID which is passed by the PduInfoPtr parameter of the Some IpTp_Transmit() call.

SWS_SomeIpTp_00002 requirement

The amount of generated SOME/IP segments shall be as little as possible.

SWS_SomeIpTp_00003 requirement

The size of every segmented SOME/IP message shall con- sist of the sum of 12 bytes of SOME/IP header, and the Payload bytes itself.

SWS_SomeIpTp_00004 requirement

The SOME/IP TP module shall derive the maximum pos- sible size of the segmented SOME/IP PDUs using the parameter SomeIpTpTxNPdu Ref.

SWS_SomeIpTp_00005 requirement

The SOME/IP TP module shall generate segmented SOME/IP PDUs not larger than the size derived from the parameter SomeIpTpTxNPdu Ref.

SWS_SomeIpTp_00006 requirement

Every payload of a segmented SOME/IP message except the last one has to be a multiple of 16 bytes.

SWS_SomeIpTp_00007 requirement

The SOME/IP TP module shall buffer the pointer to the Meta-data for every PDU ID separately which is passed by the PduInfoPtr parameter of the API SomeIpTp_Transmit(), and forward this information when PduR_SomeIpTp Transmit() is called for each segment.

SWS_SomeIpTp_00008 requirement

The SOME/IP TP module shall store the Request ID, Pro- tocol Version, Interface Version, Message Type, and the Return Code of the SOME/IP header for every PDU ID separately which is returned by the first call of PduR_Some IpTpCopyTxData() triggered by the API call SomeIpTp_Transmit().

SWS_SomeIpTp_00009 requirement

If the provided SDU fits into one single PDU, the provided SOME/IP header shall be used with no modification. If the provided SDU does not fit into one single SOME/IP PDU, the SOME/IP TP module shall set the TP-Flag of the Message Type to '1' for every SOME/IP segment which is going to be sent on the bus via the PduR. All the other bits contained in the Message Type field shall stay untouched.

SWS_SomeIpTp_00010 requirement

The SOME/IP TP module shall create and attach the Off- set Field, the Reserved bits, and the More Segment Flag to every SOME/IP segment which is going to be sent on the bus.

SWS_SomeIpTp_00011 requirement

The Offset Field of the first SOME/IP segment shall be set to '0'.

SWS_SomeIpTp_00012 requirement

The SOME/IP TP module shall increase the value of the Offset Field for every successfully transmitted SOME/IP segment by the amount of bytes which have been transmitted by the previous SOME/IP segment divided by 16.

SWS_SomeIpTp_00013 requirement

The SOME/IP TP module shall set the Reserved bits stati- cally to '000' by the sender and shall be ignored by the receiver.

SWS_SomeIpTp_00014 requirement

The SOME/IP TP module shall set the More Segment Flag to '1' except for the last SOME/IP segment.

SWS_SomeIpTp_00015 requirement

The SOME/IP TP module shall set the More Segment Flag to '0' for the last SOME/IP segment.

SWS_SomeIpTp_00016 requirement

If the API SomeIpTp_Transmit() is called, the SOME/IP TP module shall check for an ongoing segmentation for the provided PDU ID.

SWS_SomeIpTp_00017 requirement

If the API SomeIpTp_Transmit()is called while no segmen- tation is ongoing for this PDU ID, the SOME/IP TP module shall perform the following steps in the following order: • Remember the provided PDU length (provided PduInfoPtr). • Derive the PDU ID which shall be used for every segmented SOME/IP PDU (see SomeIpTpTxNPduRef). • Calculate the size of the SOME/IP for the first segment (considering header and payload) • Call the API PduR_SomeIpTpTransmit() using the derived PDU ID and the calcu- lated PDU size and set the SduDataPtr to NULL_PTR.

SWS_SomeIpTp_00018 requirement

When the API SomeIpTp_TriggerTransmit() is called, cre- ate the header for the SOME/IP segment and call the API PduR_SomeIpTpCopyTx Data()using the calculated payload for this segment, and set the parameter retry to NULL_PTR.

SWS_SomeIpTp_00019 requirement

The size for consecutive SOME/IP TP segments all but not the last, shall be derived by the maximum possible size of the segmented SOME/ IP PDUs using the parameter SomeIpTpTxNPduRef.

SWS_SomeIpTp_00020 requirement

The SOME/IP TP module shall debounce subsequent calls of the API PduR_ SomeIpTpTransmit() for the same PDU ID,using the parameter SomeIpTpNPduSep- arationTime. It defines the time span between the call of SomeIpTp_TxConfirmation(), and the sub- sequent call of the API PduR_SomeIpTpTransmit(). If SomeIpTpTxBurstSize is config- ured to a value > 1 the SOME/IP TP module shall debounce for the same PDU ID only every SomeIpTpTxBurstSize segments.

SWS_SomeIpTp_00021 requirement

If the last SOME/IP segment of the original SOME/IP PDU has been transmitted successfully (i.e. the call of SomeIpTp_TxConfirmation()with pa- rameter success equals TRUE occurred for the last call of PduR_SomeIpTpCopyTx Data()), the SOME/IP TP module shall • Call the API PduR_SomeIpTpTxConfirmation().

SWS_SomeIpTp_00022 requirement

If the API SomeIpTp_Transmit() is called with a PDU ID which is currently used for an ongoing segmentation, • E_NOT_OK shall be returned. • The ongoing disassembly process for this PDU ID shall be canceled. • The API PduR_SomeIpTpTxConfirmation()with result set to E_NOT_OK shall be called. • The API Det_ReportRuntimeError() shall be called with the runtime error code SOMEIPTP_E_DISASSEMBLY_INTERRUPT.

SWS_SomeIpTp_00023 requirement

If the API SomeIpTp_TxConfirmation() is called with pa- rameter success set to FALSE, • The disassembly process for this PDU ID shall be canceled. • The API PduR_SomeIpTpTxConfirmation()with result set to E_NOT_OK shall be called. • The API Det_ReportRuntimeError() shall be called with the runtime error code SOMEIPTP_E_DISASSEMBLY_INTERRUPT.

SWS_SomeIpTp_00024 requirement

In case the available buffer returned by PduR_SomeIpTpCopyTxData() via available- DataPtr does not satisfied the following conditions • larger or equal to 16 bytes, • larger (for all but the last segment) or equal (for the last segment) size of SOME/ IP TP segments, the SOME/IP TP module shall: • Cancel the disassembly process for this PDU ID . • Call the API PduR_SomeIpTpTxConfirmation() with result set to E_NOT_OK. • Call the API Det_ReportRuntimeError() with the runtime error code SOMEIPTP_ E_DISASSEMBLY_INTERRUPT.

SWS_SomeIpTp_00025 requirement

If an API PduR_SomeIpTpCopyTxData()returns some- thing else than BUFREQ_OK, • The disassembly process for this PDU ID shall be canceled. • The API PduR_SomeIpTpTxConfirmation()with result set to E_NOT_OK shall be called. • The API Det_ReportRuntimeError() shall be called with the runtime error code SOMEIPTP_E_DISASSEMBLY_INTERRUPT.

SWS_SomeIpTp_00026 requirement

If the API SomeIpTp_RxIndication() is called, the SOME/ IP TP module shall derive the following SOME/IP header information from the first 12 bytes of the received PDU: • Request ID [32 bit] • Protocol Version [8 bit] • Interface Version [8 bit] • Message Type [8 bit] • Return Code [8 bit] • Offset [28 bit] • Reserved bits [3 bit] • More Segment Flag [1 bit]

SWS_SomeIpTp_00027 requirement

The SOME/IP TP module shall be able to store the value of the Offset Field for every PDU ID separately.

SWS_SomeIpTp_00028 requirement

The SOME/IP TP module shall be able to store the number of Payload bytes for every PDU ID separately which has been passed by a call of Some IpTp_RxIndication().

SWS_SomeIpTp_00029 requirement

The SOME/IP TP module shall store the status of the More Segment Flag for every PDU ID separately which is passed by a call of SomeIpTP_Rx Indication().

SWS_SomeIpTp_00030 requirement

The SOME/IP TP module shall buffer the pointer to the Meta-data for every PDU ID separately which is passed by the PduInfoPtr parameter of the API SomeIpTp_RxIndication(), and forward this information when PduR_Some IpTpStartOfReception is called.

SWS_SomeIpTp_00031 requirement

If SomeIpTp_RxIndication() is called with TP Flag set to '0', SOME/IP TP shall call PduR_SomeIpTpStartOfReception, PduR_SomeIpTpCopy RxData(), and PduR_SomeIpTpRxIndication(), directly after each other providing the received indication.

SWS_SomeIpTp_00032 requirement

If a SOME/IP segment is successfully received with Offset Field set to 0, the SOME/IP TP module shall store the values of the received SOME/ IP header for each PDU ID separately.These values shall be used as reference values for the (expected) following consecutive receiving SOME/IP segments (i.e. with Offset Field set to > 0).

SWS_SomeIpTp_00033 requirement

If a SOME/IP segment is successfully received with Offset Field set to 0, the SOME/IP TP module shall • Start the Rx timeout time defined by SomeIpTpRxTimeoutTime. • Call the API PduR_SomeIpTpStartOfReception() with the PDU ID derived from the parameter SomeIpTpRxSduRef and the TpSduLength set to '0'.

SWS_SomeIpTp_00034 requirement

If a SOME/IP segment is successfully received with Offset Field set to 0 and after the SOME/IP TP module has called the API PduR_SomeIpTpStartOfReception(), the SOME/IP TP module shall check the size returned via bufferSizePtr. If the returned size is greater or equal to the sum of the received payload and the added SOME/IP header, the SOME/IP TP module shall call the API PduR_SomeIpT- pCopyRxData() to pass the SOME/IP header (excluding the SOME/IP TP header) of the assembled SOME/IP message to the SOME/IP TP's upper layer. This shall include the following content: • Request ID [32 bit] • Protocol Version [8 bit] • Interface Version [8 bit] • Message Type [8 bit] - see [SWS_SomeIpTp_00028] • Return Code [8 bit]

SWS_SomeIpTp_00035 requirement

The SOME/IP TP module shall set the TP-Flag contained in the Message Type back to '0' before the assembled SOME/IP header is passed to the upper layer.

SWS_SomeIpTp_00036 requirement

The SOME/IP TP module shall store the number of Pay- load bytes for every PDU ID separately which has been passed to the upper layer.

SWS_SomeIpTp_00037 requirement

If a SOME/IP segment is successfully received with Offset Field> 0, the SOME/IP TP module shall compare the received SOME/IP header fields with the values of the stored SOME/IP header fields which has been received with the first segment (i.e. Offset was set to 0): • Request ID [32 bit] • Protocol Version [8 bit] • Interface Version [8 bit] • Message Type [8 bit] • Return Code [8 bit] If these values match restart the SomeIpTpRxTimeoutTime and continue with the as- sembly process.

SWS_SomeIpTp_00038 requirement

The SOME/IP TP module shall store the number of Pay- load bytes for every PDU ID separately which has been passed to the upper layer.

SWS_SomeIpTp_00039 requirement

The SOME/IP TP module shall compare the value of the Offset Field with the sum divided by 16 of copied Payload bytes since the first received SOME/IP segment (i.e. with Offset Field set to '0'). If this sum divided by 16 matches with the current Offset Value and if the bufferSize Ptr provided by the previous call of the API PduR_SomeIpTpCopyRxData()is greater or equal to the received payload, call the API PduR_SomeIpTpCopyRxData()with Sdu Length set to the received Payload bytes.

SWS_SomeIpTp_00040 requirement

If a SOME/IP segment is successfully received with the More Segment Flag set to '0', the SOME/IP TP module shall • Cancel the Rx timeout time defined by SomeIpTpRxTimeoutTime. • Call the API PduR_SomeIpTpRxIndication() after it has copied the remaining re- ceived Payload bytes to the upper layer(as defined in SWS_SomeIpTp_00033).

SWS_SomeIpTp_00041 requirement

If the Rx timeout time defined by SomeIpTpRxTimeout Time expires, • The current assembly process shall be interrupted as defined by SWS_SomeIp Tp_00054. • The API Det_ReportRuntimeError() shall be called with the runtime error code SOMEIPTP_E_ASSEMBLY_INTERRUPT.

SWS_SomeIpTp_00042 requirement

If the API SomeIpTp_RxIndication() is called with the Off- set Value is > 0 but no session is currently running, • The received PDU shall be ignored • The API Det_ReportRuntimeError() shall be called with the runtime error code SOMEIPTP_E_INCONSISTENT_SEQUENCE.

SWS_SomeIpTp_00043 requirement

Module Header File Imported Type ComStack_Types.h BufReq_ReturnType ComStack_Types.h PduIdType ComStack_Types.h PduInfoType ComStack_Types.h PduLengthType ComStack_Types.h RetryInfoType ComStack_Types ComStack_Types.h TpDataStateType Std_Types.h Std_ReturnType Std Std_Types.h Std_VersionInfoType

SWS_SomeIpTp_00045 requirement

If the API SomeIpTp_RxIndication() is called and a session is currently active, the SOME/IP TP module shall check if the TP-Flag of the Message Type is set to '1'. If the TP-Flag is not set to '1', • The current assembly process shall be interrupted as defined by SWS_SomeIp Tp_00054. • The API Det_ReportRuntimeError() shall be called with the runtime error code SOMEIPTP_E_MESSAGE_TYPE.

SWS_SomeIpTp_00048 requirement

If the API SomeIpTp_RxIndication() is called, the SOME/IP TP module shall check the value of the Offset Field. If the received Offset Value equals '0' while the received Payload bytes of the previous SOME/IP segments is greater than '0', the SOME/IP TP module shall perform the following steps in the following order: • The current assembly process shall be interrupted as defined by SWS_SomeIp Tp_00054. • The API Det_ReportRuntimeError() shall be called with the runtime error code SOMEIPTP_E_INCONSISTENT_SEQUENCE. • Start the assembly process according to chapter 7.3.1 SOME/IP segment re- ceived with Offset 0

SWS_SomeIpTp_00049 requirement

If the bufferSizePtr provided by the API PduR_SomeIpTp StartOfReception()or PduR_SomeIpTpCopyRxData()is smaller than the sum of the re- ceived and the added SOME/IP header (in case of the first segment) or the received payload (in case of any subsequent segment), • The current assembly process shall be interrupted as defined by SWS_SomeIp Tp_00054. • The API Det_ReportRuntimeError()shall be called with the runtime error code SOMEIPTP_E_ASSEMBLY_INTERRUPT.

SWS_SomeIpTp_00050 requirement

If the API PduR_SomeIpTpCopyRxData()returns some- thing else than BUFREQ_OK, • The assembly process for this PDU ID shall be interrupted as defined by SWS_ SomeIpTp_00054. • . • The API Det_ReportRuntimeError() shall be called with the runtime error code SOMEIPTP_E_ASSEMBLY_INTERRUPT.

SWS_SomeIpTp_00051 requirement

If the API PduR_SomeIpTpStartOfReception() returns something else than BUFREQ_OK, • The assembly process for this PDU ID shall be stopped. • The API Det_ReportRuntimeError() shall be called with the runtime error code SOMEIPTP_E_ASSEMBLY_INTERRUPT.

SWS_SomeIpTp_00052 requirement

Type of error Related error code Error value SOME/IP TP module not initialized SOMEIPTP_E_UNINIT 0x01 Null pointer has been passed as an argument SOMEIPTP_E_PARAM_POINTER 0x02 Unknown parameter has been passed SOMEIPTP_E_PARAM 0x03

SWS_SomeIpTp_00054 requirement

If the SOME/IP TP module interrupts the assembly pro- cess because of a detected error, the SOME/IP TP module shall • Call the API PduR_SomeIpTpRxIndication()for this PDU ID with E_NOT_OK. • The Rx timeout time defined by SomeIpTpRxTimeoutTime shall be canceled (if still running) for this PDU ID.

SWS_SomeIpTp_00055 requirement

In case the given PduInfoPtr->SduLength is smaller than the computed size of the SOME/IP-TP segment (considering header and payload), SomeIpTp_TriggerTransmit() shall not copy any data and return E_NOT_OK.

SWS_SomeIpTp_00057 requirement

If development error detection is enabled: SomeIpTp_Rx Indication() shall check that the service SomeIpTp_Init() was previously called. If the check fails, SomeIpTp_RxIndication()shall raise the development error SOMEIPTP_E_ UNINIT.

SWS_SomeIpTp_00059 requirement

A call to SomeIpTp_MainFunctionTx() shall simply return if the AUTOSAR SOME/IP TP module was not previously initialized with a call to Some IpTp_Init().

SWS_SomeIpTp_00060 requirement

Det_ReportRuntimeError Det.h Service to report runtime errors. If a callout has been configured then this callout shall be called. PduR_SomeIpTpCopyRxData PduR_SomeIpTp.h This function is called to provide the received data of an I-PDU segment (N-PDU) to the upper layer. Each call to this function provides the next part of the I-PDU data. The size of the remaining buffer is written to the position indicated by bufferSizePtr. PduR_SomeIpTpCopyTxData PduR_SomeIpTp.h This function is called to acquire the transmit data of an I-PDU segment (N-PDU). Each call to this function provides the next part of the I-PDU data unless retry->TpDataState is TP_DATARETRY. In this case the function restarts to copy the data beginning at the offset from the current position indicated by retry->TxTpDataCnt. The size of the remaining data is written to the position indicated by availableDataPtr. API Function Header File Description PduR_SomeIpTpRxIndication PduR_SomeIpTp.h Called after an I-PDU has been received via the TP API, the result indicates whether the transmission was successful or not. PduR_SomeIpTpStartOfReception PduR_SomeIpTp.h This function is called at the start of receiving an N-SDU. The N-SDU might be fragmented into multiple N-PDUs (FF with one or more following CFs) or might consist of a single N-PDU (SF). The service shall provide the currently available maximum buffer size when invoked with TpSdu Length equal to 0. PduR_SomeIpTpTransmit PduR_SomeIpTp.h Requests transmission of a PDU. PduR_SomeIpTpTxConfirmation PduR_SomeIpTp.h This function is called after the I-PDU has been transmitted on its network, the result indicates whether the transmission was successful or not.

SWS_SomeIpTp_00061 requirement

Det_ReportError Det.h Service to report development errors.

SWS_SomeIpTp_00062 requirement

If the SOME/IP TP module detects an inconsistency of the received SOME/IP TP headers (i.e.: Request ID, Protocol Version, Interface Version, Message Type or Return Code are not equal for all received segments), • The current assembly process shall be interrupted as defined by SWS_SomeIp Tp_00054. • The API Det_ReportRuntimeError() shall be called with the runtime error code SOMEIPTP_E_INCONSISTENT_HEADER.

SWS_SomeIpTp_00063 requirement

If the API SomeIpTp_RxIndication() is called, the SOME/ IP TP module shall check whether the received payload bytes are dividable by16 in case the More Segment Flag is set to '1'. If the received payload bytes are not dividable by 16 in this case, • The current assembly process shall be interrupted as defined by SWS_SomeIp Tp_00054. • The API Det_ReportRuntimeError() shall be called with the runtime error code SOMEIPTP_E_ASSEMBLY_INTERRUPT.

SWS_SomeIpTp_00064 requirement

If the API SomeIpTp_RxIndication() is called, the SOME/ IP TP module shall check the value of the Offset Field. If the Offset Value in units of 16 bytes does not match to the sum of the received Payload bytes of the previous SOME/ IP segments, • The current assembly process shall be interrupted as defined by SWS_SomeIp Tp_00054. • The API Det_ReportRuntimeError() shall be called with the runtime error code SOMEIPTP_E_INCONSISTENT_SEQUENCE.

SWS_SomeIpTp_00065 requirement

Type of error Related error code Error value The TP-Flag (of Message Type) was set to '0' SOMEIPTP_E_MESSAGE_TYPE 0x04 Inconsistent subsequent segment received SOMEIPTP_E_INCONSISTENT_SEQUENCE 0x05 Inconsistent header received SOMEIPTP_E_INCONSISTENT_HEADER 0x06 Disassembly Interrupt due to the upper layer SOMEIPTP_E_DISASSEMBLY_INTERRUPT 0x07 Assembly Interrupt due to the upper layer SOMEIPTP_E_ASSEMBLY_INTERRUPT 0x08

SWS_SomeIpTp_00066 requirement

If the parameter SomeIpTp_VersionInfoPtr of the API SomeIpTp_GetVersionInfo() equals NULL_PTR and if development error detection is enabled (i.e. SomeIpTpDevErrorDetect is set to TRUE), the function SomeIpTp_Get VersionInfo, the API Det_ReportError()shall be called with the development error code SOMEIPTP_E_PARAM_POINTER.

SWS_SomeIpTp_00067 requirement

If development error detection is enabled: SomeIpTp_Tx Confirmation() shall check that the service SomeIpTp_Init() was previously called. If the check fails, SomeIpTp_TxConfirmation()shall raise the development error SOMEIPTP_E_UNINIT.

SWS_SomeIpTp_00070 requirement

A call to SomeIpTp_MainFunctionRx() shall simply return if the AUTOSAR SOME/IP TP module was not previously initialized with a call to Some IpTp_Init().

SWS_SomeIpTp_00071 requirement

If SomeIpTp_RxIndication() is called with • TP Flag set to '1', • Offset Field set to '0', and • More Segment Flag set to '0', SOME/IP TP shall call PduR_SomeIpTpStartOfReception(), PduR_SomeIpTpCopyRx Data(), and SomeIpTp_RxIndication(), directly after each other providing the received indication.

SWS_SomeIpTp_00072 requirement

If development error detection is enabled: SomeIpTp_Trig- gerTransmit() shall check that the service SomeIpTp_Init() was previously called. If the check fails, SomeIpTp_TriggerTransmit()shall raise the development error SOMEIPTP_E_ UNINIT.

SWS_SomeIpTp_00073 requirement

If development error detection is enabled: SomeIpTp_ Transmit() shall check that the service SomeIpTp_Init() was previously called. If the check fails, SomeIpTp_Transmit()shall raise the development error SOMEIPTP_E_ UNINIT.

SWS_SomeIpTp_00074 requirement

If parameter TxPduId of SomeIpTp_Transmit() has an in- valid value and if development error detection is enabled (i.e. SomeIpTpDevErrorDe- tect is set to TRUE), the API Det_ReportError() shall be called with the development error code SOMEIPTP_E_PARAM.

SWS_SomeIpTp_00075 requirement

If parameter PduInfoPtr of SomeIpTp_Transmit() equals NULL_PTR and if development error detection is enabled (i.e. SomeIpTpDevError Detect is set to TRUE), the API Det_ReportError() shall be called with the development error code SOMEIPTP_E_PARAM_POINTER.

SWS_SomeIpTp_00076 requirement

If SomeIpTp_Transmit()is called before the SOME/IP TP module has been initialized with a call of SomeIpTp_Init(), the AP shall return with E_ NOT_OK and stop the new session.

SWS_SomeIpTp_00077 requirement

If the TP flag is not set and no assembly session is active, only the following parameters shall be extracted : • Request ID [32 bit] • Protocol Version [8 bit] • Interface Version [8 bit] • Message Type [8 bit] • Return Code [8 bit]

SWS_SomeIpTp_00078 requirement

The SOME/IP TP module shall verify that the available buffer returned by PduR_SomeIpTpCopyTxData() via availableDataPtr is larger (for all but the last segment) or equal (for the last segment) size of SOME/IP TP segments.

SWS_SomeIpTp_00079 requirement

After calling PduR_SomeIpTpCopyRxData() to pass the SOME/IP header (excluding the SOME/IP TP header) of the assembled SOME/IP message to the SOME/IP TP's upper layer (see [SWS_SomeIpTp_00034]), the SOME/IP TP module shall call the API PduR_SomeIpTpCopyRxData() again, to provide the payload of the assembled SOME/ IP message.

SWS_SomeIpTp_00080 requirement

Header Inconsistency check before TP-Flag check Before checking the TP-Flag of the Message, as a condition to interrupt the as- sembly process, (see [SWS_SomeIpTp_00045]), the SOME/IP TP module shall check for inconsistencies of the received SOME/IP TP headers according to [SWS_SomeIpTp_00062].

SWS_SomeIpTp_00082 requirement

[SWS_SomeIpTp_00082] Handling if PduR_SomeIpTpTransmit() return some- thing different than E_OK for a PDU-ID during the process of an ongoing seg- mentation Upstream requirements: RS_SOMEIP_00010 ⌈If PduR_SomeIpTpTransmit() returns something different than E_OK during the pro- cess of ongoing segmentation. • The ongoing disassembly process for this PDU ID shall be canceled. • The API PduR_SomeIpTpTxConfirmation() with result set to E_NOT_OK shall be called. • Set the corresponding SomeIpTpTxNSdu to state NSDU_AVAILABLE, after PduR_SomeIpTpTxConfirmation() returns • The API Det_ReportRuntimeError() shall be called with the runtime error code SOMEIPTP_E_DISASSEMBLY_INTERRUPT. ⌋

SWS_SomeIpTp_00094 requirement

[SWS_SomeIpTp_00094] Each N-SDU shall have a N-SDU state Upstream requirements: RS_SOMEIP_00010 ⌈The SomeIpTp module shall maintain for each N-SDU of all configured SomeIpT- pRxNSdu and SomeIpTpTxNSdu at each SomeIpTpRxChannel and SomeIpTpTx- Channel two states: state NSDU_AVAILABLE and state NSDU_IN_USE⌋ Specification on SOME/IP Transport Protocol

SWS_SomeIpTp_00096 requirement

[SWS_SomeIpTp_00096]) is currently running, • The received PDU shall be ignored • The API Det_ReportRuntimeError() shall be called with the runtime error code SOMEIPTP_E_INCONSISTENT_SEQUENCE. ⌋ Note: This check identifies that at least the first segment has not been received.