SOME/IP-Stack implementieren

Der SOME/IP-Stack verwaltet die Low-Level-SOME/IP-Transportlogik über eine Android Interface Definition Language-Schnittstelle (AIDL). Dieser Stack sendet und empfängt SOME/IP-Ereignisse und Remoteprozeduraufrufe (RPCs). In diesem Dokument werden die folgenden Konzepte beschrieben:

  • Referenzimplementierung:SDV bietet eine Referenzimplementierung für einen SOME/IP-Stack, die nicht für die Produktion vorgesehen ist.

  • Binder API:Die ISomeIpStack-Schnittstelle definiert Methoden für die Interaktion mit einer SOME/IP-Stack-Instanz.

  • SELinux:Eine Beispielkonfiguration für SELinux für den Referenz-Stack ermöglicht die Binder-Kommunikation und den detaillierten Dateisystemzugriff.

Dieser Stack liest zwar das SOME/IP-Drahtformat, lässt die Nutzlast jedoch als undurchsichtige binäre Blobs und leitet sie an den SOME/IP-Broker weiter.

Der SOME/IP-Standard enthält keine Definition des Stacks oder der Stack-API-Ebene. SDV bietet eine AIDL-API, die innerhalb der bekannten Definitionen des Standards funktioniert und nur minimalen Code erfordert, um bestehende Stacks anzupassen.

Mit dieser API können Sie verschiedene Implementierungen des Stacks auswählen und die Integration des Stacks in andere Komponenten im System vereinfachen.

Referenzimplementierung

SDV bietet eine Referenzbeispielimplementierung für einen SOME/IP-Stack, die nicht für die Produktion vorgesehen ist. Sie besteht aus einem dünnen Wrapper über der Open-Source-Bibliothek COVESA vsomeip. Das System stellt den Referenzstack nur auf den Zielen sdv_core_cf und sdv_core_arm64 bereit und init.rc startet ihn auf der VM mit CID=3.

on property:dev.bootcomplete=1 && property:ro.sdv.vsock_local_cid=3
    start sdv_someip_stack_agent

Definieren Sie die Konfiguration für die Produktionsbereitstellung für Ihren OEM-definierten Stack. Weitere Informationen finden Sie unter SOME/IP in SDV einbinden.

Konfiguration

Der Referenz-Stack deklariert eine Konfiguration für die vSomeIP-Bibliothek. Eine Beschreibung der Konfigurationsstruktur finden Sie unter Struktur der Konfigurationsdatei. Im Rahmen der Konfiguration geben wir SOME/IP-SD-Parameter an, z. B. eine Multicast-Adresse und den vom Stack verwendeten Port.

Binder API

Die Schnittstelle ISomeIpStack wird in core_services/some_ip/aidl/google/sdv/someip deklariert. Die ISomeIpStack-Schnittstelle definiert Methoden für die Interaktion mit einer SOME/IP-Stack-Instanz und bietet wichtige Eigenschaften für diese Elemente.

Dienstverfügbarkeit

  • register_availability_callback Registriert einen Callback für Änderungen der Dienstverfügbarkeit.

  • monitor_service Weist den Stack an, die Verfügbarkeit eines bestimmten Dienstes zu überwachen.

  • unregister_availability_callback hebt die Registrierung des Verfügbarkeits-Callbacks auf.

  • on_sdv_service_availability Gibt eine Änderung der Verfügbarkeit des SDV-Dienstes an.

Remoteprozeduraufrufe (RPC)

Sie können eine RPC-Anfrage mit folgenden Methoden senden:

  • rpc_transact, um auf eine Antwort zu warten
  • rpc_oneway nicht auf eine Antwort warten

Für die Verarbeitung von RPC-Anfragen:

  • register_rpc_request_callback Registriert einen Callback für eingehende RPC-Anfragen.

  • unregister_rpc_request_callback hebt die Registrierung des RPC-Anfrage-Callbacks auf.

Ereignisbenachrichtigung

  • register_event_notification_callback Registriert einen Callback für abonnierte Ereignisbenachrichtigungen.

  • unregister_event_notification_callback Hebt die Registrierung des Rückrufs für Ereignisbenachrichtigungen auf.

  • on_sdv_topic_availability Gibt eine Änderung der Verfügbarkeit von SDV-Themen an.

  • subscribe Abonniert ein bestimmtes Ereignis aus einer Ereignisgruppe.

  • unsubscribe Meldet sich von einem bestimmten Ereignis ab.

  • publish Veröffentlicht ein Ereignis mit einer bestimmten Nutzlast.

SELinux

Der Ordner device/google/sdv/sdv_core_base/sepolicy/samples/vendor/ enthält eine Beispielkonfiguration für SELinux für den Referenz-Stack:

  • sdv_someip_stack_default.te definiert den Typ sdv_someip_stack_default und ordnet ihn Attributen und Kontexten zu.

  • file_contexts ordnet Binär- und Datenordner den entsprechenden Kontexten zu.

Die Konfiguration ermöglicht die Binder-Kommunikation zwischen dem Stack und dem Broker und damit den Zugriff auf Netzwerkqualitäten und den granularen Zugriff auf das Dateisystem des Geräts.