Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / Documentation / networking / netif-msg.txt
diff --git a/kernel/Documentation/networking/netif-msg.txt b/kernel/Documentation/networking/netif-msg.txt
new file mode 100644 (file)
index 0000000..c967ddb
--- /dev/null
@@ -0,0 +1,79 @@
+
+________________
+NETIF Msg Level
+
+The design of the network interface message level setting.
+
+History
+
+ The design of the debugging message interface was guided and
+ constrained by backwards compatibility previous practice.  It is useful
+ to understand the history and evolution in order to understand current
+ practice and relate it to older driver source code.
+
+ From the beginning of Linux, each network device driver has had a local
+ integer variable that controls the debug message level.  The message
+ level ranged from 0 to 7, and monotonically increased in verbosity.
+
+ The message level was not precisely defined past level 3, but were
+ always implemented within +-1 of the specified level.  Drivers tended
+ to shed the more verbose level messages as they matured.
+    0  Minimal messages, only essential information on fatal errors.
+    1  Standard messages, initialization status.  No run-time messages
+    2  Special media selection messages, generally timer-driver.
+    3  Interface starts and stops, including normal status messages
+    4  Tx and Rx frame error messages, and abnormal driver operation
+    5  Tx packet queue information, interrupt events.
+    6  Status on each completed Tx packet and received Rx packets
+    7  Initial contents of Tx and Rx packets
+
+ Initially this message level variable was uniquely named in each driver
+ e.g. "lance_debug", so that a kernel symbolic debugger could locate and
+ modify the setting.  When kernel modules became common, the variables
+ were consistently renamed to "debug" and allowed to be set as a module
+ parameter.
+
+ This approach worked well.  However there is always a demand for
+ additional features.  Over the years the following emerged as
+ reasonable and easily implemented enhancements
+   Using an ioctl() call to modify the level.
+   Per-interface rather than per-driver message level setting.
+   More selective control over the type of messages emitted.
+
+ The netif_msg recommendation adds these features with only a minor
+ complexity and code size increase.
+
+ The recommendation is the following points
+    Retaining the per-driver integer variable "debug" as a module
+    parameter with a default level of '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
+