YNL CLI(YAML Netlink CLI)是 Linux 内核源码树中自带的一个基于 Python 开发的命令行工具,主要用于通过YAML 协议规范文件与内核中的Generic Netlink 子系统进行交互。它是内核网络开发者进行调试、测试 Netlink API 的利器,避免了手写 C 程序或依赖特定版本的ip/ethtool等用户态工具。
核心概念与定位
YNL 是什么:YNL(YAML Netlink)是一套框架,利用YAML 文件(位于
Documentation/netlink/specs/)来描述 Netlink 协议族的操作、属性和消息格式。CLI 工具则是这个框架的用户态前端。解决什么问题:传统 Netlink 接口复杂且容易变动,YNL 通过规范驱动(Spec-driven)的方式,自动处理 Netlink 消息的编码(Encode)和解码(Decode),让开发者可以直接用JSON 输入输出来操作内核,极大简化了开发验证流程。
工具位置与依赖
代码路径:通常位于内核源码树的
tools/net/ynl/pyynl/cli.py 或较老版本的tools/net/ynl/cli.py。依赖:需要 Python3 环境,以及内核源码中配套的
tools/net/ynl/lib/库文件。
常用用法与参数
YNL CLI 的核心是指定一个YAML 规范文件,然后执行具体的操作:
--spec <file>:指定 YAML 规范文件路径(如Documentation/netlink/specs/ethtool.yaml)。--do <op_name>:执行单次请求操作(Do)。--dump <op_name>:执行遍历请求操作(Dump)。--json <attrs>:以 JSON 格式传入操作所需的属性参数。--subscribe <group>:订阅内核的通知组(Notifications)。
典型示例(查询网卡队列设置):
./tools/net/ynl/pyynl/cli.py \ --spec Documentation/netlink/specs/ethtool.yaml \ --do rings-get \ --json '{"header":{"dev-index": 18