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