isphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget(/translations/zh_CN/networking/netif-msgmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/zh_TW/networking/netif-msgmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/it_IT/networking/netif-msgmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/ja_JP/networking/netif-msgmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/ko_KR/networking/netif-msgmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/sp_SP/networking/netif-msgmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h SPDX-License-Identifier: GPL-2.0h]h SPDX-License-Identifier: GPL-2.0}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhB/var/lib/git/docbuild/linux/Documentation/networking/netif-msg.rsthKubhsection)}(hhh](htitle)}(hNETIF Msg Levelh]hNETIF Msg Level}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(h:The design of the network interface message level setting.h]h:The design of the network interface message level setting.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(hHistoryh]hHistory}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhK ubh block_quote)}(hX 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: ... h](h)}(hThe 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.h]hThe 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.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hhubh)}(hFrom 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.h]hFrom 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.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhubh)}(hThe 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.h]hThe 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.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhubh)}(hX- 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 h]h bullet_list)}(hhh](h list_item)}(h@0 Minimal messages, only essential information on fatal errors.h]h)}(hj'h]h@0 Minimal messages, only essential information on fatal errors.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj%ubah}(h]h ]h"]h$]h&]uh1j#hj ubj$)}(hB1 Standard messages, initialization status. No run-time messagesh]h)}(hj>h]hB1 Standard messages, initialization status. No run-time messages}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj<ubah}(h]h ]h"]h$]h&]uh1j#hj ubj$)}(h<2 Special media selection messages, generally timer-driver.h]h)}(hjUh]h<2 Special media selection messages, generally timer-driver.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjSubah}(h]h ]h"]h$]h&]uh1j#hj ubj$)}(h?3 Interface starts and stops, including normal status messagesh]h)}(hjlh]h?3 Interface starts and stops, including normal status messages}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjjubah}(h]h ]h"]h$]h&]uh1j#hj ubj$)}(h@4 Tx and Rx frame error messages, and abnormal driver operationh]h)}(hjh]h@4 Tx and Rx frame error messages, and abnormal driver operation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j#hj ubj$)}(h15 Tx packet queue information, interrupt events.h]h)}(hjh]h15 Tx packet queue information, interrupt events.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j#hj ubj$)}(h=6 Status on each completed Tx packet and received Rx packetsh]h)}(hjh]h=6 Status on each completed Tx packet and received Rx packets}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j#hj ubj$)}(h)7 Initial contents of Tx and Rx packets h]h)}(h(7 Initial contents of Tx and Rx packetsh]h(7 Initial contents of Tx and Rx packets}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hjubah}(h]h ]h"]h$]h&]uh1j#hj ubeh}(h]h ]h"]h$]h&]bullet-uh1jhhhKhjubah}(h]h ]h"]h$]h&]uh1hhhhKhhubh)}(hX'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.h]hX/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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK"hhubh)}(hThis approach worked well. However there is always a demand for additional features. Over the years the following emerged as reasonable and easily implemented enhancementsh]hThis approach worked well. However there is always a demand for additional features. Over the years the following emerged as reasonable and easily implemented enhancements}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK(hhubh)}(h- 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. h]j)}(hhh](j$)}(h*Using an ioctl() call to modify the level.h]h)}(hjh]h*Using an ioctl() call to modify the level.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK,hjubah}(h]h ]h"]h$]h&]uh1j#hj ubj$)}(h;Per-interface rather than per-driver message level setting.h]h)}(hj(h]h;Per-interface rather than per-driver message level setting.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK-hj&ubah}(h]h ]h"]h$]h&]uh1j#hj ubj$)}(h:More selective control over the type of messages emitted. h]h)}(h9More selective control over the type of messages emitted.h]h9More selective control over the type of messages emitted.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK.hj=ubah}(h]h ]h"]h$]h&]uh1j#hj ubeh}(h]h ]h"]h$]h&]jjuh1jhhhK,hjubah}(h]h ]h"]h$]h&]uh1hhhhK,hhubh)}(heThe netif_msg recommendation adds these features with only a minor complexity and code size increase.h]heThe netif_msg recommendation adds these features with only a minor complexity and code size increase.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK0hhubh)}(h*The recommendation is the following pointsh]h*The recommendation is the following points}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK3hhubh)}(hX- 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: ... h]j)}(hhh](j$)}(heRetaining the per-driver integer variable "debug" as a module parameter with a default level of '1'. h]h)}(hdRetaining the per-driver integer variable "debug" as a module parameter with a default level of '1'.h]hlRetaining the per-driver integer variable “debug” as a module parameter with a default level of ‘1’.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK5hjubah}(h]h ]h"]h$]h&]uh1j#hjubj$)}(hXAdding 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: ... h](h)}(hAdding a per-interface private variable named "msg_enable". The variable is a bit map rather than a level, and is initialized as::h]hAdding a per-interface private variable named “msg_enable”. The variable is a bit map rather than a level, and is initialized as:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK8hjubh literal_block)}(h 1 << debugh]h 1 << debug}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhK;hjubh)}(hOr more precisely::h]hOr more precisely:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK=hjubj)}(h.debug < 0 ? 0 : 1 << min(sizeof(int)-1, debug)h]h.debug < 0 ? 0 : 1 << min(sizeof(int)-1, debug)}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhK?hjubh)}(hMessages should changes from::h]hMessages should changes from:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKAhjubj)}(h-if (debug > 1) printk(MSG_DEBUG "%s: ...h]h-if (debug > 1) printk(MSG_DEBUG "%s: ...}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhKChjubh)}(hto::h]hto:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKFhjubj)}(hCif (np->msg_enable & NETIF_MSG_LINK) printk(MSG_DEBUG "%s: ...h]hCif (np->msg_enable & NETIF_MSG_LINK) printk(MSG_DEBUG "%s: ...}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhKHhjubeh}(h]h ]h"]h$]h&]uh1j#hjubeh}(h]h ]h"]h$]h&]jjuh1jhhhK5hj}ubah}(h]h ]h"]h$]h&]uh1hhhhK5hhubeh}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh)}(h"The set of message levels is namedh]h"The set of message levels is named}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKLhhhhubh)}(hX========= =================== ============ 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 ========= =================== ============h]htable)}(hhh]htgroup)}(hhh](hcolspec)}(hhh]h}(h]h ]h"]h$]h&]colwidthK uh1jFhjCubjG)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jFhjCubjG)}(hhh]h}(h]h ]h"]h$]h&]colwidthK uh1jFhjCubhthead)}(hhh]hrow)}(hhh](hentry)}(hhh]h)}(h Old levelh]h Old level}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKPhjrubah}(h]h ]h"]h$]h&]uh1jphjmubjq)}(hhh]h)}(hNameh]hName}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKPhjubah}(h]h ]h"]h$]h&]uh1jphjmubjq)}(hhh]h)}(h Bit positionh]h Bit position}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKPhjubah}(h]h ]h"]h$]h&]uh1jphjmubeh}(h]h ]h"]h$]h&]uh1jkhjhubah}(h]h ]h"]h$]h&]uh1jfhjCubhtbody)}(hhh](jl)}(hhh](jq)}(hhh]h)}(h0h]h0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKRhjubah}(h]h ]h"]h$]h&]uh1jphjubjq)}(hhh]h)}(h NETIF_MSG_DRVh]h NETIF_MSG_DRV}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKRhjubah}(h]h ]h"]h$]h&]uh1jphjubjq)}(hhh]h)}(h0x0001h]h0x0001}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKRhjubah}(h]h ]h"]h$]h&]uh1jphjubeh}(h]h ]h"]h$]h&]uh1jkhjubjl)}(hhh](jq)}(hhh]h)}(h1h]h1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKShjubah}(h]h ]h"]h$]h&]uh1jphjubjq)}(hhh]h)}(hNETIF_MSG_PROBEh]hNETIF_MSG_PROBE}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKShj0ubah}(h]h ]h"]h$]h&]uh1jphjubjq)}(hhh]h)}(h0x0002h]h0x0002}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKShjGubah}(h]h ]h"]h$]h&]uh1jphjubeh}(h]h ]h"]h$]h&]uh1jkhjubjl)}(hhh](jq)}(hhh]h)}(h2h]h2}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKThjgubah}(h]h ]h"]h$]h&]uh1jphjdubjq)}(hhh]h)}(hNETIF_MSG_LINKh]hNETIF_MSG_LINK}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKThj~ubah}(h]h ]h"]h$]h&]uh1jphjdubjq)}(hhh]h)}(h0x0004h]h0x0004}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKThjubah}(h]h ]h"]h$]h&]uh1jphjdubeh}(h]h ]h"]h$]h&]uh1jkhjubjl)}(hhh](jq)}(hhh]h)}(hjlh]h2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKUhjubah}(h]h ]h"]h$]h&]uh1jphjubjq)}(hhh]h)}(hNETIF_MSG_TIMERh]hNETIF_MSG_TIMER}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKUhjubah}(h]h ]h"]h$]h&]uh1jphjubjq)}(hhh]h)}(h0x0004h]h0x0004}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKUhjubah}(h]h ]h"]h$]h&]uh1jphjubeh}(h]h ]h"]h$]h&]uh1jkhjubjl)}(hhh](jq)}(hhh]h)}(h3h]h3}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKVhjubah}(h]h ]h"]h$]h&]uh1jphjubjq)}(hhh]h)}(hNETIF_MSG_IFDOWNh]hNETIF_MSG_IFDOWN}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKVhjubah}(h]h ]h"]h$]h&]uh1jphjubjq)}(hhh]h)}(h0x0008h]h0x0008}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKVhj0ubah}(h]h ]h"]h$]h&]uh1jphjubeh}(h]h ]h"]h$]h&]uh1jkhjubjl)}(hhh](jq)}(hhh]h)}(hjh]h3}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKWhjPubah}(h]h ]h"]h$]h&]uh1jphjMubjq)}(hhh]h)}(hNETIF_MSG_IFUPh]hNETIF_MSG_IFUP}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKWhjfubah}(h]h ]h"]h$]h&]uh1jphjMubjq)}(hhh]h)}(h0x0008h]h0x0008}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKWhj}ubah}(h]h ]h"]h$]h&]uh1jphjMubeh}(h]h ]h"]h$]h&]uh1jkhjubjl)}(hhh](jq)}(hhh]h)}(h4h]h4}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKXhjubah}(h]h ]h"]h$]h&]uh1jphjubjq)}(hhh]h)}(hNETIF_MSG_RX_ERRh]hNETIF_MSG_RX_ERR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKXhjubah}(h]h ]h"]h$]h&]uh1jphjubjq)}(hhh]h)}(h0x0010h]h0x0010}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKXhjubah}(h]h ]h"]h$]h&]uh1jphjubeh}(h]h ]h"]h$]h&]uh1jkhjubjl)}(hhh](jq)}(hhh]h)}(hjh]h4}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKYhjubah}(h]h ]h"]h$]h&]uh1jphjubjq)}(hhh]h)}(hNETIF_MSG_TX_ERRh]hNETIF_MSG_TX_ERR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKYhjubah}(h]h ]h"]h$]h&]uh1jphjubjq)}(hhh]h)}(h0x0010h]h0x0010}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKYhjubah}(h]h ]h"]h$]h&]uh1jphjubeh}(h]h ]h"]h$]h&]uh1jkhjubjl)}(hhh](jq)}(hhh]h)}(h5h]h5}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKZhj8ubah}(h]h ]h"]h$]h&]uh1jphj5ubjq)}(hhh]h)}(hNETIF_MSG_TX_QUEUEDh]hNETIF_MSG_TX_QUEUED}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKZhjOubah}(h]h ]h"]h$]h&]uh1jphj5ubjq)}(hhh]h)}(h0x0020h]h0x0020}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKZhjfubah}(h]h ]h"]h$]h&]uh1jphj5ubeh}(h]h ]h"]h$]h&]uh1jkhjubjl)}(hhh](jq)}(hhh]h)}(hj=h]h5}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK[hjubah}(h]h ]h"]h$]h&]uh1jphjubjq)}(hhh]h)}(hNETIF_MSG_INTRh]hNETIF_MSG_INTR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK[hjubah}(h]h ]h"]h$]h&]uh1jphjubjq)}(hhh]h)}(h0x0020h]h0x0020}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK[hjubah}(h]h ]h"]h$]h&]uh1jphjubeh}(h]h ]h"]h$]h&]uh1jkhjubjl)}(hhh](jq)}(hhh]h)}(h6h]h6}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK\hjubah}(h]h ]h"]h$]h&]uh1jphjubjq)}(hhh]h)}(hNETIF_MSG_TX_DONEh]hNETIF_MSG_TX_DONE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK\hjubah}(h]h ]h"]h$]h&]uh1jphjubjq)}(hhh]h)}(h0x0040h]h0x0040}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK\hjubah}(h]h ]h"]h$]h&]uh1jphjubeh}(h]h ]h"]h$]h&]uh1jkhjubjl)}(hhh](jq)}(hhh]h)}(hjh]h6}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK]hj!ubah}(h]h ]h"]h$]h&]uh1jphjubjq)}(hhh]h)}(hNETIF_MSG_RX_STATUSh]hNETIF_MSG_RX_STATUS}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK]hj7ubah}(h]h ]h"]h$]h&]uh1jphjubjq)}(hhh]h)}(h0x0040h]h0x0040}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK]hjNubah}(h]h ]h"]h$]h&]uh1jphjubeh}(h]h ]h"]h$]h&]uh1jkhjubjl)}(hhh](jq)}(hhh]h)}(h7h]h7}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK^hjnubah}(h]h ]h"]h$]h&]uh1jphjkubjq)}(hhh]h)}(hNETIF_MSG_PKTDATAh]hNETIF_MSG_PKTDATA}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK^hjubah}(h]h ]h"]h$]h&]uh1jphjkubjq)}(hhh]h)}(h0x0080h]h0x0080}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK^hjubah}(h]h ]h"]h$]h&]uh1jphjkubeh}(h]h ]h"]h$]h&]uh1jkhjubeh}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]colsKuh1jAhj>ubah}(h]h ]h"]h$]h&]uh1j<hj8ubah}(h]h ]h"]h$]h&]uh1hhhhKOhhhhubeh}(h]historyah ]h"]historyah$]h&]uh1hhhhhhhhK ubeh}(h]netif-msg-levelah ]h"]netif msg levelah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksjpfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(jjjju nametypes}(jjuh}(jhjhu footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages] transformerN include_log] decorationNhhub.