€•§³Œsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ*/translations/zh_CN/networking/lapb-module”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ*/translations/zh_TW/networking/lapb-module”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ*/translations/it_IT/networking/lapb-module”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ*/translations/ja_JP/networking/lapb-module”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ*/translations/ko_KR/networking/lapb-module”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ*/translations/pt_BR/networking/lapb-module”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ*/translations/sp_SP/networking/lapb-module”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)�”}”(hŒ SPDX-License-Identifier: GPL-2.0”h]”hŒ SPDX-License-Identifier: GPL-2.0”…”�”}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³ŒD/var/lib/git/docbuild/linux/Documentation/networking/lapb-module.rst”h´KubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒThe Linux LAPB Module Interface”h]”hŒThe Linux LAPB Module Interface”…”�”}”(hhÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhÊh²hh³hÇh´KubhŒ paragraph”“”)�”}”(hŒ Version 1.3”h]”hŒ Version 1.3”…”�”}”(hhßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhhÊh²hubhÞ)�”}”(hŒJonathan Naylor 29.12.96”h]”hŒJonathan Naylor 29.12.96”…”�”}”(hhíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K hhÊh²hubhÞ)�”}”(hŒJChanged (Henner Eisen, 2000-10-29): int return value for data_indication()”h]”hŒJChanged (Henner Eisen, 2000-10-29): int return value for data_indication()”…”�”}”(hhûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K hhÊh²hubhÞ)�”}”(hX†The LAPB module will be a separately compiled module for use by any parts of the Linux operating system that require a LAPB service. This document defines the interfaces to, and the services provided by this module. The term module in this context does not imply that the LAPB module is a separately loadable module, although it may be. The term module is used in its more standard meaning.”h]”hX†The LAPB module will be a separately compiled module for use by any parts of the Linux operating system that require a LAPB service. This document defines the interfaces to, and the services provided by this module. The term module in this context does not imply that the LAPB module is a separately loadable module, although it may be. The term module is used in its more standard meaning.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K hhÊh²hubhÞ)�”}”(hŒÉThe interface to the LAPB module consists of functions to the module, callbacks from the module to indicate important state changes, and structures for getting and setting information about the module.”h]”hŒÉThe interface to the LAPB module consists of functions to the module, callbacks from the module to indicate important state changes, and structures for getting and setting information about the module.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhhÊh²hubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ Structures”h]”hŒ Structures”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj%h²hh³hÇh´KubhÞ)�”}”(hŒ™Probably the most important structure is the skbuff structure for holding received and transmitted data, however it is beyond the scope of this document.”h]”hŒ™Probably the most important structure is the skbuff structure for holding received and transmitted data, however it is beyond the scope of this document.”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khj%h²hubhÞ)�”}”(hŒùThe two LAPB specific structures are the LAPB initialisation structure and the LAPB parameter structure. These will be defined in a standard header file, . The header file is internal to the LAPB module and is not for use.”h]”hŒùThe two LAPB specific structures are the LAPB initialisation structure and the LAPB parameter structure. These will be defined in a standard header file, . The header file is internal to the LAPB module and is not for use.”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khj%h²hubeh}”(h]”Œ structures”ah ]”h"]”Œ structures”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒLAPB Initialisation Structure”h]”hŒLAPB Initialisation Structure”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjZh²hh³hÇh´K%ubhÞ)�”}”(hŒ«This structure is used only once, in the call to lapb_register (see below). It contains information about the device driver that requires the services of the LAPB module::”h]”hŒªThis structure is used only once, in the call to lapb_register (see below). It contains information about the device driver that requires the services of the LAPB module:”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K'hjZh²hubhŒ literal_block”“”)�”}”(hX–struct lapb_register_struct { void (*connect_confirmation)(int token, int reason); void (*connect_indication)(int token, int reason); void (*disconnect_confirmation)(int token, int reason); void (*disconnect_indication)(int token, int reason); int (*data_indication)(int token, struct sk_buff *skb); void (*data_transmit)(int token, struct sk_buff *skb); };”h]”hX–struct lapb_register_struct { void (*connect_confirmation)(int token, int reason); void (*connect_indication)(int token, int reason); void (*disconnect_confirmation)(int token, int reason); void (*disconnect_indication)(int token, int reason); int (*data_indication)(int token, struct sk_buff *skb); void (*data_transmit)(int token, struct sk_buff *skb); };”…”�”}”hj{sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jyh³hÇh´K+hjZh²hubhÞ)�”}”(hŒúEach member of this structure corresponds to a function in the device driver that is called when a particular event in the LAPB module occurs. These will be described in detail below. If a callback is not required (!!) then a NULL may be substituted.”h]”hŒúEach member of this structure corresponds to a function in the device driver that is called when a particular event in the LAPB module occurs. These will be described in detail below. If a callback is not required (!!) then a NULL may be substituted.”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K4hjZh²hubeh}”(h]”Œlapb-initialisation-structure”ah ]”h"]”Œlapb initialisation structure”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K%ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒLAPB Parameter Structure”h]”hŒLAPB Parameter Structure”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjŸh²hh³hÇh´K;ubhÞ)�”}”(hŒÝThis structure is used with the lapb_getparms and lapb_setparms functions (see below). They are used to allow the device driver to get and set the operational parameters of the LAPB implementation for a given connection::”h]”hŒÜThis structure is used with the lapb_getparms and lapb_setparms functions (see below). They are used to allow the device driver to get and set the operational parameters of the LAPB implementation for a given connection:”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K=hjŸh²hubjz)�”}”(hXstruct lapb_parms_struct { unsigned int t1; unsigned int t1timer; unsigned int t2; unsigned int t2timer; unsigned int n2; unsigned int n2count; unsigned int window; unsigned int state; unsigned int mode; };”h]”hXstruct lapb_parms_struct { unsigned int t1; unsigned int t1timer; unsigned int t2; unsigned int t2timer; unsigned int n2; unsigned int n2count; unsigned int window; unsigned int state; unsigned int mode; };”…”�”}”hj¾sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jyh³hÇh´KAhjŸh²hubhÞ)�”}”(hX€T1 and T2 are protocol timing parameters and are given in units of 100ms. N2 is the maximum number of tries on the link before it is declared a failure. The window size is the maximum number of outstanding data packets allowed to be unacknowledged by the remote end, the value of the window is between 1 and 7 for a standard LAPB link, and between 1 and 127 for an extended LAPB link.”h]”hX€T1 and T2 are protocol timing parameters and are given in units of 100ms. N2 is the maximum number of tries on the link before it is declared a failure. The window size is the maximum number of outstanding data packets allowed to be unacknowledged by the remote end, the value of the window is between 1 and 7 for a standard LAPB link, and between 1 and 127 for an extended LAPB link.”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KMhjŸh²hubhÞ)�”}”(hŒxThe mode variable is a bit field used for setting (at present) three values. The bit fields have the following meanings:”h]”hŒxThe mode variable is a bit field used for setting (at present) three values. The bit fields have the following meanings:”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KThjŸh²hubhŒtable”“”)�”}”(hhh]”hŒtgroup”“”)�”}”(hhh]”(hŒcolspec”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jòhjïubjó)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K1uh1jòhjïubhŒthead”“”)�”}”(hhh]”hŒrow”“”)�”}”(hhh]”(hŒentry”“”)�”}”(hhh]”hÞ)�”}”(hŒBit”h]”hŒBit”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KXhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubj)�”}”(hhh]”hÞ)�”}”(hŒMeaning”h]”hŒMeaning”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KXhj+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjïubhŒtbody”“”)�”}”(hhh]”(j)�”}”(hhh]”(j)�”}”(hhh]”hÞ)�”}”(hŒ0”h]”hŒ0”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KZhjVubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjSubj)�”}”(hhh]”hÞ)�”}”(hŒ1LAPB operation (0=LAPB_STANDARD 1=LAPB_EXTENDED).”h]”hŒ1LAPB operation (0=LAPB_STANDARD 1=LAPB_EXTENDED).”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KZhjmubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjSubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjPubj)�”}”(hhh]”(j)�”}”(hhh]”hÞ)�”}”(hŒ1”h]”hŒ1”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K[hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŠubj)�”}”(hhh]”hÞ)�”}”(hŒ)[SM]LP operation (0=LAPB_SLP 1=LAPB=MLP).”h]”hŒ)[SM]LP operation (0=LAPB_SLP 1=LAPB=MLP).”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K[hj¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŠubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjPubj)�”}”(hhh]”(j)�”}”(hhh]”hÞ)�”}”(hŒ2”h]”hŒ2”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K\hjÄubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÁubj)�”}”(hhh]”hÞ)�”}”(hŒ)DTE/DCE operation (0=LAPB_DTE 1=LAPB_DCE)”h]”hŒ)DTE/DCE operation (0=LAPB_DTE 1=LAPB_DCE)”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K\hjÛubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÁubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjPubj)�”}”(hhh]”(j)�”}”(hhh]”hÞ)�”}”(hŒ3-31”h]”hŒ3-31”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K]hjûubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjøubj)�”}”(hhh]”hÞ)�”}”(hŒReserved, must be 0.”h]”hŒReserved, must be 0.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K]hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjøubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjPubeh}”(h]”h ]”h"]”h$]”h&]”uh1jNhjïubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jíhjêubah}”(h]”h ]”h"]”h$]”h&]”uh1jèhjŸh²hh³hÇh´NubhÞ)�”}”(hX?Extended LAPB operation indicates the use of extended sequence numbers and consequently larger window sizes, the default is standard LAPB operation. MLP operation is the same as SLP operation except that the addresses used by LAPB are different to indicate the mode of operation, the default is Single Link Procedure. The difference between DCE and DTE operation is (i) the addresses used for commands and responses, and (ii) when the DCE is not connected, it sends DM without polls set, every T1. The upper case constant names will be defined in the public LAPB header file.”h]”hX?Extended LAPB operation indicates the use of extended sequence numbers and consequently larger window sizes, the default is standard LAPB operation. MLP operation is the same as SLP operation except that the addresses used by LAPB are different to indicate the mode of operation, the default is Single Link Procedure. The difference between DCE and DTE operation is (i) the addresses used for commands and responses, and (ii) when the DCE is not connected, it sends DM without polls set, every T1. The upper case constant names will be defined in the public LAPB header file.”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K`hjŸh²hubeh}”(h]”Œlapb-parameter-structure”ah ]”h"]”Œlapb parameter structure”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K;ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ Functions”h]”hŒ Functions”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjXh²hh³hÇh´KkubhÞ)�”}”(hŒ;The LAPB module provides a number of function entry points.”h]”hŒ;The LAPB module provides a number of function entry points.”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KmhjXh²hubjz)�”}”(hŒubah}”(h]”h ]”h"]”h$]”h&]”uh1jèhjXh²hh³hÇh´Nubjz)�”}”(hŒ@int lapb_setparms(void *token, struct lapb_parms_struct *parms);”h]”hŒ@int lapb_setparms(void *token, struct lapb_parms_struct *parms);”…”�”}”hjÜsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jyh³hÇh´KŸhjXh²hubhÞ)�”}”(hXIThis allows the device driver to set the values of the current LAPB variables, the lapb_parms_struct is described above. The values of t1timer, t2timer and n2count are ignored, likewise changing the mode bits when connected will be ignored. An error implies that none of the values have been changed. The valid return values are:”h]”hXIThis allows the device driver to set the values of the current LAPB variables, the lapb_parms_struct is described above. The values of t1timer, t2timer and n2count are ignored, likewise changing the mode bits when connected will be ignored. An error implies that none of the values have been changed. The valid return values are:”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K¡hjXh²hubjé)�”}”(hhh]”jî)�”}”(hhh]”(jó)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K uh1jòhjûubjó)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K1uh1jòhjûubjO)�”}”(hhh]”(j)�”}”(hhh]”(j)�”}”(hhh]”hÞ)�”}”(hŒLAPB_OK”h]”hŒLAPB_OK”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K¨hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubj)�”}”(hhh]”hÞ)�”}”(hŒLAPB getparms was successful.”h]”hŒLAPB getparms was successful.”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K¨hj/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjubj)�”}”(hhh]”(j)�”}”(hhh]”hÞ)�”}”(hŒ LAPB_BADTOKEN”h]”hŒ LAPB_BADTOKEN”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K©hjOubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjLubj)�”}”(hhh]”hÞ)�”}”(hŒInvalid/unknown LAPB token.”h]”hŒInvalid/unknown LAPB token.”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K©hjfubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjLubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjubj)�”}”(hhh]”(j)�”}”(hhh]”hÞ)�”}”(hŒ LAPB_INVALUE”h]”hŒ LAPB_INVALUE”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kªhj†ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjƒubj)�”}”(hhh]”hÞ)�”}”(hŒ1One of the values was out of its allowable range.”h]”hŒ1One of the values was out of its allowable range.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kªhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jNhjûubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jíhjøubah}”(h]”h ]”h"]”h$]”h&]”uh1jèhjXh²hh³hÇh´Nubjz)�”}”(hŒ&int lapb_connect_request(void *token);”h]”hŒ&int lapb_connect_request(void *token);”…”�”}”hjÍsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jyh³hÇh´K¯hjXh²hubhÞ)�”}”(hŒUInitiate a connect using the current parameter settings. The valid return values are:”h]”hŒUInitiate a connect using the current parameter settings. The valid return values are:”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K±hjXh²hubjé)�”}”(hhh]”jî)�”}”(hhh]”(jó)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jòhjìubjó)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K!uh1jòhjìubjO)�”}”(hhh]”(j)�”}”(hhh]”(j)�”}”(hhh]”hÞ)�”}”(hŒLAPB_OK”h]”hŒLAPB_OK”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kµhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubj)�”}”(hhh]”hÞ)�”}”(hŒLAPB is starting to connect.”h]”hŒLAPB is starting to connect.”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kµhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjubj)�”}”(hhh]”(j)�”}”(hhh]”hÞ)�”}”(hŒ LAPB_BADTOKEN”h]”hŒ LAPB_BADTOKEN”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K¶hj@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj=ubj)�”}”(hhh]”hÞ)�”}”(hŒInvalid/unknown LAPB token.”h]”hŒInvalid/unknown LAPB token.”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K¶hjWubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjubj)�”}”(hhh]”(j)�”}”(hhh]”hÞ)�”}”(hŒLAPB_CONNECTED”h]”hŒLAPB_CONNECTED”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K·hjwubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjtubj)�”}”(hhh]”hÞ)�”}”(hŒ!LAPB module is already connected.”h]”hŒ!LAPB module is already connected.”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K·hjŽubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjtubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jNhjìubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jíhjéubah}”(h]”h ]”h"]”h$]”h&]”uh1jèhjXh²hh³hÇh´Nubjz)�”}”(hŒ)int lapb_disconnect_request(void *token);”h]”hŒ)int lapb_disconnect_request(void *token);”…”�”}”hj¾sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jyh³hÇh´K¼hjXh²hubhÞ)�”}”(hŒ3Initiate a disconnect. The valid return values are:”h]”hŒ3Initiate a disconnect. The valid return values are:”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K¾hjXh²hubjé)�”}”(hhh]”jî)�”}”(hhh]”(jó)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jòhjÝubjó)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jòhjÝubjO)�”}”(hhh]”(j)�”}”(hhh]”(j)�”}”(hhh]”hÞ)�”}”(hŒLAPB_OK”h]”hŒLAPB_OK”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÁhjúubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj÷ubj)�”}”(hhh]”hÞ)�”}”(hŒLAPB is starting to disconnect.”h]”hŒLAPB is starting to disconnect.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÁhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj÷ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjôubj)�”}”(hhh]”(j)�”}”(hhh]”hÞ)�”}”(hŒ LAPB_BADTOKEN”h]”hŒ LAPB_BADTOKEN”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÂhj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj.ubj)�”}”(hhh]”hÞ)�”}”(hŒInvalid/unknown LAPB token.”h]”hŒInvalid/unknown LAPB token.”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÂhjHubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjôubj)�”}”(hhh]”(j)�”}”(hhh]”hÞ)�”}”(hŒLAPB_NOTCONNECTED”h]”hŒLAPB_NOTCONNECTED”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÃhjhubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjeubj)�”}”(hhh]”hÞ)�”}”(hŒLAPB module is not connected.”h]”hŒLAPB module is not connected.”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÃhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjeubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjôubeh}”(h]”h ]”h"]”h$]”h&]”uh1jNhjÝubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jíhjÚubah}”(h]”h ]”h"]”h$]”h&]”uh1jèhjXh²hh³hÇh´Nubjz)�”}”(hŒ8int lapb_data_request(void *token, struct sk_buff *skb);”h]”hŒ8int lapb_data_request(void *token, struct sk_buff *skb);”…”�”}”hj¯sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jyh³hÇh´KÈhjXh²hubhÞ)�”}”(hŒÒQueue data with the LAPB module for transmitting over the link. If the call is successful then the skbuff is owned by the LAPB module and may not be used by the device driver again. The valid return values are:”h]”hŒÒQueue data with the LAPB module for transmitting over the link. If the call is successful then the skbuff is owned by the LAPB module and may not be used by the device driver again. The valid return values are:”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÊhjXh²hubjé)�”}”(hhh]”jî)�”}”(hhh]”(jó)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jòhjÎubjó)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jòhjÎubjO)�”}”(hhh]”(j)�”}”(hhh]”(j)�”}”(hhh]”hÞ)�”}”(hŒLAPB_OK”h]”hŒLAPB_OK”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÏhjëubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjèubj)�”}”(hhh]”hÞ)�”}”(hŒLAPB has accepted the data.”h]”hŒLAPB has accepted the data.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÏhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjèubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjåubj)�”}”(hhh]”(j)�”}”(hhh]”hÞ)�”}”(hŒ LAPB_BADTOKEN”h]”hŒ LAPB_BADTOKEN”…”�”}”(hj% h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÐhj" ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubj)�”}”(hhh]”hÞ)�”}”(hŒInvalid/unknown LAPB token.”h]”hŒInvalid/unknown LAPB token.”…”�”}”(hj< h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÐhj9 ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjåubj)�”}”(hhh]”(j)�”}”(hhh]”hÞ)�”}”(hŒLAPB_NOTCONNECTED”h]”hŒLAPB_NOTCONNECTED”…”�”}”(hj\ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÑhjY ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjV ubj)�”}”(hhh]”hÞ)�”}”(hŒLAPB module is not connected.”h]”hŒLAPB module is not connected.”…”�”}”(hjs h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÑhjp ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjV ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjåubeh}”(h]”h ]”h"]”h$]”h&]”uh1jNhjÎubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jíhjËubah}”(h]”h ]”h"]”h$]”h&]”uh1jèhjXh²hh³hÇh´Nubjz)�”}”(hŒ9int lapb_data_received(void *token, struct sk_buff *skb);”h]”hŒ9int lapb_data_received(void *token, struct sk_buff *skb);”…”�”}”hj  sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jyh³hÇh´KÖhjXh²hubhÞ)�”}”(hXLQueue data with the LAPB module which has been received from the device. It is expected that the data passed to the LAPB module has skb->data pointing to the beginning of the LAPB data. If the call is successful then the skbuff is owned by the LAPB module and may not be used by the device driver again. The valid return values are:”h]”hXLQueue data with the LAPB module which has been received from the device. It is expected that the data passed to the LAPB module has skb->data pointing to the beginning of the LAPB data. If the call is successful then the skbuff is owned by the LAPB module and may not be used by the device driver again. The valid return values are:”…”�”}”(hj® h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KØhjXh²hubjé)�”}”(hhh]”jî)�”}”(hhh]”(jó)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K uh1jòhj¿ ubjó)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jòhj¿ ubjO)�”}”(hhh]”(j)�”}”(hhh]”(j)�”}”(hhh]”hÞ)�”}”(hŒLAPB_OK”h]”hŒLAPB_OK”…”�”}”(hjß h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KßhjÜ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÙ ubj)�”}”(hhh]”hÞ)�”}”(hŒLAPB has accepted the data.”h]”hŒLAPB has accepted the data.”…”�”}”(hjö h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kßhjó ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÙ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÖ ubj)�”}”(hhh]”(j)�”}”(hhh]”hÞ)�”}”(hŒ LAPB_BADTOKEN”h]”hŒ LAPB_BADTOKEN”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kàhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubj)�”}”(hhh]”hÞ)�”}”(hŒInvalid/unknown LAPB token.”h]”hŒInvalid/unknown LAPB token.”…”�”}”(hj- h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kàhj* ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÖ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jNhj¿ ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jíhj¼ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jèhjXh²hh³hÇh´Nubeh}”(h]”Œ functions”ah ]”h"]”Œ functions”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KkubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ Callbacks”h]”hŒ Callbacks”…”�”}”(hje h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjb h²hh³hÇh´KäubhÞ)�”}”(hŒèThese callbacks are functions provided by the device driver for the LAPB module to call when an event occurs. They are registered with the LAPB module with lapb_register (see above) in the structure lapb_register_struct (see above).”h]”hŒèThese callbacks are functions provided by the device driver for the LAPB module to call when an event occurs. They are registered with the LAPB module with lapb_register (see above) in the structure lapb_register_struct (see above).”…”�”}”(hjs h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kæhjb h²hubjz)�”}”(hŒ6void (*connect_confirmation)(void *token, int reason);”h]”hŒ6void (*connect_confirmation)(void *token, int reason);”…”�”}”hj� sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jyh³hÇh´Kíhjb h²hubhÞ)�”}”(hŒ¥This is called by the LAPB module when a connection is established after being requested by a call to lapb_connect_request (see above). The reason is always LAPB_OK.”h]”hŒ¥This is called by the LAPB module when a connection is established after being requested by a call to lapb_connect_request (see above). The reason is always LAPB_OK.”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kïhjb h²hubjz)�”}”(hŒ4void (*connect_indication)(void *token, int reason);”h]”hŒ4void (*connect_indication)(void *token, int reason);”…”�”}”hj� sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jyh³hÇh´Kõhjb h²hubhÞ)�”}”(hŒ{This is called by the LAPB module when the link is established by the remote system. The value of reason is always LAPB_OK.”h]”hŒ{This is called by the LAPB module when the link is established by the remote system. The value of reason is always LAPB_OK.”…”�”}”(hj« h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K÷hjb h²hubjz)�”}”(hŒ9void (*disconnect_confirmation)(void *token, int reason);”h]”hŒ9void (*disconnect_confirmation)(void *token, int reason);”…”�”}”hj¹ sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jyh³hÇh´Kühjb h²hubhÞ)�”}”(hXThis is called by the LAPB module when an event occurs after the device driver has called lapb_disconnect_request (see above). The reason indicates what has happened. In all cases the LAPB link can be regarded as being terminated. The values for reason are:”h]”hXThis is called by the LAPB module when an event occurs after the device driver has called lapb_disconnect_request (see above). The reason indicates what has happened. In all cases the LAPB link can be regarded as being terminated. The values for reason are:”…”�”}”(hjÇ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kþhjb h²hubjé)�”}”(hhh]”jî)�”}”(hhh]”(jó)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jòhjØ ubjó)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K4uh1jòhjØ ubjO)�”}”(hhh]”(j)�”}”(hhh]”(j)�”}”(hhh]”hÞ)�”}”(hŒLAPB_OK”h]”hŒLAPB_OK”…”�”}”(hjø h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Mhjõ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjò ubj)�”}”(hhh]”hÞ)�”}”(hŒ&The LAPB link was terminated normally.”h]”hŒ&The LAPB link was terminated normally.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Mhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjò ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjï ubj)�”}”(hhh]”(j)�”}”(hhh]”hÞ)�”}”(hŒLAPB_NOTCONNECTED”h]”hŒLAPB_NOTCONNECTED”…”�”}”(hj/ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Mhj, ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj) ubj)�”}”(hhh]”hÞ)�”}”(hŒ$The remote system was not connected.”h]”hŒ$The remote system was not connected.”…”�”}”(hjF h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MhjC ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj) ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjï ubj)�”}”(hhh]”(j)�”}”(hhh]”hÞ)�”}”(hŒ LAPB_TIMEDOUT”h]”hŒ LAPB_TIMEDOUT”…”�”}”(hjf h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Mhjc ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj` ubj)�”}”(hhh]”hÞ)�”}”(hŒdata pointer will be pointing to the first byte of data after the LAPB header.”h]”hX_This is called by the LAPB module when data has been received from the remote system that should be passed onto the next layer in the protocol stack. The skbuff becomes the property of the device driver and the LAPB module will not perform any more actions on it. The skb->data pointer will be pointing to the first byte of data after the LAPB header.”…”�”}”(hjà h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M hjb h²hubhÞ)�”}”(hŒµThis method should return NET_RX_DROP (as defined in the header file include/linux/netdevice.h) if and only if the frame was dropped before it could be delivered to the upper layer.”h]”hŒµThis method should return NET_RX_DROP (as defined in the header file include/linux/netdevice.h) if and only if the frame was dropped before it could be delivered to the upper layer.”…”�”}”(hjî h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M&hjb h²hubjz)�”}”(hŒ8void (*data_transmit)(void *token, struct sk_buff *skb);”h]”hŒ8void (*data_transmit)(void *token, struct sk_buff *skb);”…”�”}”hjü sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jyh³hÇh´M,hjb h²hubhÞ)�”}”(hX*This is called by the LAPB module when data is to be transmitted to the remote system by the device driver. The skbuff becomes the property of the device driver and the LAPB module will not perform any more actions on it. The skb->data pointer will be pointing to the first byte of the LAPB header.”h]”hX*This is called by the LAPB module when data is to be transmitted to the remote system by the device driver. The skbuff becomes the property of the device driver and the LAPB module will not perform any more actions on it. The skb->data pointer will be pointing to the first byte of the LAPB header.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M.hjb h²hubeh}”(h]”Œ callbacks”ah ]”h"]”Œ callbacks”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´Käubeh}”(h]”Œthe-linux-lapb-module-interface”ah ]”h"]”Œthe linux lapb module interface”ah$]”h&]”uh1hÈhhh²hh³hÇh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÇuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)�”}”(hÍNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”jŒfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”jJ Œerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÇŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(j% j" jWjTjœj™jUjRj_ j\ j j uŒ nametypes”}”(j% ‰jW‰jœ‰jU‰j_ ‰j ‰uh}”(j" hÊjTj%j™jZjRjŸj\ jXj jb uŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.