NETIF 消息级别¶
网络接口消息级别设置的设计。
历史¶
调试消息接口的设计受到向后兼容先前实践的指导和约束。 为了理解当前实践并将其与较旧的驱动程序源代码相关联,了解历史和演变是有用的。
从 Linux 的一开始,每个网络设备驱动程序都有一个本地整数变量来控制调试消息级别。 消息级别从 0 到 7,并且单调增加详细程度。
消息级别在 3 级之后没有明确定义,但始终在指定级别的 +-1 范围内实现。 随着驱动程序成熟,驱动程序倾向于删除更详细级别的消息。
0 最小消息,仅有关致命错误的必要信息。
1 标准消息,初始化状态。 没有运行时消息
2 特殊媒体选择消息,通常是定时器驱动程序。
3 接口启动和停止,包括正常状态消息
4 Tx 和 Rx 帧错误消息,以及异常的驱动程序操作
5 Tx 数据包队列信息,中断事件。
6 每个已完成的 Tx 数据包和已接收的 Rx 数据包的状态
7 Tx 和 Rx 数据包的初始内容
最初,此消息级别变量在每个驱动程序中都是唯一命名的,例如 “lance_debug”,以便内核符号调试器可以找到并修改该设置。 当内核模块变得常见时,变量被一致地重命名为 “debug”,并允许设置为模块参数。
这种方法效果很好。 但是,始终需要其他功能。 多年来,以下情况已成为合理且易于实现的增强功能
使用 ioctl() 调用来修改级别。
每个接口的消息级别设置,而不是每个驱动程序的消息级别设置。
对发出的消息类型进行更具选择性的控制。
netif_msg 建议添加了这些功能,而复杂性和代码大小仅略有增加。
建议是以下几点
保留每个驱动程序的整数变量 “debug” 作为模块参数,默认级别为 “1”。
添加一个名为 “msg_enable” 的每个接口的私有变量。 该变量是一个位图,而不是一个级别,并初始化为
1 << debug或者更准确地说
debug < 0 ? 0 : 1 << min(sizeof(int)-1, debug)消息应从以下更改
if (debug > 1) printk(MSG_DEBUG "%s: ...到
if (np->msg_enable & NETIF_MSG_LINK) printk(MSG_DEBUG "%s: ...
消息级别的集合被命名为
旧级别
名称
位位置
0
NETIF_MSG_DRV
0x0001
1
NETIF_MSG_PROBE
0x0002
2
NETIF_MSG_LINK
0x0004
2
NETIF_MSG_TIMER
0x0004
3
NETIF_MSG_IFDOWN
0x0008
3
NETIF_MSG_IFUP
0x0008
4
NETIF_MSG_RX_ERR
0x0010
4
NETIF_MSG_TX_ERR
0x0010
5
NETIF_MSG_TX_QUEUED
0x0020
5
NETIF_MSG_INTR
0x0020
6
NETIF_MSG_TX_DONE
0x0040
6
NETIF_MSG_RX_STATUS
0x0040
7
NETIF_MSG_PKTDATA
0x0080