DEENESPTFRRUARHIKOZHNL

PDU Router (PduR)

ModulPduR (PDU Router)
BSW-Modul-ID51
Standard-Header#include "PduR.h"
SWS-SpezifikationAUTOSAR_SWS_PDURouter.pdf
ClusterCommunication Services

Modul-GuideKI-GENERIERT

Vermittelt I-PDUs per statischer Routing-Tabelle unverändert zwischen oberen und unteren Kommunikationsmodulen.
KI-GENERIERT ungeprüft Modell: claude-opus-5-5 · Aufwand: high · Temperatur: nicht steuerbar · Prompt: 3a20c4ee9a26 Herkunft Offene Fragen (1)
Kausaler Anker: R20-11 Gültig ab R20-11 Neu synthetisiert für diesen Spezifikationsstand.
KI-generiertclaude-opus-5-5 · 2026-10-13

Vermittelt I-PDUs per statischer Routing-Tabelle unverändert zwischen oberen und unteren Kommunikationsmodulen.

Der PDU Router vermittelt I-PDUs zwischen oberen Modulen wie Com und DCM, Communication Interfaces und Transportprotokollen. Er setzt dabei nur die I-PDU-IDs entlang konfigurierter Routing-Pfade um und verändert den Inhalt nicht [SWS_PduR_00160]. Zu seinen Aufgaben gehören Senden, Empfang, TriggerTransmit, segmentierte TP-Übertragungen und Gateways mit optionalem FIFO-Puffer. Geroutet wird ausschließlich im Zustand PDUR_ONLINE nach erfolgreichem PduR_Init [SWS_PduR_00328]. Zur Laufzeit lassen sich Routing-Pfadgruppen über PduR_EnableRouting und PduR_DisableRouting schalten.

Der PDU Router vermittelt I-PDUs zwischen oberen Modulen wie Com und DCM, Communication Interfaces wie CanIf, FrIf und LinIf sowie Transportprotokollen. Dabei verändert er die I-PDUs nicht [SWS_PduR_00160] und routet nur entlang konfigurierter Routing-Pfade [SWS_PduR_00162]. Seine Kernleistung ist die Umsetzung der I-PDU-IDs auf dem Sendepfad ebenso wie auf dem Bestätigungs- und Indikationspfad [SWS_PduR_00766]. Die Schnittstellen sind generisch; die Platzhalter <Up>, <Lo> und <LoTp> ergeben sich aus der Konfiguration PduRBswModules [SWS_PduR_00504].

kontext cluster_oben Obere Module (<Up>) cluster_if Communication Interfaces (<Lo>) cluster_tp Transportprotokolle (<LoTp>) Com Com PduR PduR Routing-Tabellen, I-PDU-ID-Umsetzung, Gateway-Puffer Com->PduR PduR_ComTransmit Dcm DCM Dcm->PduR PduR_<User:Up>Transmit BswM BswM BswM->PduR PduR_EnableRouting, PduR_DisableRouting PduR->Com Com_RxIndication, Com_TxConfirmation, Com_TriggerTransmit PduR->Dcm Dcm_StartOfReception, Dcm_CopyRxData, Dcm_CopyTxData, Dcm_TpRxIndication, Dcm_TpTxConfirmation Det DET PduR->Det Entwicklungs- und Laufzeitfehler CanIf CanIf PduR->CanIf <Lo>_Transmit FrIf FrIf PduR->FrIf LinIf LinIf PduR->LinIf CanTp CanTp PduR->CanTp <LoTp>_Transmit FrTp FrTp PduR->FrTp LinTp LinTp (in LinIf) PduR->LinTp CanIf->PduR PduR_<User:Lo>RxIndication, TxConfirmation, TriggerTransmit CanTp->PduR PduR_<User:LoTp>StartOfReception, CopyRxData, CopyTxData, RxIndication, TxConfirmation

Kontextdiagramm: Der PduR sitzt zwischen oberen Modulen und IF- bzw. TP-Modulen; BswM schaltet Pfadgruppen, Fehler gehen an den DET. Quellen: [SWS_PduR_00504], SWS PDU Router S. 16

Der PduR kennt nur die Zustände PDUR_UNINIT und PDUR_ONLINE [SWS_PduR_00324]. Geroutet wird ausschließlich in PDUR_ONLINE [SWS_PduR_00328]. Dorthin gelangt er durch PduR_Init(ConfigPtr) [SWS_PduR_00334]. Vorher melden alle Funktionen außer PduR_Init und PduR_GetVersionInfo den Fehler PDUR_E_UNINIT, sofern die Fehlererkennung aktiv ist [SWS_PduR_00119].

zustaende Powerup Powerup UNINIT PDUR_UNINIT kein Routing; APIs außer PduR_Init und PduR_GetVersionInfo melden PDUR_E_UNINIT (bei PduRDevErrorDetect) Powerup->UNINIT immediate ONLINE PDUR_ONLINE Routing gemäß Routing-Tabellen UNINIT->ONLINE PduR_Init(ConfigPtr) ohne Fehler: Puffer freigeben, Default-Werte setzen, Routing-Pfadgruppen gemäß Konfiguration aktivieren ONLINE->ONLINE erneuter PduR_Init: PDUR_E_UNINIT an DET

Zustandsdiagramm: Powerup führt nach PDUR_UNINIT; nur ein fehlerfreier PduR_Init führt nach PDUR_ONLINE. Quellen: [SWS_PduR_00325], [SWS_PduR_00326], SWS PDU Router Abb. 7.2 S. 53

