这里有一个类似的问题“当前消息级别”是什么?
答案中链接的参考资料没有提到这个0x00000033 (51)
值。
以下是 ethtool 的完整输出:
Settings for enp5s0:
Supported ports: [ TP MII ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Half 1000baseT/Full
Supported pause frame use: No
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Half 1000baseT/Full
Advertised pause frame use: Symmetric Receive-only
Advertised auto-negotiation: Yes
Link partner advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Link partner advertised pause frame use: Symmetric Receive-only
Link partner advertised auto-negotiation: Yes
Speed: 100Mb/s
Duplex: Full
Port: MII
PHYAD: 0
Transceiver: internal
Auto-negotiation: on
Supports Wake-on: pumbg
Wake-on: d
Current message level: 0x00000033 (51)
drv probe ifdown ifup
Link detected: yes
答案1
关键词来自NETIF 消息级别 参考文献1“当前消息级别”是什么?问题(并引用 nelaaro 的回答对于这个问题)的答案是“变量是一个位图……”
您询问的是消息级别 0x00000033。0x33 = 0x1 | 0x2 | 0x10 | 0x20,因此该消息级别相当于
NETIF_MSG_DRV
+ NETIF_MSG_PROBE
+
NETIF_MSG_RX_ERR
+ NETIF_MSG_TX_ERR
+
NETIF_MSG_TX_QUEUED
+ NETIF_MSG_INTR
。您可能能够找到有关以下内容的详细信息那意思是在 Linux 以太网驱动程序的源代码中,或者它的文档中。
___________
1 “NETIF Msg Level”文档的内容以未格式化的纯文本形式提供在 Documentation/networking/netif-msg.txt
内核源代码中的文件,以及这里(带有一些标记)和 这里。
答案2
摘自以下链接 http://pastebin.com/raw/WKyEQAUp
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”。
Adding a per-interface private variable named "msg_enable". The
variable is a bit map rather than a level, and is initialized as
1 << debug
Or more precisely
debug < 0 ? 0 : 1 << min(sizeof(int)-1, debug)
Messages should changes from
if (debug > 1)
printk(MSG_DEBUG "%s: ...
to
if (np->msg_enable & NETIF_MSG_LINK)
printk(MSG_DEBUG "%s: ...
The set of message levels is named
Old level Name Bit position
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