S‑CORE someip‑gateway 上手文档

GitHub - etas-contrib/score_inc_someip_gateway: Incubation repository for SOME/IP gateway feature · GitHub

S‑CORE 采用双进程网关架构:gatewayd 安全侧通用路由逻辑 + someipd 非安全侧 SOME‑IP 协议适配层,依靠 IPC 实现安全分区隔离与通信协议栈插件化。

SOME/IP 网关拆分为两个守护进程:

  1. 网关守护进程 gatewayd:承载和底层网络无关的业务逻辑,例如载荷序列化处理;
  2. SOME/IP 守护进程 someipd:对接、绑定实际的 SOME/IP 协议栈。

gatewayd 和 someipd 之间依靠 IPC 接口充当 ASIL 功能安全域 与 QM 非安全域 的隔离边界;

该分层设计还支持直接更换底层网络协议栈,不需要改动网关主体业务逻辑。

架构深度解析

  1. 进程职责拆分

  2. gatewayd(上层通用网关)

  • 和具体车载通信协议(SOME‑IP、SOME/IP‑SD、LOLA‑共享内存 IPC)解耦
  • 负责服务代理‑骨架调度、报文负载序列化、事件分发、服务发现管理、应用层消息路由
  • 属于ASIL‑B 功能安全上下文,承担安全相关逻辑
  1. someipd(底层协议适配守护进程)
  • 是 SOME‑IP 协议栈的适配器、网络套接层代理
  • 处理以太网 Socket 收发、SOME/IP‑SD 服务组播发现、报文组包拆包、TCP/UDP 传输
  • 运行在 QM(质量管理、非安全)上下文
  1. IPC 隔离接口的两大核心设计目的

  2. 功能安全隔离(ASIL‑QM 分区)

安全域 gatewayd 和非安全网络协议栈 someipd 通过进程间通信隔离;

非安全侧以太网驱动、协议栈出现异常、网络扰动不会直接污染 ASIL 安全进程,满足车载 ISO‑26262 隔离需求。

  1. 协议栈可插拔解耦

网关上层路由、序列化逻辑全部放在 gatewayd;

后续如果需要更换第三方 SOME‑IP 栈、切换成 DDS、Ethernet‑RPC,只需要替换 someipd 适配进程,gatewayd 源码无需改动。

Eclipse‑S‑CORE someip‑gateway 上手文档

一、快速入门 Getting Started

1. 拉取代码仓库

```bash

git clone https://github.com/eclipse-score/inc_someip_gateway.git

cd inc_someip_gateway

```

2. 启动双守护进程(必须遵守启动顺序)

  1. 终端一:启动上层网关进程 gatewayd

```bash

bazel run //score/gatewayd:gatewayd_example

```

  1. 新开终端二:启动底层SOME‑IP协议适配进程 someipd

```bash

bazel run //score/someipd:someipd_example

```


二、基于Docker集成测试POC验证方案

项目集成测试采用容器化方案;现阶段只是概念验证使用 `docker‑compose` 完成容器编译、环境部署与运行;后续计划接入pytest框架调度管控容器。

  1. 构建Docker容器镜像

```bash

docker compose --project-directory tests/integration/docker_setup/ build

```

  1. 启动整套容器环境

```bash

docker compose --project-directory tests/integration/docker_setup/ up

```

容器已经预先配置好IP地址、组播路由等网络参数;

`someipd‑1` 容器内部已经自动拉起 gatewayd + someipd 两个守护程序。

  1. Wireshark抓包过滤规则,观测容器之间SOME/IP报文

```

ip.addr== 192.168.87.2 || ip.addr ==192.168.87.3

```

  1. 新建终端,在客户端容器启动示例客户端程序

```bash

docker exec -it --env VSOMEIP_CONFIGURATION=/home/source/tests/integration/sample_client/vsomeip.json docker_setup-client-1 /home/source/bazel-bin/tests/integration/sample_client/sample_client

```

  1. 第三个终端,进入someipd‑1容器运行IPC性能基准测试

```bash

docker exec -it docker_setup-someipd-1 /home/source/bazel-bin/tests/benchmarks/ipc_benchmarks

```

> 针对Bazel支持的全部测试后端(Docker、Linux‑QEMU、QNX‑QEMU)以及默认配置,请查阅 `quality/README.md`。


三、配置文件相关说明 📝

1. 守护进程配置校验机制

gatewayd、someipd **并不直接读取JSON**;

配置源文件为JSON,编译之后生成 FlatBuffer 二进制文件给守护进程加载。

项目提供JSON‑Schema,用于编辑提示 + 配置合法性校验。