Im Betrieb übernimmt der PduR folgende Abläufe:

Zur Laufzeit schalten PduR_EnableRouting und PduR_DisableRouting ganze Routing-Pfadgruppen [SWS_PduR_00615] [SWS_PduR_00617], typischerweise gesteuert vom BswM. Aufrufe auf einem deaktivierten Pfad enden mit E_NOT_OK [SWS_PduR_00717]. Entwicklungsfehler wie PDUR_E_PDU_ID_INVALID meldet der PduR an den DET [SWS_PduR_00100]. FIFO-Verluste meldet er als PDUR_E_PDU_INSTANCES_LOST [SWS_PduR_00670]. Eine eigene Fehlerbehandlung auf Interface-Pfaden gibt es nicht; Rückgabewerte gehen an die Quelle SWS PDU Router S. 46.

Rolle und Systemgrenze: I-PDU-Vermittlung zwischen oberen Modulen, Interfaces und Transportprotokollen

Der PDU Router (PduR) ist die zentrale Vermittlungsstelle des klassischen Kommunikationsstacks. Er nimmt I-PDUs von einem Quellmodul entgegen und überträgt sie unverändert und konsistent an ein oder mehrere Zielmodule [SWS_PduR_00160]. Geroutet wird ausschließlich entlang der konfigurierten Routing-Pfade [SWS_PduR_00162]. Ein Pfad ist eindeutig durch zwei Angaben bestimmt: die Quell-I-PDU-ID aus der PduR-Konfiguration und die Ziel-I-PDU-IDs aus den Konfigurationen der aufgerufenen Zielmodule [SWS_PduR_00161]. Die Kernleistung des PduR ist daher die Umsetzung von I-PDU-IDs. Sie gilt für den Sendepfad ebenso wie für den Bestätigungs- und Indikationspfad [SWS_PduR_00766]. Jedes Modul wählt seine Handle-IDs selbst; die Konfiguration verknüpft sie über die „globale“ Pdu ECU Configuration Abb. 3.13 S. 192.

Oberhalb des PduR liegen Module wie Com und DCM. Unterhalb liegen Communication Interfaces wie CanIf, FrIf und LinIf sowie Transportprotokolle wie CanTp, FrTp und LinTp SWS PDU Router S. 24. Die Schnittstellen sind generisch definiert. Die Platzhalter <Up>, <Lo> und <LoTp> werden über die in PduRBswModules referenzierte Modulkonfiguration ersetzt, bei CDDs über deren apiServicePrefix [SWS_PduR_00504] SWS PDU Router Abb. 10.2 S. 95. Unterstützt ein unteres Modul sowohl TP als auch IF, kommen die Infixe Tp und If hinzu [SWS_PduR_00800].

kontext cluster_oben Obere Module (<Up>) cluster_if Communication Interfaces (<Lo>) cluster_tp Transportprotokolle (<LoTp>) Com Com PduR PduR Routing-Tabellen, I-PDU-ID-Umsetzung, Gateway-Puffer Com->PduR PduR_ComTransmit Dcm DCM Dcm->PduR PduR_<User:Up>Transmit BswM BswM BswM->PduR PduR_EnableRouting, PduR_DisableRouting PduR->Com Com_RxIndication, Com_TxConfirmation, Com_TriggerTransmit PduR->Dcm Dcm_StartOfReception, Dcm_CopyRxData, Dcm_CopyTxData, Dcm_TpRxIndication, Dcm_TpTxConfirmation Det DET PduR->Det Entwicklungs- und Laufzeitfehler CanIf CanIf PduR->CanIf <Lo>_Transmit FrIf FrIf PduR->FrIf LinIf LinIf PduR->LinIf CanTp CanTp PduR->CanTp <LoTp>_Transmit FrTp FrTp PduR->FrTp LinTp LinTp (in LinIf) PduR->LinTp CanIf->PduR PduR_<User:Lo>RxIndication, TxConfirmation, TriggerTransmit CanTp->PduR PduR_<User:LoTp>StartOfReception, CopyRxData, CopyTxData, RxIndication, TxConfirmation

Kontextdiagramm: Der PduR liegt zwischen oberen Modulen und unteren IF- bzw. TP-Modulen; BswM schaltet Routing-Pfadgruppen, Fehler gehen an den DET. Quellen: [SWS_PduR_00504], [SWS_PduR_00615], [SWS_PduR_00119], SWS PDU Router S. 16

Ist PduRZeroCostOperation gesetzt und sind alle Routing-Pfade Pre-Compile, dürfen die Nachbarmodule einander direkt aufrufen [SWS_PduR_00287]. Ist mindestens ein Pfad nicht Pre-Compile, muss der Generator einen Fehler melden [SWS_PduR_00619] SWS PDU Router S. 56. Ungenutzte Merkmale soll der Generator wegoptimieren, also TP, IF, Gateway und FIFO [SWS_PduR_00764].

Lebenszyklus: von PDUR_UNINIT über PduR_Init nach PDUR_ONLINE

Der PduR besitzt genau eine Zustandsmaschine [SWS_PduR_00644]. Sie hat die Zustände PDUR_UNINIT und PDUR_ONLINE aus PduR_StateType [SWS_PduR_00324] [SWS_PduR_00742]. Nach dem Einschalten ist das Modul in PDUR_UNINIT [SWS_PduR_00325]. Nach erfolgreichem PduR_Init wechselt es nach PDUR_ONLINE [SWS_PduR_00326]. Routing findet nur in PDUR_ONLINE statt [SWS_PduR_00328]; in PDUR_UNINIT wird nichts geroutet [SWS_PduR_00330] SWS PDU Router Abb. 7.2 S. 53. Ein älteres Schaubild zeigt zusätzlich einen Zustand PDUR_REDUCED nach fehlerhafter Initialisierung SWS PDU Router (alt) S. 30. Für R20-11 gilt dieser Zustand nicht, denn hier gibt es nur zwei Zustände.

zustaende Powerup Powerup UNINIT PDUR_UNINIT kein Routing; APIs außer PduR_Init und PduR_GetVersionInfo melden PDUR_E_UNINIT (bei PduRDevErrorDetect) Powerup->UNINIT immediate ONLINE PDUR_ONLINE Routing gemäß Routing-Tabellen UNINIT->ONLINE PduR_Init(ConfigPtr) ohne Fehler: Puffer freigeben, Default-Werte setzen, Routing-Pfadgruppen gemäß Konfiguration aktivieren ONLINE->ONLINE erneuter PduR_Init: PDUR_E_UNINIT an DET

Zustandsdiagramm: Nach Powerup ist der PduR in PDUR_UNINIT und routet nicht; erst nach fehlerfreiem PduR_Init routet er in PDUR_ONLINE. Quellen: [SWS_PduR_00325], [SWS_PduR_00326], [SWS_PduR_00119], [SWS_PduR_00100], SWS PDU Router Abb. 7.2 S. 53

PduR_Init(ConfigPtr) ist synchron und nicht reentrant [SWS_PduR_00334]. Die Funktion erledigt drei Dinge:

Vor der Initialisierung melden alle Funktionen außer PduR_Init und PduR_GetVersionInfo den Fehler PDUR_E_UNINIT, sofern PduRDevErrorDetect aktiv ist [SWS_PduR_00119]. PduR_GetVersionInfo [SWS_PduR_00338] wird über PduRVersionInfoApi freigeschaltet System Template S. 656.

Die Post-Build-Daten liegen in PduR_PBConfigType und sind in PduR_PBcfg.c implementiert [SWS_PduR_00241] [SWS_PduR_00743]. Sie sind über PduRConfigurationId eindeutig identifiziert [SWS_PduR_00281]. Diese Kennung liefert PduR_GetConfigurationId [SWS_PduR_00341] [SWS_PduR_00280] als uint16-basierten PduR_PBConfigIdType; ein Steuergerät kann mehrere wählbare Konfigurationen enthalten [SWS_PduR_00771]. Routing-Tabellen lassen sich zur Post-Build-Zeit aktualisieren [SWS_PduR_00295], allerdings nur im uninitialisierten Zustand [SWS_PduR_00296]. Der Speicherbedarf kann mit einer neuen Konfiguration wachsen und ist daher zur Designzeit einzuplanen SWS PDU Router S. 160.

Communication-Interface-Pfade: Transmit, TriggerTransmit und Bestätigungen

Ruft ein oberes Modul PduR_<User:Up>Transmit auf [SWS_PduR_00406], ruft der PduR <Lo>_Transmit für jedes Ziel [SWS_PduR_00625]. Dabei puffert er nicht [SWS_PduR_00629]. Für den Rückgabewert gilt:

Die Ziele eines Multicasts sind entweder alle Interfaces oder alle Transportprotokolle, nie gemischt [SWS_PduR_00633].

CanIf kopiert die Daten direkt beim Transmit SWS PDU Router Abb. 9.5 S. 100. FrIf und LinIf holen sie dagegen später über PduR_<User:Lo>TriggerTransmit ab [SWS_PduR_00369]. Der PduR leitet diesen Aufruf an <Up>_TriggerTransmit weiter [SWS_PduR_00430] und gibt dessen Rückgabewert zurück [SWS_PduR_00661] SWS PDU Router Abb. 9.6 S. 101. PduR_<User:Lo>TxConfirmation [SWS_PduR_00365] wird samt Ergebnis an <Up>_TxConfirmation weitergegeben [SWS_PduR_00627]. Bei Multicast geschieht das erst nach der letzten Bestätigung [SWS_PduR_00589].

Senden einer I-PDU über Communication InterfacesComPduRCanIfFrIfPduR_ComTransmit(TxPduId, PduInfoPtr)Quell-I-PDU-ID in Ziel-I-PDU-ID umsetzenaltZiel mit direkter Datenbereitstellung (CanIf)CanIf_Transmit(PduId, PduInfoPtr)copy data()Std_ReturnTypeZiel mit TriggerTransmit (FrIf, LinIf)FrIf_Transmit(PduId, PduInfoPtr)set flag()Std_ReturnTypeRückgabewert (Singlecast unverändert)Use Case: Später: Sendezeitpunkt im FlexRay-ZyklusPduR_<User:Lo>TriggerTransmit(TxPduId, PduInfoPtr)Com_TriggerTransmit(TxPduId, PduInfoPtr)copy buffer()E_OK, SduLengthRückgabewert unverändertUse Case: Nach der ÜbertragungPduR_<User:Lo>TxConfirmation(TxPduId, result)Com_TxConfirmation(TxPduId, result)Bestätigung über CanIf läuft gleich ab;bei Multicast erst nach der letzten Bestätigung

Sequenzdiagramm: Senden aus Com mit direkter Datenbereitstellung (CanIf) oder mit verzögertem Datenabruf per TriggerTransmit (FrIf), jeweils mit anschließender Bestätigung. Quellen: [SWS_PduR_00625], [SWS_PduR_00430], [SWS_PduR_00627], SWS PDU Router Abb. 9.5 S. 100, SWS PDU Router Abb. 9.6 S. 101

