Der Stream-Identification-Post dieser Serie hat gezeigt, wie EthSwt Frames als Streams identifiziert. Dieser Post zeigt, wofür das Firewall-Modul diese Information braucht — und warum alle beteiligten APIs laut SWS noch den Status DRAFT tragen.

Alle in diesem Post genannten APIs (EthSwt_ExtractStreamHandleIdx, EthSwt_GetStreamHandleIdxStatistics/GetStreamStatistics, EthSwt_SetStreamState) sind in der SWS R25-11 explizit als Status: DRAFT markiert (atp.Status=draft). Das ist bei der praktischen Nutzung zu berücksichtigen — die Schnittstellen können sich in künftigen AUTOSAR-Releases noch ändern.

Warum braucht die Firewall den Switch?

Ethernet-Frame-Inspektion mit per-Stream-Filterung kann durch das AUTOSAR Firewall-Modul um fortgeschrittene Inspektionstechniken wie Stateful Packet Inspection und Deep Packet Inspection erweitert werden. Wenn ein Frame beim Firewall-Modul zur Prüfung ankommt, hat es die Vorfilterung durch das Per-Stream-Filtering (siehe Stream-Identification-Post) bereits durchlaufen — die Firewall muss aber wissen, welche Filterregel das Frame passieren ließ, um korrekt weiter zu inspizieren.

StreamHandleIdentifier extrahieren

Std_ReturnType EthSwt_ExtractStreamHandleIdx(
    const Eth_DataType* DataPtr,     // Payload des empfangenen Frames
    uint16              LenByte,     // Länge des Payloads in Byte
    uint16*             StreamHandleIdxPtr
);

Die Funktion extrahiert den StreamHandleIdx aus dem switch- herstellerspezifischen Teil des Netzwerkpaket-Headers. Die Switch-Fabric (siehe Switch-Fabric-Architektur-Post) fügt diesen Wert dem Frame hinzu, indem sie den Header modifiziert bzw. Meta-Informationen zum Netzwerkpaket ergänzt.

Die SWS stellt ausdrücklich klar: Diese Meta-Information ist nicht standardisiert und hängt vom Switch-Hersteller ab. EthSwt_ExtractStreamHandleIdx kapselt diese Herstellerabhängigkeit hinter einer einheitlichen API, aber das zugrundeliegende Frame-Format bleibt Vendor-spezifisch.

Statistiken auslesen: Bucket-Konzept

Viele Switches zählen, wie oft eine Filterregel des Per-Stream-Filterings zutrifft — meist in Form von Buckets, wobei ein Bucket die Treffer mehrerer Filterregeln gemeinsam zählt.

void EthSwt_GetStreamStatistics(
    uint8 SwitchIdx
);
// Ergebnis kommt asynchron über EthIf_StreamStatisticsIndication zurück

Der Ablauf ist bewusst asynchron: EthSwt_GetStreamStatistics stößt das Auslesen nur an (void-Rückgabewert!), das Ergebnis liefert der Treiber später über EthIf_StreamStatisticsIndication mit NumberOfBuckets und einem Zeiger auf die konkatenierten Bucket-Werte.

Je nach Switch-Typ werden die Bucket-Werte beim Auslesen entweder zurückgesetzt oder bleiben bestehen. Damit die Firewall unabhängig vom konkreten Switch-Typ einheitlich rechnen kann, schreibt die SWS vor, dass EthSwt monoton steigende Zählwerte ab 0 seit dem Boot liefern muss — setzt der Switch intern zurück, addiert der Treiber die akkumulierten Werte selbst dazu.

Laufzeit-Umschaltung von Filterregeln

Das Firewall-Modul kann von BswM in unterschiedliche Zustände geschaltet werden (andere Regelsätze aktiv). Damit die Per-Stream-Filterregeln konsistent mitziehen, gibt es EthSwt_SetStreamState:

void EthSwt_SetStreamState(
    uint8   SwitchIdx,
    uint8   StreamHandleIdx,
    boolean StreamActivityStatus   // TRUE = aktiv, FALSE = inaktiv
);

Laut SWS wird diese Funktion typischerweise von einer Diagnoseanwendung über EthIf aufgerufen, um eine konfigurierte Stream-Filterregel gezielt zu (de)aktivieren — z. B. wenn die Firewall in einen anderen Betriebszustand wechselt und dadurch bestimmte Streams nicht mehr relevant sind.

Zusammenfassung

AspektKernaussage

StreamHandleIdentifier

Wird aus vendor-spezifischen Frame-Metadaten extrahiert, nicht aus einem standardisierten Header-Feld

Statistik

Asynchrones Bucket-Konzept, monoton steigend über die gesamte Boot-Laufzeit

Laufzeit-Steuerung

EthSwt_SetStreamState (de)aktiviert einzelne Streams passend zum Firewall-Zustand

Reifegrad

Alle drei APIs sind in R25-11 noch als DRAFT markiert