2. 配置文件Schema路径

```

score/config/mw_someip_config.schema.json

```

该规约定义合法配置字段、数据类型、参数约束,用于后续FlatBuffer二进制文件生成。

3. Bazel宏命令生成二进制配置文件

在你的 `BUILD.bazel` 引入工具宏:

```bazel

load("@score_someip_gateway//bazel/tools:someip_config.bzl", "generate_someip_config_bin")

generate_someip_config_bin(

name = "<generation_rule_name>",

json = "//<package>:<path_to_config_json>",

output = "<path_to_config>/<name_of_config>.bin",

)

```

方式一:作为可执行目标的运行时依赖

```bazel

generate_someip_config_bin(

name = "someipd_config",

...

)

native_binary(

name = "gatewayd",

src = "@score_someip_gateway//score/gatewayd",

args = [

"--configuration",

"$(rootpath :someipd_config)",

"--service_instance_manifest",

"$(rootpath etc/mw_com_config.json)",

],

data = [

"etc/mw_com_config.json",

":someipd_config",

],

)

```

方式二:手动编译生成FlatBuffer二进制配置

```bash

bazel build //:someipd_config

```

编译产物存放于 `bazel‑bin/`,查看控制台输出获取完整路径。

4. 配置自动校验测试

`generate_someip_config_bin` 宏会自动生成schema校验单元测试;执行命令:

```bash

bazel test //:<generation_rule_name>_test

```


四、QNX平台编译指南

  1. QNX账号认证方式
  • 方式1:编写 `.netrc` 文件存放myQNX登录凭证

  • 方式2:环境变量注入账号密码

```bash

export SCORE_QNX_USER=你的账号

export SCORE_QNX_PASSWORD=你的密码

```

也可以借助pomdtr.secrets这类密钥管理工具管理凭证。

  1. QNX工具链下载

Bazel编译QNX目标时会自动下载工具链;

自动下载失败时,可以手动下载工具包,通过 `--distdir` 参数指定本地资源目录。

  1. QNX许可证书部署

保证许可文件路径:

```

/opt/score_qnx/license/licenses

```

可以从本机 `~/.qnx/license/licenses` 拷贝过去。

  1. 许可服务器模式

编辑 `~/.bazelrc` 添加环境变量,指定证书服务器地址:

```

common --action_env=QNXLM_LICENSE_FILE=<port>@<license_server_host>

```

> ⚠️ 重要限制:当前Dev‑Container容器环境暂时无法对接证书服务器;后续需要调试用户账号、主机名配置才能解决该问题。


核心架构&关键知识点总结

  1. **双进程分离**

gatewayd:网络无关上层路由、序列化;someipd:SOME‑IP协议栈、以太网收发;二者IPC隔离ASIL安全域/QM非安全域。

  1. **配置流水线**

JSON → Schema校验 → FlatBuffer二进制 → gatewayd/someipd加载运行。

  1. 测试三层环境:本地Bazel运行、Docker容器集成测试、QEMU虚拟机(QNX/Linux)

  2. QNX编译重点处理工具链下载、软件许可证配置,容器环境存在许可证服务器兼容短板。

如果你需要,我可以整理一份 gatewayd + someipd 启动、调试、配置文件排错的操作清单。

相关推荐
智码看视界1 天前
Day46—Spring Cloud Gateway:路由/过滤器/限流全攻略
java·gateway·限流·微服务网关·过滤器链
wangjialelele3 天前
Spring Cloud 全体系学习笔记(REST、Nacos、Feign、Gateway)
java·spring boot·笔记·学习·spring·spring cloud·gateway
半支烟隐 pzishuo6 天前
Kubernetes Gateway API 完全指南
容器·kubernetes·gateway
lee_curry6 天前
RuoYi Cloud:Gateway、Auth、System 接入 Prometheus JVM 监控,并练习多副本、滚动升级和故障恢复
jvm·gateway·prometheus
mqiqe6 天前
构建企业级 AI 原生架构:LLM Gateway、RAG、Agent 与 MCP 的协同关系解析
人工智能·架构·gateway
mqiqe7 天前
LLM Gateway:企业级大模型应用的“统一控制平面”
平面·flask·gateway
敲代码的嘎仔7 天前
从零搭建微服务:Spring Cloud Alibaba 全家桶踩坑实录(Nacos + OpenFeign + Gateway + Sentinel)
java·spring boot·spring·spring cloud·微服务·gateway·sentinel
JJJennie77712 天前
【MAI Gateway|Finapi】AI网关财务管理,更细致的模型调用管理
人工智能·gateway·ai网关