Beim Empfang führt PduR_<User:Lo>RxIndication [SWS_PduR_00362] zu einem Aufruf von <Up>_RxIndication für jedes obere Ziel [SWS_PduR_00621]; 1:n wird unterstützt [SWS_PduR_00164] SWS PDU Router Abb. 9.1 S. 97. Die Länge prüft der PduR weder beim lokalen Empfang [SWS_PduR_00744] noch beim lokalen Senden [SWS_PduR_00745].

Transportprotokoll-Pfade: segmentierte I-PDUs zwischen DCM und TP-Modulen

Beim TP-Senden ruft der PduR <LoTp>_Transmit für jedes Ziel auf [SWS_PduR_00634]. Die Daten holt das TP-Modul abschnittsweise über PduR_<User:LoTp>CopyTxData [SWS_PduR_00518]. Der PduR leitet jede Anfrage an <Up>_CopyTxData weiter [SWS_PduR_00299] und reicht die Rückgabe durch [SWS_PduR_00676] SWS PDU Router Abb. 9.9 S. 104.

Bei Multicast muss die obere Schicht dieselben Daten mehrfach liefern. Die Anfrage des ersten Ziels geht mit TP_CONFPENDING an die obere Schicht [SWS_PduR_00631], alle weiteren mit TP_DATARETRY [SWS_PduR_00632]. Die obere Schicht erhält nach der letzten Bestätigung eine einzige <Up>_TpTxConfirmation. Diese meldet E_OK, wenn mindestens ein Ziel E_OK gemeldet hat [SWS_PduR_00765] SWS PDU Router Abb. 9.10 S. 83.

TP-Multicast-Senden aus dem DCMDCMPduRCanTpFrTpPduR_<User:Up>Transmit(TxPduId, PduInfoPtr)CanTp_Transmit(PduId, PduInfoPtr)Std_ReturnTypeFrTp_Transmit(PduId, PduInfoPtr)Std_ReturnTypeStd_ReturnTypeloopfür jede Position der ÜbertragungPduR_<User:LoTp>CopyTxData(id, info, retry, availableDataPtr)Dcm_CopyTxData(…)TpDataState = TP_CONFPENDINGBufReq_ReturnTypeBufReq_ReturnTypePduR_<User:LoTp>CopyTxData(id, info, retry, availableDataPtr)Dcm_CopyTxData(…)TpDataState = TP_DATARETRYBufReq_ReturnTypeBufReq_ReturnTypePduR_<User:LoTp>TxConfirmation(id, result)PduR_<User:LoTp>TxConfirmation(id, result)nach der letzten Bestätigung:E_OK, wenn mindestens ein Ziel E_OK meldeteDcm_TpTxConfirmation(id, result)

Sequenzdiagramm: Bei TP-Multicast aus dem DCM fragt der PduR dieselben Daten je Ziel mit TP_CONFPENDING bzw. TP_DATARETRY ab und fasst die Bestätigungen zusammen. Quellen: [SWS_PduR_00634], [SWS_PduR_00631], [SWS_PduR_00632], [SWS_PduR_00765], SWS PDU Router Abb. 9.10 S. 83

Der TP-Empfang beginnt mit PduR_<User:LoTp>StartOfReception [SWS_PduR_00507]. Der PduR leitet ihn an <Up>_StartOfReception weiter [SWS_PduR_00549] und gibt dessen Rückgabe unverändert zurück [SWS_PduR_00623]. Danach folgen zwei Weiterleitungen:

Ein Aufruf mit SduLength 0 fragt den verfügbaren Puffer bzw. die verfügbaren Daten ab [SWS_PduR_00740] SWS PDU Router Abb. 9.4 S. 99. Abbrüche gibt der PduR an jedes Ziel weiter. PduR_<User:Up>CancelTransmit führt zu <Lo>_CancelTransmit bzw. <LoTp>_CancelTransmit [SWS_PduR_00769] [SWS_PduR_00723] [SWS_PduR_00724]. PduR_<User:Up>CancelReceive führt zu <LoTp>_CancelReceive [SWS_PduR_00727].

TP-Empfang von CanTp an DCMCanTpPduRDCMPduR_<User:LoTp>StartOfReception(id, info, TpSduLength, bufferSizePtr)Dcm_StartOfReception(…)BUFREQ_OK, bufferSizePtrRückgabewert unverändertloopfür jedes weitere SegmentPduR_<User:LoTp>CopyRxData(id, info, bufferSizePtr)Dcm_CopyRxData(…)copy data()BufReq_ReturnTypeBufReq_ReturnTypePduR_<User:LoTp>RxIndication(id, result)Dcm_TpRxIndication(id, result)

Sequenzdiagramm: Beim TP-Empfang von CanTp an DCM reicht der PduR StartOfReception, die CopyRxData-Schleife und RxIndication 1:1 durch. Quellen: [SWS_PduR_00549], [SWS_PduR_00428], [SWS_PduR_00429], SWS PDU Router Abb. 9.4 S. 99

Gateway-Betrieb: unmittelbare Weiterleitung, FIFO-Puffer und On-the-fly-TP

