Skip to content

[Phase 1.2] DoIP NACK/Retry Handling (#22) #2

@rettde

Description

@rettde

Beschreibung

Generic NACK Handling in cda-comm-doip ist unvollstaendig. 3 Communication Parameters (nack_number_of_retries, diagnostic_ack_timeout, retry_period) sind definiert aber nicht verwendet (markiert mit // todo use this in #22). Die GenericNack-Variante im Response-Enum enthaelt nicht die Adresse des absendenden ECUs.

Betroffene Dateien

  • cda-comm-doip/src/lib.rsGenericNack Enum-Variante ohne ECU-Adresse
  • cda-comm-doip/src/connections.rs — Connection Handling
  • cda-comm-doip/src/ecu_connection.rs — ECU-spezifische Verbindungslogik
  • cda-interfaces/src/datatypes/com_params.rs — Parameter-Definitionen

Implementierungs-Tasks

  • GenericNack Enum um ECU-Adresse (u16 logical address) erweitern
  • nack_number_of_retries HashMap auswerten: pro NRC-Code konfigurierbare Retry-Anzahl
  • diagnostic_ack_timeout in DoIP Message-Handling integrieren
  • retry_period zwischen Retries einhalten
  • BusyRepeatRequest (NRC 0x21) Retry-Logik mit konfigurierbarer Anzahl
  • TemporarilyNotAvailable Handling
  • Logging: NACK-Events mit ECU-Adresse und NRC-Code loggen
  • Fehler-Propagation an SOVD-API Layer (korrekte HTTP Status Codes)

Unit Tests (Pflicht)

  • Test: GenericNack enthaelt korrekte ECU-Adresse
  • Test: Retry bei konfigurierbarem NRC (z.B. NRC 0x21) mit N Retries
  • Test: Kein Retry bei NRC der nicht in nack_number_of_retries Map
  • Test: diagnostic_ack_timeout — Timeout wird korrekt ausgeloest
  • Test: retry_period — Wartezeit zwischen Retries eingehalten
  • Test: Max Retries erreicht -> Fehler propagiert
  • Test: BusyRepeatRequest mit 0 Retries -> sofortiger Fehler
  • Test: Parallele Requests mit unterschiedlichen Retry-Configs
  • Test: Default-Werte wenn Parameter nicht konfiguriert
  • Test: NACK waehrend laufendem Flash-Transfer

CrossCheck & Constraints

  • Pruefung gegen ISO 13400-2 (DoIP) NACK Response Codes
  • Pruefung gegen ISO 14229-1 NRC Definitionen (Table A.1)
  • Constraint: Retry-Count muss >= 0 und <= 255 sein
  • Constraint: Timeout-Werte muessen > 0 und <= 30s sein (DoIP Spec)
  • Constraint: retry_period >= diagnostic_ack_timeout (sinnvolle Konfiguration)
  • Regressionstests: Bestehende DoIP-Kommunikation darf nicht brechen
  • Integration Test: NACK-Szenario mit ECU-Simulator

Security Audit

  • NACK-Flooding: Rate-Limiting bei exzessiven NACKs (DoS-Schutz)
  • Retry-Storm Prevention: Max Gesamtzeit fuer Retries begrenzen
  • Keine Leaks von internen Adressen in SOVD API Error-Responses
  • Timeout-Werte nicht von externem Input steuerbar (nur Config)

Zeitschaetzung

Aufwand
Konventioneller Entwickler 4 PT
KI-Agent 1.5 PT

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions