Routes I-PDUs unchanged between upper and lower communication modules using a static routing table.
AI-GENERATEDunreviewedModel: claude-opus-5-5 · Effort: high · Temperature: not controllable · Prompt: 3a20c4ee9a26ProvenanceOpen questions (1)
Causal anchor: R20-11Valid from R20-11Synthesized for this specification release.
translated from the German guidegemini-3.8-flash-low · 2026-10-13 · German original
Routes I-PDUs unchanged between upper and lower communication modules using a static routing table.
The PDU Router routes I-PDUs between upper modules such as Com and DCM, communication interfaces, and transport protocols. In doing so, it only translates the I-PDU IDs along configured routing paths and does not modify the content [SWS_PduR_00160]. Its tasks include transmission, reception, TriggerTransmit, segmented TP transmissions, and gateways with optional FIFO buffering. Routing takes place exclusively in the PDUR_ONLINE state after successful PduR_Init [SWS_PduR_00328]. At runtime, routing path groups can be switched via PduR_EnableRouting and PduR_DisableRouting.
The PDU Router routes I-PDUs between upper modules such as Com and DCM, communication interfaces such as CanIf, FrIf, and LinIf, as well as transport protocols. In doing so, it does not modify the I-PDUs [SWS_PduR_00160] and routes only along configured routing paths [SWS_PduR_00162]. Its core capability is the translation of I-PDU IDs on the transmit path as well as on the confirmation and indication paths [SWS_PduR_00766]. The interfaces are generic; the placeholders <Up>, <Lo>, and <LoTp> result from the configuration PduRBswModules[SWS_PduR_00504].
Context diagram: PduR is located between upper modules and IF or TP modules; BswM switches path groups, errors are reported to the DET. Sources: [SWS_PduR_00504], SWS PDU Router p. 16
PduR only knows the states PDUR_UNINIT and PDUR_ONLINE[SWS_PduR_00324]. Routing takes place exclusively in PDUR_ONLINE[SWS_PduR_00328]. It transitions there through PduR_Init(ConfigPtr)[SWS_PduR_00334]. Prior to that, all functions except PduR_Init and PduR_GetVersionInfo report the error PDUR_E_UNINIT, provided error detection is enabled [SWS_PduR_00119].
At runtime, PduR_EnableRouting and PduR_DisableRouting switch entire routing path groups [SWS_PduR_00615][SWS_PduR_00617], typically controlled by the BswM. Calls on a disabled path terminate with E_NOT_OK[SWS_PduR_00717]. PduR reports development errors such as PDUR_E_PDU_ID_INVALID to the DET [SWS_PduR_00100]. It reports FIFO losses as PDUR_E_PDU_INSTANCES_LOST[SWS_PduR_00670]. Dedicated error handling on interface paths does not exist; return values are passed back to the source SWS PDU Router p. 46.
Role and system boundary: I-PDU routing between upper modules, interfaces, and transport protocols
The PDU Router (PduR) is the central routing entity of the classic communication stack. It accepts I-PDUs from a source module and transfers them unchanged and consistently to one or more destination modules [SWS_PduR_00160]. Routing takes place exclusively along the configured routing paths [SWS_PduR_00162]. A path is uniquely determined by two specifications: the source I-PDU ID from the PduR configuration and the destination I-PDU IDs from the configurations of the called destination modules [SWS_PduR_00161]. The core capability of the PduR is therefore the translation of I-PDU IDs. This applies to the transmit path as well as to the confirmation and indication paths [SWS_PduR_00766]. Each module chooses its handle IDs independently; the configuration links them via the "global" Pdu ECU Configuration Fig. 3.13 p. 192.
Modules such as Com and DCM are located above PduR. Communication interfaces such as CanIf, FrIf, and LinIf, as well as transport protocols such as CanTp, FrTp, and LinTp, are located below SWS PDU Router p. 24. The interfaces are defined generically. The placeholders <Up>, <Lo>, and <LoTp> are replaced via the module configuration referenced in PduRBswModules, and for CDDs via their apiServicePrefix[SWS_PduR_00504]SWS PDU Router Fig. 10.2 p. 95. If a lower module supports both TP and IF, the infixes Tp and If are added [SWS_PduR_00800].
If PduRZeroCostOperation is set and all routing paths are pre-compile, neighboring modules may call each other directly [SWS_PduR_00287]. If at least one path is not pre-compile, the generator must report an error [SWS_PduR_00619]SWS PDU Router p. 56. The generator shall optimize away unused features, i.e., TP, IF, gateway, and FIFO [SWS_PduR_00764].
Lifecycle: from PDUR_UNINIT via PduR_Init to PDUR_ONLINE
It sets the configured default values of the transmit buffers [SWS_PduR_00308].
It enables the routing path groups according to the enable-at-start parameter [SWS_PduR_00709]. Later versions name this parameter PduRIsEnabledAtInitSWS PDU Router p. 131.
Prior to initialization, all functions except PduR_Init and PduR_GetVersionInfo report the error PDUR_E_UNINIT, provided PduRDevErrorDetect is active [SWS_PduR_00119]. PduR_GetVersionInfo[SWS_PduR_00338] is enabled via PduRVersionInfoApiSystem Template p. 656.
The post-build data is located in PduR_PBConfigType and implemented in PduR_PBcfg.c [SWS_PduR_00241][SWS_PduR_00743]. It is uniquely identified via PduRConfigurationId[SWS_PduR_00281]. PduR_GetConfigurationId[SWS_PduR_00341][SWS_PduR_00280] provides this identifier as an uint16-based PduR_PBConfigIdType; an ECU can contain multiple selectable configurations [SWS_PduR_00771]. Routing tables can be updated at post-build time [SWS_PduR_00295], though only in the uninitialized state [SWS_PduR_00296]. Memory consumption can grow with a new configuration and must therefore be planned for at design time SWS PDU Router p. 160.
Communication interface paths: Transmit, TriggerTransmit, and confirmations
If an upper module calls PduR_<User:Up>Transmit[SWS_PduR_00406], PduR calls <Lo>_Transmit for each destination [SWS_PduR_00625]. In doing so, it does not buffer [SWS_PduR_00629]. For the return value, the following applies:
For multicast, the upper layer must provide the same data multiple times. The request of the first destination is sent to the upper layer with TP_CONFPENDING[SWS_PduR_00631], all further requests with TP_DATARETRY[SWS_PduR_00632]. After the last confirmation, the upper layer receives a single <Up>_TpTxConfirmation. This reports E_OK if at least one destination reported E_OK[SWS_PduR_00765]SWS PDU Router Fig. 9.10 p. 83.
TP reception begins with PduR_<User:LoTp>StartOfReception[SWS_PduR_00507]. PduR forwards it to <Up>_StartOfReception[SWS_PduR_00549] and returns its return value unchanged [SWS_PduR_00623]. This is followed by two forwardings:
Gateway operation: immediate forwarding, FIFO buffering, and on-the-fly TP
Between communication interfaces, PduR routes 1:n [SWS_PduR_00436] and with immediate forwarding, i.e., without its own rate control [SWS_PduR_00437]. Gatewaying is only performed IF↔IF or TP↔TP [SWS_PduR_00638]. For the forwarded length, the following applies:
Without buffering, PduR forwards the minimum of the received length and the configured destination length [SWS_PduR_00783].
With buffering, it copies at most PduRPduMaxLength and discards the remainder [SWS_PduR_00746].
Two procedures exist for TP gateways. In direct gatewaying, <DstLoTp>_Transmit starts in the RxIndication with E_OK[SWS_PduR_00551]. In on-the-fly gatewaying, retransmission starts as soon as PduRTpThreshold is reached [SWS_PduR_00317]. In that case, only one destination is permitted [SWS_PduR_00708], and data already transmitted is not retransmitted [SWS_PduR_00707]SWS PDU Router p. 58. PduR selects the buffer by size:
If the message fits into PduRPduMaxLength, it uses the dedicated buffer [SWS_PduR_00797].
Otherwise, it dynamically retrieves a buffer from PduRTxBuffer[SWS_PduR_00798].
With TxConfirmation, it releases the buffer [SWS_PduR_00637]. If the I-PDU is additionally to be received locally, PduR calls <UpTp>_StartOfReception, <UpTp>_CopyRxData, and <UpTp>_RxIndication in this order [SWS_PduR_00789]. For this, it must buffer because DCM has no knowledge of the gateway SWS PDU Router p. 112.
Routing path groups bundle paths per network or PDU type. They are typically switched by BswM SWS PDU Router p. 69. PduR_EnableRouting(id)[SWS_PduR_00615] and PduR_DisableRouting(id, initialize)[SWS_PduR_00617] serve this purpose; the identifier is of type uint16[SWS_PduR_00654]. The activation takes effect immediately [SWS_PduR_00715]. When disabling, the following rules apply:
initialize decides whether single buffers are reset to the default value [SWS_PduR_00617].
FIFOs of the stopped paths are cleared, and PduR reports PDUR_E_PDU_INSTANCES_LOST[SWS_PduR_00663].
The Mode Management Guide recommends path groups for I-PDUs without a Com I-PDU group, such as for LdCom. Switching is performed via BswM rules, for example depending on the partial network state Mode Management Guide p. 50. The BswM action BswMPduRouterControl calls PduR_EnableRouting or PduR_DisableRouting for this purpose SWS BSW Mode Manager p. 145. In n:1 routing to a local module, at most one path may be active at runtime System Template p. 736[SWS_PduR_00615].
The following references substantiate the statements in this guide. The sequences in Chapter 9 of the specification illustrate them, such as SWS PDU Router Fig. 9.5 p. 100.
AI-generated guide based on the requirements of the SWS PDU Router (R20-11) and associated documentation sections; only the linked requirements are normative. Please verify statements marked as interpretations against the specification.
PDU Router (PduR)
The PDU Router routes I-PDUs between communication interfaces, transport protocols, and upper layers without payload inspection.
AI-GENERATEDunreviewedModel: gemini-3.8-flash-medium · Effort: medium · Temperature: not controllable · Prompt: 8eca52c90f1cProvenance
translated from the German guidegemini-3.8-flash-low · 2026-10-13 · German original
use
The synchronous and non-reentrant function PduR_Init initializes the PDU Router [SWS_PduR_00334]. As a parameter, it takes a pointer to the post-build configuration of the module (PduR_PBConfigType) with ConfigPtr and returns no value [SWS_PduR_00334]. As part of the initialization, PduR_Init pre-initializes all PDU transmit buffers with the configured default values [SWS_PduR_00308].
Interplay and Sequence Conditions
After power-on, the module is initially in the state PDUR_UNINIT[SWS_PduR_00325]. PduR_Init must be called before all other functions of the module, since other interfaces—with the exception of PduR_GetVersionInfo—report the error PDUR_E_UNINIT via the DET in the uninitialized state, provided that PduRDevErrorDetect is activated [SWS_PduR_00119].
Error Handling and Concurrency
If PduR_Init is called in a state other than PDUR_UNINIT, this is evaluated as PDUR_E_UNINIT[SWS_PduR_00100]. In the event of an invalid configuration pointer or the passing of a null pointer, the error codes PDUR_E_INIT_FAILED and PDUR_E_PARAM_POINTER, respectively, take effect [SWS_PduR_00100]. Due to the lack of reentrancy, no parallel call to the initialization routine may take place [SWS_PduR_00334].
This text was generated by an AI based on the AUTOSAR specification R20-11.
AI-GENERATEDunreviewedModel: gemini-3.8-flash-medium · Effort: medium · Temperature: not controllable · Prompt: e3aad02fdb37ProvenanceOpen questions (1)
translated from the German guidegemini-3.8-flash-low · 2026-10-13 · German original
The synchronous function PduR_EnableRouting (service ID 0xf3) serves for targeted activation of a defined routing path group in the PDU Router ([SWS_PduR_00615]). As its only parameter, it takes the group identifier id of type PduR_RoutingPathGroupIdType, which addresses the corresponding routing path group in the configuration of the PDU Router ([SWS_PduR_00615]). The call has no return value and is available via header file PduR.h ([SWS_PduR_00615]).
System states and parameter boundaries are decisive for error-free use: Prior to the call, module PduR must be fully initialized, since execution in the uninitialized state triggers the error PDUR_E_UNINIT ([SWS_PduR_00100]). If an invalid routing table or path group identifier is passed to function PduR_EnableRouting, this leads to error PDUR_E_ROUTING_PATH_GROUP_ID_INVALID with error value 0x08 ([SWS_PduR_00100]).
Regarding concurrency, the interface is declared as reentrant ([SWS_PduR_00615]), so that parallel calls to control path groups are generally permissible. In the overall system, the function serves to dynamically enable communication relations; presumably, the service is typically triggered by higher-level entities such as the mode manager to activate routing paths at runtime depending on system or network states. Question Q-365f4b81f59f3511 (open)
Automatically generated usage note based on the AUTOSAR Classic specification (Release R20-11).
AI-GENERATEDunreviewedModel: gemini-3.8-flash-medium · Effort: medium · Temperature: not controllable · Prompt: 79b319e1f13bProvenance
translated from the German guidegemini-3.8-flash-low · 2026-10-13 · German original
The synchronous function PduR_DisableRouting serves to deactivate a configured routing path group ([SWS_PduR_00617]). It is designed to be reentrant and has no return value ([SWS_PduR_00617]).
Parameters and Behavior
id (PduR_RoutingPathGroupIdType): Identification of the routing path group to be deactivated, as defined in the configuration of the PDU Router ([SWS_PduR_00617]).
initialize (boolean): Controls buffer behavior upon deactivation. When passing true, single buffers are initialized to their default value; with false, single buffers retain their current value ([SWS_PduR_00617]).
Error Handling and Boundary Conditions
In case of error, specific error codes are defined according to the error table ([SWS_PduR_00100]):
If the function is called without the module being initialized, error code PDUR_E_UNINIT (0x01) is intended ([SWS_PduR_00100]).
If an invalid routing table or group ID is passed to PduR_DisableRouting, error PDUR_E_ROUTING_PATH_GROUP_ID_INVALID (0x08) is specified ([SWS_PduR_00100]).
The function is available via the header PduR.h ([SWS_PduR_00617]).
This usage note was generated automatically based on the specification requirements.
Identification of the post-build configuration currently used for routing I-PDUs. An ECU may contain several configurations (post-build selectable), each have unique Id.
AI-GENERATEDunreviewedModel: gemini-3.8-flash-medium · Effort: medium · Temperature: not controllable · Prompt: 9763b14fa079Provenance
translated from the German guidegemini-3.8-flash-low · 2026-10-13 · German original
The enumeration type PduR_StateType specifies the states of the PDU Router according to [SWS_PduR_00742]. The data type is made available via the header file PduR.h and serves in the PDU Router as a formal typed basis for representing the respective initialization state within the module as well as for calling components.
According to requirement [SWS_PduR_00324], the PDU Router module consists of exactly two operating states, which are defined by the enumeration values of PduR_StateType. The value range defined according to [SWS_PduR_00742] comprises the following values:
PDUR_UNINIT: Identifies the state in which the PDU Router is not initialized ([SWS_PduR_00742]).
PDUR_ONLINE: Signals that the PDU Router has been successfully initialized and is ready for operation ([SWS_PduR_00742]).
Within the interaction of the specification requirements, PduR_StateType functions as a binding definition for the internal and external state model of the PDU Router ([SWS_PduR_00324]). Since the value range according to [SWS_PduR_00742] is exclusively restricted to PDUR_UNINIT and PDUR_ONLINE, the specification here strictly distinguishes between the uninitialized initial state and the state after successful initialization. Additional intermediate stages, partial operating modes, or specific error states are not provided in the value range of PduR_StateType.
Automatically generated usage note based on the AUTOSAR specification.
Implementer's Guide to follow (complexity I1)
Request a governed re-review of this record. The record is not changed immediately.
Identification of the post-build configuration currently used for routing I-PDUs. An ECU may contain several configurations (post-build selectable), each have unique Id.
gemini-3.8-flash-low· 2026-10-13 · German original