Zwischen Communication Interfaces routet der PduR 1:n [SWS_PduR_00436] und mit unmittelbarer Weiterleitung, also ohne eigene Ratenbildung [SWS_PduR_00437]. Gatewayt wird nur IF↔IF oder TP↔TP [SWS_PduR_00638]. Für die weitergegebene Länge gilt:

  • Ohne Pufferung gibt der PduR das Minimum aus empfangener Länge und konfigurierter Ziellänge weiter [SWS_PduR_00783].
  • Mit Pufferung kopiert er höchstens PduRPduMaxLength und verwirft den Rest [SWS_PduR_00746].

Eine I-PDU kann gleichzeitig lokal an Com gehen und auf einen zweiten CAN weitergeleitet werden SWS PDU Router Abb. 9.14 S. 114.

Wie das Ziel an die Daten kommt, legt PduRDestPduDataProvision fest:

Je Ziel-I-PDU ist ein FIFO konfigurierbar [SWS_PduR_00307]. FIFO-Verhalten gilt ab PduRQueueDepth größer 1 [SWS_PduR_00785]. Das Aktivitätsdiagramm fasst die Ein- und Ausgaberegeln zusammen [SWS_PduR_00665] [SWS_PduR_00666].

gateway_fifo rx PduR_<SrcLo>RxIndication auf gepuffertem Gateway-Pfad prov PduRDestPduDataProvision? rx->prov dleer FIFO leer und keine TxConfirmation ausstehend? prov->dleer PDUR_DIRECT tleer FIFO leer? prov->tleer PDUR_TRIGGERTRANSMIT ddirekt <DstLo>_Transmit direkt aufrufen; FIFO bleibt leer dleer->ddirekt ja voll FIFO voll? dleer->voll nein tkopie I-PDU in FIFO kopieren, <DstLo>_Transmit aufrufen tleer->tkopie ja tleer->voll nein flush FIFO leeren, PDUR_E_PDU_INSTANCES_LOST an DET; neue I-PDU wie bei leerem FIFO behandeln voll->flush ja einreihen I-PDU als jüngsten Eintrag einreihen voll->einreihen nein tt PduR_<DstLo>TriggerTransmit ttleer FIFO leer? tt->ttleer ttnok E_NOT_OK zurückgeben ttleer->ttnok ja ttok ältesten Eintrag kopieren und entfernen; FIFO nicht leer: <DstLo>_Transmit mit ältester I-PDU ttleer->ttok nein conf PduR_<DstLo>TxConfirmation (direkte Datenbereitstellung) confnext FIFO nicht leer: <DstLo>_Transmit mit ältester I-PDU, danach entfernen conf->confnext

Aktivitätsdiagramm: Je nach Datenbereitstellung und FIFO-Füllstand wird eine gatewayte I-PDU sofort gesendet, eingereiht oder nach einem Überlauf neu begonnen; TriggerTransmit und TxConfirmation leeren den FIFO. Quellen: [SWS_PduR_00665], [SWS_PduR_00793], [SWS_PduR_00786], [SWS_PduR_00787], [SWS_PduR_00255], [SWS_PduR_00669], [SWS_PduR_00666], [SWS_PduR_00667], [SWS_PduR_00662]

Für TP-Gateways gibt es zwei Verfahren. Beim Direct Gatewaying startet <DstLoTp>_Transmit in der RxIndication mit E_OK [SWS_PduR_00551]. Beim On-the-fly-Gatewaying startet die Weitersendung bereits, sobald PduRTpThreshold erreicht ist [SWS_PduR_00317]. Dann ist nur ein Ziel erlaubt [SWS_PduR_00708], und bereits gesendete Daten werden nicht wiederholt [SWS_PduR_00707] SWS PDU Router S. 58. Den Puffer wählt der PduR nach Größe:

  • Passt die Nachricht in PduRPduMaxLength, nutzt er den dedizierten Puffer [SWS_PduR_00797].
  • Andernfalls holt er dynamisch einen Puffer aus PduRTxBuffer [SWS_PduR_00798].

Mit der TxConfirmation gibt er den Puffer frei [SWS_PduR_00637]. Soll die I-PDU zusätzlich lokal empfangen werden, ruft der PduR <UpTp>_StartOfReception, <UpTp>_CopyRxData und <UpTp>_RxIndication in dieser Reihenfolge auf [SWS_PduR_00789]. Dafür muss er puffern, weil der DCM vom Gateway nichts weiß SWS PDU Router S. 112.

On-the-fly-Gateway einer TP-I-PDU von CAN1 nach CAN2CanTp (CAN1, Quelle)PduRCanTp (CAN2, Ziel)PduR_<User:LoTp>StartOfReception(id, info, TpSduLength, bufferSizePtr)Puffer wählen: dediziert bei TpSduLength ≤ PduRPduMaxLength,sonst dynamisch aus PduRTxBufferBUFREQ_OK (ohne Puffer: BUFREQ_E_OVFL)loopbis PduRTpThreshold erreichtPduR_<User:LoTp>CopyRxData(id, info, bufferSizePtr)copy data()BUFREQ_OKCanTp_Transmit(PduId, PduInfoPtr)Std_ReturnTypeloopverbleibende Segmente, verschränktPduR_<User:LoTp>CopyRxData(…)BUFREQ_OKPduR_<User:LoTp>CopyTxData(id, info, retry, availableDataPtr)BUFREQ_OKPduR_<User:LoTp>RxIndication(id, result)PduR_<User:LoTp>TxConfirmation(id, result)Puffer für dieses Ziel freigebenNur ein Ziel-TP-Modul zulässig;keine erneute Übertragung bereits gesendeter Daten

