What to build
为内核对外 Interface 建立明确且互不混用的写入权威,避免 ioctl、Generic Netlink、configfs、debugfs、raw DLI 和新的 backend proxy 同时修改同一状态机。
建议将三类 Interface 分开:
- Managed control Interface:正常情况下只有
slkd 是 writer,用于声明式管理 controller、连接、安全 mechanism、PHY mechanism 和用户态 policy 结果。
- BackendProxy Interface:只有受信任
slk-vendord 可独占注册/拥有一个 UserspaceProxyBackend controller。它承载 controller lifecycle 和 controller RX/TX packet,不是应用管理 Interface,也不是 raw DLI 注入 Interface。
- Diagnostic Interface:raw DLI 只在独占诊断模式开放;snoop/debugfs 只读,不消费状态事件或 command completion。
Generic Netlink 仅保留适合 multicast 或明确需要的操作,configfs 仅承载启动期配置,debugfs 与 snoop 只读。每个状态变化必须有唯一 canonical writer 和 schema。
BackendProxy security model
REGISTER 校验 UAPI version/size、descriptor、capability、max packet、调用者凭据和 controller ownership,返回独占 lease 与 generation。
- 同一 controller 不允许两个 daemon owner;owner fd 关闭、进程退出、lease 撤销或 generation 变化后,旧消息立即失效。
- kernel → daemon 只发送 DLI Host 产生的完整 command/data packet;daemon → kernel 只提交 controller event/data 与受控 lifecycle result。
- daemon 不能调用面向
slkd 的管理 operation,也不能通过 BackendProxy 要求 Host 执行任意 DLI command。内核重新校验 packet type、length、sequence、generation、状态迁移和队列限制。
- BackendProxy device node 使用独立权限,默认只允许
slk-vendord service account;要求 CAP_NET_ADMIN 或更小的专用授权,并支持 LSM/udev/systemd sandbox。
- proxy TX/RX 使用有界队列和非阻塞 poll,不能在 subsystem/global mutex 下等待用户态;daemon 卡死、overflow 或 hangup 只使对应 controller fault/unavailable。
BackendProxy UAPI 与 daemon 由 #1 和 OpenSparklink/sparklink#7 具体跟踪。
Acceptance criteria
Blocked by
What to build
为内核对外 Interface 建立明确且互不混用的写入权威,避免 ioctl、Generic Netlink、configfs、debugfs、raw DLI 和新的 backend proxy 同时修改同一状态机。
建议将三类 Interface 分开:
slkd是 writer,用于声明式管理 controller、连接、安全 mechanism、PHY mechanism 和用户态 policy 结果。slk-vendord可独占注册/拥有一个UserspaceProxyBackendcontroller。它承载 controller lifecycle 和 controller RX/TX packet,不是应用管理 Interface,也不是 raw DLI 注入 Interface。Generic Netlink 仅保留适合 multicast 或明确需要的操作,configfs 仅承载启动期配置,debugfs 与 snoop 只读。每个状态变化必须有唯一 canonical writer 和 schema。
BackendProxy security model
REGISTER校验 UAPI version/size、descriptor、capability、max packet、调用者凭据和 controller ownership,返回独占 lease 与 generation。slkd的管理 operation,也不能通过 BackendProxy 要求 Host 执行任意 DLI command。内核重新校验 packet type、length、sequence、generation、状态迁移和队列限制。slk-vendordservice account;要求CAP_NET_ADMIN或更小的专用授权,并支持 LSM/udev/systemd sandbox。BackendProxy UAPI 与 daemon 由 #1 和 OpenSparklink/sparklink#7 具体跟踪。
Acceptance criteria
slkd一个 writer;其他 Interface 不再重复实现状态变化。REGISTER/UNREGISTER不再是打印后返回成功,而是创建/撤销 per-controller Backend handle、lease、generation、queue 与 readiness state。CAP_NET_ADMIN或更严格 capability,并与 managed mode 及 BackendProxy 正常 transaction 互斥;不能绕过 DLI Host 状态机改变 controller。Blocked by