Logo

Linux内核

6.16.0-rc4

快速搜索

目录

  • 开发过程
  • 提交补丁
  • 行为准则
  • 维护者手册
  • 所有开发过程文档
  • 核心API
    • 核心实用程序
    • 数据结构和低级实用程序
    • 低级进入和退出
    • 并发原语
    • 低级硬件管理
    • 内存管理
    • 内核调试接口
    • 其他所有内容
      • Reed-Solomon库编程接口
      • 面向内核开发者的Netlink注意事项
  • 驱动API
  • 子系统
  • 锁
  • 许可规则
  • 编写文档
  • 开发工具
  • 测试指南
  • 破解指南
  • 追踪
  • 故障注入
  • 热补丁
  • Rust
  • 管理
  • 构建系统
  • 报告问题
  • 用户空间工具
  • 用户空间API
  • 固件
  • 固件和设备树
  • CPU架构
  • 未分类文档
  • 翻译

本页

  • 显示源文件

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

一般指导¶

属性枚举¶

较老的家族常定义值为0且名为unspec的“空”属性和命令。这虽然受支持(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生效。这对于需要内核提供精确反馈(例如用于日志记录目的)的程序很有用。

支持dump一致性¶

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

Netlink规范¶

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

全局变量¶

kernel-policy¶

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

检查¶

属性规范的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 提供支持 | 页面源文件