Sequenzdiagramm: Beim On-the-fly-Gateway zwischen zwei CAN-Netzen beginnt die Weitersendung schon bei Erreichen der Schwelle; Empfang und Senden laufen verschränkt. Quellen: [SWS_PduR_00317], [SWS_PduR_00708], [SWS_PduR_00797], [SWS_PduR_00799], [SWS_PduR_00637], SWS PDU Router Abb. 9.15 S. 110

Routing-Pfadgruppen: Routing zur Laufzeit schalten

Routing-Pfadgruppen bündeln Pfade je Netzwerk oder PDU-Art. Geschaltet werden sie typischerweise vom BswM SWS PDU Router S. 69. Dazu dienen PduR_EnableRouting(id) [SWS_PduR_00615] und PduR_DisableRouting(id, initialize) [SWS_PduR_00617]; die Kennung ist vom Typ uint16 [SWS_PduR_00654]. Die Aktivierung wirkt sofort [SWS_PduR_00715]. Beim Deaktivieren gelten folgende Regeln:

Spätere Fassungen zählen die betroffenen Funktionen ausdrücklich auf SWS PDU Router S. 69.

routinggruppen aufruf PduR_EnableRouting(id) bzw. PduR_DisableRouting(id, initialize) exist Routing-Pfadgruppe id existiert? aufruf->exist det PduRDevErrorDetect aktiv? exist->det nein art Aufruf? exist->art ja meld PDUR_E_ROUTING_PATH_GROUP_ID_INVALID melden det->meld ja keine Rückkehr ohne Aktion det->keine nein meld->keine ein Gruppe sofort aktivieren: nachfolgender Transmit wird direkt bedient art->ein EnableRouting aus Gruppe deaktivieren art->aus DisableRouting fifo Pfade mit FIFO (PduRQueueDepth > 1): FIFO leeren, PDUR_E_PDU_INSTANCES_LOST aus->fifo init initialize = TRUE: Einzelpuffer auf Default-Wert initialize = FALSE: aktuellen Wert behalten fifo->init gesperrt APIs mit I-PDU-ID eines deaktivierten Pfads: E_NOT_OK ohne weitere Aktion init->gesperrt

Aktivitätsdiagramm: Bei unbekannter Gruppen-ID kehrt der Aufruf ohne Aktion zurück (ggf. mit DET-Meldung); sonst wird die Gruppe sofort aktiviert bzw. deaktiviert, mit FIFO-Leerung und Pufferbehandlung. Quellen: [SWS_PduR_00647], [SWS_PduR_00648], [SWS_PduR_00716], [SWS_PduR_00649], [SWS_PduR_00715], [SWS_PduR_00663], [SWS_PduR_00717]

Der Mode Management Guide empfiehlt die Pfadgruppen für I-PDUs ohne Com-I-PDU-Gruppe, etwa für LdCom. Geschaltet wird über BswM-Regeln, beispielsweise abhängig vom Partial-Network-Zustand Mode Management Guide S. 50. Die BswM-Aktion BswMPduRouterControl ruft dazu PduR_EnableRouting bzw. PduR_DisableRouting auf SWS BSW Mode Manager S. 145. Bei n:1-Routing auf ein lokales Modul darf zur Laufzeit höchstens ein Pfad aktiv sein System Template S. 736 [SWS_PduR_00615].

Verhalten im Fehlerfall

Die Entwicklungsfehler definiert [SWS_PduR_00100]. Gemeldet werden sie nur, wenn PduRDevErrorDetect aktiv ist [SWS_PduR_00119] [SWS_PduR_00221]. Produktionsfehler meldet der PduR nicht SWS PDU Router S. 60.

FehlercodeWertAuslöser
PDUR_E_INIT_FAILED0x00ungültiger Konfigurationszeiger
PDUR_E_UNINIT0x01API vor der Initialisierung oder PduR_Init außerhalb von PDUR_UNINIT
PDUR_E_PDU_ID_INVALID0x02ungültige PDU-Kennung
PDUR_E_ROUTING_PATH_GROUP_ID_INVALID0x08unbekannte Gruppe bei Enable/Disable [SWS_PduR_00648] [SWS_PduR_00649]
PDUR_E_PARAM_POINTER0x09Nullzeiger als Argument

Der Laufzeitfehler PDUR_E_PDU_INSTANCES_LOST tritt in drei Fällen auf:

Als Pflichtschnittstelle dafür nutzt der PduR Det_ReportRuntimeError [SWS_PduR_91001].

Auf IF-Pfaden behandelt der PduR Fehler nicht selbst. Er reicht Rückgabewerte an die Quelle durch [SWS_PduR_00626] SWS PDU Router S. 46 und wiederholt keine Übertragung [SWS_PduR_00256]. Auch auf TP-Pfaden gehen Fehler per Rückgabewert an die obere Schicht [SWS_PduR_00700] SWS PDU Router S. 49. Bei mehreren Zielen gilt E_OK nur, wenn alle Ziele E_OK liefern [SWS_PduR_00701]. Diese Regel dürfte sich auf TP-Multicast beziehen, während für IF-Multicast [SWS_PduR_00218] gilt. Frage Q-4bd42fd8dc77ccf2 (offen) Fehlerhafte TP-RxIndications leitet der PduR lediglich weiter [SWS_PduR_00207].

Bei TP-Gateways gelten eigene Regeln:

Weiterführende Detailbelege

Die folgenden Stellen tragen die Aussagen dieses Leitfadens. Die Sequenzen in Kapitel 9 der Spezifikation veranschaulichen sie, etwa SWS PDU Router Abb. 9.5 S. 100.

