Logo

Linux 内核

6.13.0-rc6

快速搜索

目录

  • 开发流程
  • 提交补丁
  • 行为准则
  • 维护者手册
  • 所有开发流程文档
  • 核心 API
    • 核心实用工具
    • 数据结构和底层实用工具
    • 底层入口和退出
    • 并发原语
    • 底层硬件管理
    • 内存管理
    • 内核调试接口
    • 其他所有
      • 里德-所罗门库编程接口
      • 内核开发者的 Netlink 注意事项
  • 驱动程序 API
  • 子系统
  • 锁
  • 许可规则
  • 编写文档
  • 开发工具
  • 测试指南
  • 黑客指南
  • 跟踪
  • 故障注入
  • 实时修补
  • Rust
  • 管理
  • 构建系统
  • 报告问题
  • 用户空间工具
  • 用户空间 API
  • 固件
  • 固件和设备树
  • CPU 架构
  • 未分类文档
  • 翻译

本页

  • 显示源代码

内核开发者的 Netlink 注意事项¶

一般指导¶

属性枚举¶

较旧的族通常会定义值为 0 且名为 unspec 的“null”属性和命令。这是支持的(type: unused),但应在新族中避免。实际上不使用 unspec 枚举值,因此只需将第一个属性的值设置为 1。

消息枚举¶

对请求和回复使用相同的命令 ID。这使得它们更容易匹配,并且我们有足够的 ID 空间。

对通知使用单独的命令 ID。这使得更容易将通知与回复分开(并通过与回复不同的 API 将它们呈现给用户应用程序)。

回复请求¶

较旧的族不回复所有命令,尤其是 NEW / ADD 命令。用户仅通过 ACK 获取操作是否成功的消息。尝试查找有用的数据以返回。一旦添加了命令,它是回复完整消息还是仅回复 ACK 是 uAPI,无法更改。最好回复。

特别是 NEW 和 ADD 命令应该回复标识创建对象的信息,例如分配的对象的 ID(无需使用 NLM_F_ECHO)。

NLM_F_ECHO¶

确保将请求信息传递给 genl_notify(),以使 NLM_F_ECHO 生效。这对于需要内核精确反馈的程序(例如,用于日志记录目的)很有用。

支持转储一致性¶

如果在转储期间迭代对象可能会跳过对象或重复它们 - 确保使用 NLM_F_DUMP_INTR 报告转储不一致。这通常通过维护结构的生成 ID 并将其记录在 struct netlink_callback 的 seq 成员中来实现。

Netlink 规范¶

仅与内核空间相关的 Netlink 规范部分的文档。

全局变量¶

kernel-policy¶

定义内核验证策略是 global,即对于族的所有操作都相同,还是为每个操作单独定义 - per-op,或者为每个操作和操作类型(do 与 dump)分别定义 - split。新族应使用 per-op(默认),以便能够缩小特定命令接受的属性。

checks¶

属性规范的 checks 子部分的文档。

unterminated-ok¶

接受没有空终止的字符串(仅适用于旧版族)。从 NLA_NUL_STRING 切换到 NLA_STRING 策略类型。

max-len¶

定义二进制或字符串属性的最大长度(对应于 struct nla_policy 的 len 成员)。对于字符串属性,终止空字符不计入 max-len。

该字段可以是字面整数值,也可以是已定义常量的名称。字符串类型可以将常量减一(即,指定 max-len: CONST - 1)以保留终止字符的空间,因此实现应识别这种模式。

min-len¶

类似于 max-len,但定义最小长度。

©内核开发社区。 | 由 Sphinx 5.3.0 & Alabaster 0.7.16 提供支持 | 页面源代码