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