KI-generierter Leitfaden auf Basis der Requirements des SWS PDU Router (R20-11) und zugeordneter Dokumentstellen; normativ sind ausschließlich die verlinkten Requirements. Als Interpretation gekennzeichnete Aussagen bitte an der Spezifikation prüfen.

PDU Router (PduR)

The PDU Router routes I-PDUs between communication interfaces, transport protocols, and upper layers without payload inspection.

Funktionen — Übersicht

Typen — Übersicht

Funktionen & Typen — Detailansicht

function PduR_Init [SWS_PduR_00334] 📄 PDF

void PduR_Init (const PduR_PBConfigType* ConfigPtr);

Initializes the PDU Router

KI-GENERIERT ungeprüft Modell: gemini-3.8-flash-medium · Aufwand: medium · Temperatur: nicht steuerbar · Prompt: 8eca52c90f1c Herkunft
KI-generiertgemini-3.8-flash-medium · 2026-10-13

Verwendung

Die synchrone und nicht reentrante Funktion PduR_Init initialisiert den PDU-Router [SWS_PduR_00334]. Als Parameter übernimmt sie mit ConfigPtr einen Zeiger auf die Post-Build-Konfiguration des Moduls (PduR_PBConfigType) und liefert keinen Rückgabewert [SWS_PduR_00334]. Im Rahmen der Initialisierung belegt PduR_Init alle PDU-Sendepuffer mit den konfigurierten Standardwerten vor [SWS_PduR_00308].

Zusammenspiel und Reihenfolgebedingungen

Nach dem Einschalten befindet sich das Modul zunächst im Zustand PDUR_UNINIT [SWS_PduR_00325]. PduR_Init muss vor allen anderen Funktionen des Moduls aufgerufen werden, da andere Schnittstellen – mit Ausnahme von PduR_GetVersionInfo – im uninitialisierten Zustand den Fehler PDUR_E_UNINIT über das DET melden, sofern PduRDevErrorDetect aktiviert ist [SWS_PduR_00119].

Fehlerbehandlung und Nebenläufigkeit

Wird PduR_Init in einem anderen Zustand als PDUR_UNINIT aufgerufen, wird dies als PDUR_E_UNINIT gewertet [SWS_PduR_00100]. Bei einem ungültigen Konfigurationszeiger oder der Übergabe eines Null-Zeigers greifen die Fehlercodes PDUR_E_INIT_FAILED beziehungsweise PDUR_E_PARAM_POINTER [SWS_PduR_00100]. Aufgrund der fehlenden Reentranz darf kein paralleler Aufruf der Initialisierungsroutine erfolgen [SWS_PduR_00334].

Dieser Text wurde von einer KI basierend auf der AUTOSAR-Spezifikation R20-11 generiert.

Implementer's Guide folgt (Komplexität I1)

function PduR_EnableRouting [SWS_PduR_00615] 📄 PDF

void PduR_EnableRouting (PduR_RoutingPathGroupIdType id);

Enables a routing path group.

KI-GENERIERT ungeprüft Modell: gemini-3.8-flash-medium · Aufwand: medium · Temperatur: nicht steuerbar · Prompt: e3aad02fdb37 Herkunft Offene Fragen (1)
KI-generiertgemini-3.8-flash-medium · 2026-10-13

Die synchrone Funktion PduR_EnableRouting (Service-ID 0xf3) dient der gezielten Aktivierung einer definierten Routing-Pfadgruppe im PDU-Router ([SWS_PduR_00615]). Als einzigen Parameter übernimmt sie die Gruppenkennung id vom Typ PduR_RoutingPathGroupIdType, welche die zugehörige Routing-Pfadgruppe in der Konfiguration des PDU-Routers adressiert ([SWS_PduR_00615]). Der Aufruf besitzt keinen Rückgabewert und ist über die Header-Datei PduR.h verfügbar ([SWS_PduR_00615]).

Für den fehlerfreien Einsatz sind die Systemzustände und Parametergrenzen maßgeblich: Vor dem Aufruf muss das Modul PduR vollständig initialisiert sein, da die Ausführung im uninitialisierten Zustand den Fehler PDUR_E_UNINIT auslöst ([SWS_PduR_00100]). Falls der Funktion PduR_EnableRouting ein ungültiger Routing-Tabellen- bzw. Pfadgruppen-Identifikator übergeben wird, führt dies zum Fehler PDUR_E_ROUTING_PATH_GROUP_ID_INVALID mit dem Fehlerwert 0x08 ([SWS_PduR_00100]).

Hinsichtlich Nebenläufigkeit ist die Schnittstelle als reentrant deklariert ([SWS_PduR_00615]), sodass parallele Aufrufe zur Steuerung von Pfadgruppen grundsätzlich zulässig sind. Im Gesamtsystem dient die Funktion der dynamischen Freischaltung von Kommunikationsbeziehungen; vermutlich wird der Dienst typischerweise durch übergeordnete Instanzen wie den Modusmanager ausgelöst, um Routing-Pfade abhängig von System- oder Netzwerkzuständen zur Laufzeit zu aktivieren. Frage Q-365f4b81f59f3511 (offen)

Automatisch generierter Nutzungshinweis auf Basis der AUTOSAR-Classic-Spezifikation (Release R20-11).

function PduR_DisableRouting [SWS_PduR_00617] 📄 PDF

void PduR_DisableRouting (PduR_RoutingPathGroupIdType id, boolean initialize);

Disables a routing path group.

