sphinx.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/lapb-modulemodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget*/translations/zh_TW/networking/lapb-modulemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget*/translations/it_IT/networking/lapb-modulemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget*/translations/ja_JP/networking/lapb-modulemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget*/translations/ko_KR/networking/lapb-modulemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget*/translations/pt_BR/networking/lapb-modulemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget*/translations/sp_SP/networking/lapb-modulemodnameN 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:spacepreserveuh1hhhhhhD/var/lib/git/docbuild/linux/Documentation/networking/lapb-module.rsthKubhsection)}(hhh](htitle)}(hThe Linux LAPB Module Interfaceh]hThe Linux LAPB Module Interface}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(h Version 1.3h]h Version 1.3}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hJonathan Naylor 29.12.96h]hJonathan Naylor 29.12.96}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh)}(hJChanged (Henner Eisen, 2000-10-29): int return value for data_indication()h]hJChanged (Henner Eisen, 2000-10-29): int return value for data_indication()}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh)}(hXThe 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]hXThe 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 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh)}(hThe 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]hThe 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(h Structuresh]h Structures}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hhhhhKubh)}(hProbably the most important structure is the skbuff structure for holding received and transmitted data, however it is beyond the scope of this document.h]hProbably the most important structure is the skbuff structure for holding received and transmitted data, however it is beyond the scope of this document.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj%hhubh)}(hThe 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]hThe 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.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj%hhubeh}(h] structuresah ]h"] structuresah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hLAPB Initialisation Structureh]hLAPB Initialisation Structure}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhhhhhK%ubh)}(hThis 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]hThis 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:}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK'hjZhhubh literal_block)}(hXstruct 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]hXstruct 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&]hhuh1jyhhhK+hjZhhubh)}(hEach 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]hEach 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK4hjZhhubeh}(h]lapb-initialisation-structureah ]h"]lapb initialisation structureah$]h&]uh1hhhhhhhhK%ubh)}(hhh](h)}(hLAPB Parameter Structureh]hLAPB Parameter Structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK;ubh)}(hThis 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]hThis 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:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK=hjhhubjz)}(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; };}hjsbah}(h]h ]h"]h$]h&]hhuh1jyhhhKAhjhhubh)}(hXT1 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]hXT1 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKMhjhhubh)}(hxThe mode variable is a bit field used for setting (at present) three values. The bit fields have the following meanings:h]hxThe mode variable is a bit field used for setting (at present) three values. The bit fields have the following meanings:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKThjhhubhtable)}(hhh]htgroup)}(hhh](hcolspec)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jhjubj)}(hhh]h}(h]h ]h"]h$]h&]colwidthK1uh1jhjubhthead)}(hhh]hrow)}(hhh](hentry)}(hhh]h)}(hBith]hBit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKXhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hMeaningh]hMeaning}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKXhj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&]uh1jhjubhtbody)}(hhh](j)}(hhh](j)}(hhh]h)}(h0h]h0}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKZhjVubah}(h]h ]h"]h$]h&]uh1jhjSubj)}(hhh]h)}(h1LAPB operation (0=LAPB_STANDARD 1=LAPB_EXTENDED).h]h1LAPB operation (0=LAPB_STANDARD 1=LAPB_EXTENDED).}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKZhjmubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1j hjPubj)}(hhh](j)}(hhh]h)}(h1h]h1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK[hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h)[SM]LP operation (0=LAPB_SLP 1=LAPB=MLP).h]h)[SM]LP operation (0=LAPB_SLP 1=LAPB=MLP).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK[hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j hjPubj)}(hhh](j)}(hhh]h)}(h2h]h2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK\hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h)DTE/DCE operation (0=LAPB_DTE 1=LAPB_DCE)h]h)DTE/DCE operation (0=LAPB_DTE 1=LAPB_DCE)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK\hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j hjPubj)}(hhh](j)}(hhh]h)}(h3-31h]h3-31}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK]hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hReserved, must be 0.h]hReserved, must be 0.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK]hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j hjPubeh}(h]h ]h"]h$]h&]uh1jNhjubeh}(h]h ]h"]h$]h&]colsKuh1jhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubh)}(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.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK`hjhhubeh}(h]lapb-parameter-structureah ]h"]lapb parameter structureah$]h&]uh1hhhhhhhhK;ubh)}(hhh](h)}(h Functionsh]h Functions}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXhhhhhKkubh)}(h;The LAPB module provides a number of function entry points.h]h;The LAPB module provides a number of function entry points.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKmhjXhhubjz)}(hubah}(h]h ]h"]h$]h&]uh1jhjXhhhhhNubjz)}(h@int lapb_setparms(void *token, struct lapb_parms_struct *parms);h]h@int lapb_setparms(void *token, struct lapb_parms_struct *parms);}hjsbah}(h]h ]h"]h$]h&]hhuh1jyhhhKhjXhhubh)}(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:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjXhhubj)}(hhh]j)}(hhh](j)}(hhh]h}(h]h ]h"]h$]h&]colwidthK uh1jhjubj)}(hhh]h}(h]h ]h"]h$]h&]colwidthK1uh1jhjubjO)}(hhh](j)}(hhh](j)}(hhh]h)}(hLAPB_OKh]hLAPB_OK}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hLAPB getparms was successful.h]hLAPB getparms was successful.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj/ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j hjubj)}(hhh](j)}(hhh]h)}(h LAPB_BADTOKENh]h LAPB_BADTOKEN}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjOubah}(h]h ]h"]h$]h&]uh1jhjLubj)}(hhh]h)}(hInvalid/unknown LAPB token.h]hInvalid/unknown LAPB token.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjfubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1j hjubj)}(hhh](j)}(hhh]h)}(h LAPB_INVALUEh]h LAPB_INVALUE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h1One of the values was out of its allowable range.h]h1One of the values was out of its allowable range.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jNhjubeh}(h]h ]h"]h$]h&]colsKuh1jhjubah}(h]h ]h"]h$]h&]uh1jhjXhhhhhNubjz)}(h&int lapb_connect_request(void *token);h]h&int lapb_connect_request(void *token);}hjsbah}(h]h ]h"]h$]h&]hhuh1jyhhhKhjXhhubh)}(hUInitiate a connect using the current parameter settings. The valid return values are:h]hUInitiate a connect using the current parameter settings. The valid return values are:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjXhhubj)}(hhh]j)}(hhh](j)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jhjubj)}(hhh]h}(h]h ]h"]h$]h&]colwidthK!uh1jhjubjO)}(hhh](j)}(hhh](j)}(hhh]h)}(hLAPB_OKh]hLAPB_OK}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hLAPB is starting to connect.h]hLAPB is starting to connect.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j hjubj)}(hhh](j)}(hhh]h)}(h LAPB_BADTOKENh]h LAPB_BADTOKEN}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj@ubah}(h]h ]h"]h$]h&]uh1jhj=ubj)}(hhh]h)}(hInvalid/unknown LAPB token.h]hInvalid/unknown LAPB token.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjWubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1j hjubj)}(hhh](j)}(hhh]h)}(hLAPB_CONNECTEDh]hLAPB_CONNECTED}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjwubah}(h]h ]h"]h$]h&]uh1jhjtubj)}(hhh]h)}(h!LAPB module is already connected.h]h!LAPB module is already connected.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jNhjubeh}(h]h ]h"]h$]h&]colsKuh1jhjubah}(h]h ]h"]h$]h&]uh1jhjXhhhhhNubjz)}(h)int lapb_disconnect_request(void *token);h]h)int lapb_disconnect_request(void *token);}hjsbah}(h]h ]h"]h$]h&]hhuh1jyhhhKhjXhhubh)}(h3Initiate a disconnect. The valid return values are:h]h3Initiate a disconnect. The valid return values are:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjXhhubj)}(hhh]j)}(hhh](j)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jhjubj)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jhjubjO)}(hhh](j)}(hhh](j)}(hhh]h)}(hLAPB_OKh]hLAPB_OK}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hLAPB is starting to disconnect.h]hLAPB is starting to disconnect.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j hjubj)}(hhh](j)}(hhh]h)}(h LAPB_BADTOKENh]h LAPB_BADTOKEN}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj1ubah}(h]h ]h"]h$]h&]uh1jhj.ubj)}(hhh]h)}(hInvalid/unknown LAPB token.h]hInvalid/unknown LAPB token.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjHubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1j hjubj)}(hhh](j)}(hhh]h)}(hLAPB_NOTCONNECTEDh]hLAPB_NOTCONNECTED}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhubah}(h]h ]h"]h$]h&]uh1jhjeubj)}(hhh]h)}(hLAPB module is not connected.h]hLAPB module is not connected.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jNhjubeh}(h]h ]h"]h$]h&]colsKuh1jhjubah}(h]h ]h"]h$]h&]uh1jhjXhhhhhNubjz)}(h8int lapb_data_request(void *token, struct sk_buff *skb);h]h8int lapb_data_request(void *token, struct sk_buff *skb);}hjsbah}(h]h ]h"]h$]h&]hhuh1jyhhhKhjXhhubh)}(hQueue 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]hQueue 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:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjXhhubj)}(hhh]j)}(hhh](j)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jhjubj)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jhjubjO)}(hhh](j)}(hhh](j)}(hhh]h)}(hLAPB_OKh]hLAPB_OK}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hLAPB has accepted the data.h]hLAPB has accepted the data.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j hjubj)}(hhh](j)}(hhh]h)}(h LAPB_BADTOKENh]h LAPB_BADTOKEN}(hj% hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj" ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(hInvalid/unknown LAPB token.h]hInvalid/unknown LAPB token.}(hj< hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj9 ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1j hjubj)}(hhh](j)}(hhh]h)}(hLAPB_NOTCONNECTEDh]hLAPB_NOTCONNECTED}(hj\ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjY ubah}(h]h ]h"]h$]h&]uh1jhjV ubj)}(hhh]h)}(hLAPB module is not connected.h]hLAPB module is not connected.}(hjs hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjp ubah}(h]h ]h"]h$]h&]uh1jhjV ubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jNhjubeh}(h]h ]h"]h$]h&]colsKuh1jhjubah}(h]h ]h"]h$]h&]uh1jhjXhhhhhNubjz)}(h9int lapb_data_received(void *token, struct sk_buff *skb);h]h9int lapb_data_received(void *token, struct sk_buff *skb);}hj sbah}(h]h ]h"]h$]h&]hhuh1jyhhhKhjXhhubh)}(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 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjXhhubj)}(hhh]j)}(hhh](j)}(hhh]h}(h]h ]h"]h$]h&]colwidthK uh1jhj ubj)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jhj ubjO)}(hhh](j)}(hhh](j)}(hhh]h)}(hLAPB_OKh]hLAPB_OK}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(hLAPB has accepted the data.h]hLAPB has accepted the data.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1j hj ubj)}(hhh](j)}(hhh]h)}(h LAPB_BADTOKENh]h LAPB_BADTOKEN}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(hInvalid/unknown LAPB token.h]hInvalid/unknown LAPB token.}(hj- hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj* 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&]colsKuh1jhj ubah}(h]h ]h"]h$]h&]uh1jhjXhhhhhNubeh}(h] functionsah ]h"] functionsah$]h&]uh1hhhhhhhhKkubh)}(hhh](h)}(h Callbacksh]h Callbacks}(hje hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjb hhhhhKubh)}(hThese 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]hThese 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 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjb hhubjz)}(h6void (*connect_confirmation)(void *token, int reason);h]h6void (*connect_confirmation)(void *token, int reason);}hj sbah}(h]h ]h"]h$]h&]hhuh1jyhhhKhjb hhubh)}(hThis 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]hThis 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 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjb hhubjz)}(h4void (*connect_indication)(void *token, int reason);h]h4void (*connect_indication)(void *token, int reason);}hj sbah}(h]h ]h"]h$]h&]hhuh1jyhhhKhjb hhubh)}(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 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjb hhubjz)}(h9void (*disconnect_confirmation)(void *token, int reason);h]h9void (*disconnect_confirmation)(void *token, int reason);}hj sbah}(h]h ]h"]h$]h&]hhuh1jyhhhKhjb hhubh)}(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 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjb hhubj)}(hhh]j)}(hhh](j)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jhj ubj)}(hhh]h}(h]h ]h"]h$]h&]colwidthK4uh1jhj ubjO)}(hhh](j)}(hhh](j)}(hhh]h)}(hLAPB_OKh]hLAPB_OK}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj 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 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1j hj ubj)}(hhh](j)}(hhh]h)}(hLAPB_NOTCONNECTEDh]hLAPB_NOTCONNECTED}(hj/ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj, 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 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjC ubah}(h]h ]h"]h$]h&]uh1jhj) ubeh}(h]h ]h"]h$]h&]uh1j hj ubj)}(hhh](j)}(hhh]h)}(h LAPB_TIMEDOUTh]h LAPB_TIMEDOUT}(hjf hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjc ubah}(h]h ]h"]h$]h&]uh1jhj` ubj)}(hhh]h)}(hdata 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 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM hjb hhubh)}(hThis 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]hThis 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 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM&hjb hhubjz)}(h8void (*data_transmit)(void *token, struct sk_buff *skb);h]h8void (*data_transmit)(void *token, struct sk_buff *skb);}hj sbah}(h]h ]h"]h$]h&]hhuh1jyhhhM,hjb hhubh)}(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 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM.hjb hhubeh}(h] callbacksah ]h"] callbacksah$]h&]uh1hhhhhhhhKubeh}(h]the-linux-lapb-module-interfaceah ]h"]the linux lapb module interfaceah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksjfootnote_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_handlerjJ error_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourcehnj _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}(j% j" jWjTjjjUjRj_ j\ j j u nametypes}(j% jWjjUj_ j uh}(j" hjTj%jjZjRjj\ jXj jb u 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.