Implementar a pilha SOME/IP

A pilha SOME/IP gerencia a lógica de transporte de baixo nível do SOME/IP por uma interface da Linguagem de definição de interface do Android (AIDL). Essa pilha envia e recebe eventos SOME/IP e chamadas de procedimento remoto (RPCs). Neste documento, descrevemos os seguintes conceitos:

  • Implementação de referência:o SDV fornece uma implementação de amostra de referência que não é de produção para uma pilha SOME/IP.

  • API Binder:a interface ISomeIpStack define métodos para interagir com uma instância de pilha SOME/IP.

  • SELinux:uma configuração de exemplo do SELinux para a pilha de referência permite comunicação de vinculação e acesso granular ao sistema de arquivos.

Embora essa pilha leia o formato de fio SOME/IP, ela deixa o payload como blobs binários opacos e encaminha o payload para o broker SOME/IP.

O padrão SOME/IP não oferece uma definição da pilha ou da camada da API de pilha. O SDV oferece uma API AIDL que opera nas definições conhecidas do padrão e exige uma quantidade mínima de código para adaptar as stacks atuais.

Essa API permite selecionar diferentes implementações da pilha e simplifica a integração da pilha com outros componentes no sistema.

Implementação de referência

A SDV fornece uma implementação de amostra de referência não produtiva para uma pilha SOME/IP e consiste em um wrapper simples sobre a biblioteca de código aberto COVESA vsomeip. O sistema implanta a pilha de referência apenas nos destinos sdv_core_cf e sdv_core_arm64, e init.rc a inicia na VM com CID=3.

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

Defina a configuração de implantação de produção para a pilha definida pelo OEM. Para saber mais, consulte Integrar o SOME/IP ao SDV.

Configuração

A pilha de referência declara uma configuração para a biblioteca vSomeIP. Consulte Estrutura do arquivo de configuração para uma descrição da estrutura de configuração. Como parte da configuração, especificamos alguns parâmetros de SD SOME/IP, como um endereço multicast e a porta usada pela pilha.

API Binder

A interface ISomeIpStack é declarada em core_services/some_ip/aidl/google/sdv/someip. A interface ISomeIpStack define métodos para interagir com uma instância de pilha SOME/IP e fornece qualidades essenciais para esses itens.

Disponibilidade do serviço

  • register_availability_callback Registra um callback para mudanças na disponibilidade do serviço.

  • monitor_service Instrui a pilha a monitorar a disponibilidade de um serviço específico.

  • unregister_availability_callback cancela o registro do callback de disponibilidade.

  • on_sdv_service_availability Indica uma mudança na disponibilidade do serviço de SDV.

Chamadas de procedimento remoto (RPC)

Você pode enviar uma solicitação de RPC com:

  • rpc_transact para aguardar uma resposta
  • rpc_oneway para não esperar uma resposta

Para o processamento de solicitações RPC:

  • register_rpc_request_callback Registra um callback para solicitações RPC recebidas.

  • unregister_rpc_request_callback cancela o registro do callback de solicitação de RPC.

Notificação de eventos

  • register_event_notification_callback Registra um callback para notificações de eventos inscritos.

  • unregister_event_notification_callback Cancela o registro da função de callback de notificação de evento.

  • on_sdv_topic_availability Indica uma mudança na disponibilidade de tópicos de SDV.

  • subscribe Assina um evento específico de um grupo de eventos.

  • unsubscribe Cancela a inscrição em um evento específico.

  • publish Publica um evento com um determinado payload.

SELinux

A pasta device/google/sdv/sdv_core_base/sepolicy/samples/vendor/ contém um exemplo de configuração do SELinux para a pilha de referência:

  • sdv_someip_stack_default.te define o tipo sdv_someip_stack_default e o mapeia para atributos e contextos.

  • file_contexts mapeia pastas binárias e de dados para contextos adequados.

A configuração permite a comunicação do Binder entre a pilha e o broker, permitindo o acesso a qualidades de rede e granular ao sistema de arquivos do dispositivo.