Logo

Linux 内核

6.13.0-rc6

快速搜索

目录

  • 开发流程
  • 提交补丁
  • 行为准则
  • 维护者手册
  • 所有开发流程文档
  • 核心 API
  • 驱动程序 API
  • 子系统
  • 锁
  • 许可规则
  • 编写文档
  • 开发工具
  • 测试指南
  • 黑客指南
  • 追踪
  • 故障注入
  • 热补丁
  • Rust
  • 管理
  • 构建系统
  • 报告问题
  • 用户空间工具
  • 用户空间 API
    • 系统调用
    • 安全相关接口
    • 设备和 I/O
    • 其他所有
      • Linux 特有的 ELF 特性
      • Netlink 手册
      • 平台配置文件选择 (例如 /sys/firmware/acpi/platform_profile)
      • VDUSE - “用户空间中的 vDPA 设备”
      • futex2
      • Perf 环形缓冲区
  • 固件
  • 固件和设备树
  • CPU 架构
  • 未分类的文档
  • 翻译

本页

  • 显示源文件

Netlink 规范 C 代码生成¶

本文档描述了如何使用 Netlink 规范来渲染 C 代码(uAPI、策略等)。它还定义了较旧的族中允许的额外属性,通过 genetlink-c 协议级别来控制命名。

为简洁起见,本文档将各种对象的 name 属性称为对象类型。例如,$attr 是属性中 name 的值,$family 是族(全局 name 属性)的名称。

大写用于表示字面值,例如 $family-CMD 表示 $family、一个连字符以及字面值 CMD 的连接。

#defines 和枚举值的名称始终转换为大写,并将连字符 (-) 替换为下划线 (_)。

如果构造的名称是 C 关键字,则会附加一个额外的下划线 (do -> do_)。

全局变量¶

c-family-name 控制族名称的 #define 的名称,默认值为 $family-FAMILY-NAME。

c-version-name 控制族版本的 #define 的名称,默认值为 $family-FAMILY-VERSION。

max-by-define 选择是否将枚举的最大值定义为 #define 而不是在枚举内部。

定义¶

常量¶

每个常量都呈现为 #define。常量的名称为 $family-$constant,值根据其在规范中的类型呈现为字符串或整数。

枚举和标志¶

枚举被命名为 $family-$enum。可以通过指定 enum-name 属性直接设置或抑制全名。默认条目名称为 $family-$enum-$entry。如果指定了 name-prefix,则它将替换条目名称的 $family-$enum 部分。

布尔值 render-max 控制最大值的创建(默认情况下为属性枚举启用)。

属性¶

每个属性集(不包括分数集)都呈现为枚举。

属性枚举在 netlink 标头中传统上是未命名的。如果需要命名,可以使用 enum-name 来指定名称。

如果集合的名称与族的名称相同,则默认属性名称前缀为 $family-A,如果名称不同,则为 $family-A-$set。 前缀可以被集合的 name-prefix 属性覆盖。本节的其余部分将前缀称为 $pfx。

属性被命名为 $pfx-$attribute。

属性枚举以两个特殊值 __$pfx-MAX 和 $pfx-MAX 结尾,这两个值用于调整属性表的大小。 这两个名称可以使用 attr-cnt-name 和 attr-max-name 属性直接指定。

如果在全局级别将 max-by-define 设置为 true,则 attr-max-name 将被指定为 #define 而不是枚举值。

操作¶

操作被命名为 $family-CMD-$operation。如果指定了 name-prefix,则它将替换名称的 $family-CMD 部分。

与属性枚举类似,操作枚举以特殊的计数和最大属性结尾。 对于操作,可以使用 cmd-cnt-name 和 cmd-max-name 重命名这些属性。如果 max-by-define 为 true,则最大值将为 define。

多播组¶

每个多播组都会在内核 uAPI 标头中呈现一个 define。define 的名称为 $family-MCGRP-$group,可以使用 c-define-name 属性覆盖。

代码生成¶

假设 uAPI 标头来自默认标头搜索路径中的 <linux/$family.h>。可以使用 uapi-header 全局属性更改它。

©内核开发社区。 | 由 Sphinx 5.3.0 & Alabaster 0.7.16 强力驱动 | 页面源文件