KI-GENERIERT ungeprüft Modell: gemini-3.8-flash-medium · Aufwand: medium · Temperatur: nicht steuerbar · Prompt: 79b319e1f13b Herkunft
KI-generiertgemini-3.8-flash-medium · 2026-10-13

Die synchrone Funktion PduR_DisableRouting dient dem Deaktivieren einer konfigurierten Routing-Pfadgruppe ([SWS_PduR_00617]). Sie ist reentrant ausgelegt und besitzt keinen Rückgabewert ([SWS_PduR_00617]).

Parameter und Verhalten

  • id (PduR_RoutingPathGroupIdType): Identifikation der zu deaktivierenden Routing-Pfadgruppe, wie sie in der Konfiguration des PDU-Routers definiert ist ([SWS_PduR_00617]).
  • initialize (boolean): Steuert das Pufferverhalten beim Deaktivieren. Bei Übergabe von true werden Single-Buffer auf ihren Standardwert initialisiert; bei false behalten Single-Buffer ihren aktuellen Wert bei ([SWS_PduR_00617]).

Fehlerbehandlung und Randbedingungen

Im Fehlerfall sind laut Fehlertabelle spezifische Fehlercodes definiert ([SWS_PduR_00100]):

  • Wird die Funktion aufgerufen, ohne dass das Modul initialisiert ist, ist der Fehlercode PDUR_E_UNINIT (0x01) vorgesehen ([SWS_PduR_00100]).
  • Wird an PduR_DisableRouting eine ungültige Routing-Tabelle bzw. Gruppen-ID übergeben, ist der Fehler PDUR_E_ROUTING_PATH_GROUP_ID_INVALID (0x08) spezifiziert ([SWS_PduR_00100]).

Die Funktion steht über den Header PduR.h zur Verfügung ([SWS_PduR_00617]).

Dieser Nutzungshinweis wurde automatisiert auf Basis der Spezifikationsanforderungen generiert.

type PduR_PBConfigType [SWS_PduR_00743] 📄 PDF

Data structure containing post-build-time configuration data of the PDU Router.

type PduR_PBConfigIdType [SWS_PduR_00771] 📄 PDF

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.

type PduR_StateType [SWS_PduR_00742] 📄 PDF

States of the PDU Router

KI-GENERIERT ungeprüft Modell: gemini-3.8-flash-medium · Aufwand: medium · Temperatur: nicht steuerbar · Prompt: 9763b14fa079 Herkunft
KI-generiertgemini-3.8-flash-medium · 2026-10-13

Der Enumerationstyp PduR_StateType spezifiziert gemäß [SWS_PduR_00742] die Zustände des PDU-Routers. Der Datentyp wird über die Header-Datei PduR.h zur Verfügung gestellt und dient im PDU-Router als formale typisierte Grundlage zur Repräsentation des jeweiligen Initialisierungszustands innerhalb des Moduls sowie für aufrufende Komponenten.

Gemäß der Anforderung [SWS_PduR_00324] besteht das PDU-Router-Modul aus genau zwei Betriebszuständen, die durch die Enumerationswerte von PduR_StateType festgelegt werden. Der nach [SWS_PduR_00742] definierte Wertebereich umfasst folgende Werte:

  • PDUR_UNINIT: Kennzeichnet den Zustand, in dem der PDU-Router nicht initialisiert ist ([SWS_PduR_00742]).
  • PDUR_ONLINE: Signalisiert, dass der PDU-Router erfolgreich initialisiert wurde und betriebsbereit ist ([SWS_PduR_00742]).

Im Rahmen des Zusammenspiels der Spezifikationsanforderungen fungiert PduR_StateType als verbindliche Festlegung für das interne und externe Zustandsmodell des PDU-Routers ([SWS_PduR_00324]). Da der Wertebereich laut [SWS_PduR_00742] ausschließlich auf PDUR_UNINIT und PDUR_ONLINE beschränkt ist, unterscheidet die Spezifikation hier strikt zwischen dem uninitialisierten Ausgangszustand und dem Zustand nach erfolgreicher Initialisierung. Zusätzliche Zwischenstufen, Teilbetriebsmodi oder spezifische Fehlerzustände sind im Wertebereich von PduR_StateType nicht vorgesehen.

Automatisch generierter Nutzungshinweis auf Basis der AUTOSAR-Spezifikation.

Implementer's Guide folgt (Komplexität I1)

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

Record
AUTOSAR/AP/record/CP_MOD_PduR
Status
unspecified
Version
AUTOSAR/AP/record/CP_MOD_PduR@rel:R20-11#5e882d4b
Content hash
5e882d4b
Source
https://www.autosar.org/fileadmin/standards/R20-11/CP/AUTOSAR_SWS_PDURouter.pdf#nameddest=SWS_PduR_00334

Initialisierung und Status

Returns the version information of this module.

void PduR_GetVersionInfo (Std_VersionInfoType* versionInfo);
PduR_Init function

Initializes the PDU Router

void PduR_Init (const PduR_PBConfigType* ConfigPtr);

Dienste

Disables a routing path group.

void PduR_DisableRouting (PduR_RoutingPathGroupIdType id, boolean initialize);

Enables a routing path group.

void PduR_EnableRouting (PduR_RoutingPathGroupIdType id);

Returns the unique identifier of the post-build time configuration of the PDU Router

PduR_PBConfigIdType PduR_GetConfigurationId (void);

Typen

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.

Data structure containing post-build-time configuration data of the PDU Router.

Identification of a Routing Table

States of the PDU Router