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/cdc_mbimmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget'/translations/zh_TW/networking/cdc_mbimmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget'/translations/it_IT/networking/cdc_mbimmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget'/translations/ja_JP/networking/cdc_mbimmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget'/translations/ko_KR/networking/cdc_mbimmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget'/translations/sp_SP/networking/cdc_mbimmodnameN 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:spacepreserveuh1hhhhhhA/var/lib/git/docbuild/linux/Documentation/networking/cdc_mbim.rsthKubhsection)}(hhh](htitle)}(h6cdc_mbim - Driver for CDC MBIM Mobile Broadband modemsh]h6cdc_mbim - Driver for CDC MBIM Mobile Broadband modems}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(hXpThe cdc_mbim driver supports USB devices conforming to the "Universal Serial Bus Communications Class Subclass Specification for Mobile Broadband Interface Model" [1], which is a further development of "Universal Serial Bus Communications Class Subclass Specifications for Network Control Model Devices" [2] optimized for Mobile Broadband devices, aka "3G/LTE modems".h]hX|The cdc_mbim driver supports USB devices conforming to the “Universal Serial Bus Communications Class Subclass Specification for Mobile Broadband Interface Model” [1], which is a further development of “Universal Serial Bus Communications Class Subclass Specifications for Network Control Model Devices” [2] optimized for Mobile Broadband devices, aka “3G/LTE modems”.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(hCommand Line Parametersh]hCommand Line Parameters}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh)}(hThe cdc_mbim driver has no parameters of its own. But the probing behaviour for NCM 1.0 backwards compatible MBIM functions (an "NCM/MBIM function" as defined in section 3.2 of [1]) is affected by a cdc_ncm driver parameter:h]hThe cdc_mbim driver has no parameters of its own. But the probing behaviour for NCM 1.0 backwards compatible MBIM functions (an “NCM/MBIM function” as defined in section 3.2 of [1]) is affected by a cdc_ncm driver parameter:}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(h prefer_mbimh]h prefer_mbim}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh field_list)}(hhh](hfield)}(hhh](h field_name)}(hTypeh]hType}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhKubh field_body)}(hBooleanh]h)}(hj'h]hBoolean}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj%ubah}(h]h ]h"]h$]h&]uh1j#hjubeh}(h]h ]h"]h$]h&]uh1jhhhKhj hhubj)}(hhh](j)}(h Valid Rangeh]h Valid Range}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBhhhKubj$)}(h N/Y (0-1)h]h)}(hjUh]h N/Y (0-1)}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjSubah}(h]h ]h"]h$]h&]uh1j#hjBubeh}(h]h ]h"]h$]h&]uh1jhhhKhj hhubj)}(hhh](j)}(h Default Valueh]h Default Value}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjphhhKubj$)}(hY (MBIM is preferred) h]h)}(hY (MBIM is preferred)h]hY (MBIM is preferred)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j#hjpubeh}(h]h ]h"]h$]h&]uh1jhhhKhj hhubeh}(h]h ]h"]h$]h&]uh1j hhhhhhhKubh)}(hX0This parameter sets the system policy for NCM/MBIM functions. Such functions will be handled by either the cdc_ncm driver or the cdc_mbim driver depending on the prefer_mbim setting. Setting prefer_mbim=N makes the cdc_mbim driver ignore these functions and lets the cdc_ncm driver handle them instead.h]hX0This parameter sets the system policy for NCM/MBIM functions. Such functions will be handled by either the cdc_ncm driver or the cdc_mbim driver depending on the prefer_mbim setting. Setting prefer_mbim=N makes the cdc_mbim driver ignore these functions and lets the cdc_ncm driver handle them instead.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hThe parameter is writable, and can be changed at any time. A manual unbind/bind is required to make the change effective for NCM/MBIM functions bound to the "wrong" driverh]hThe parameter is writable, and can be changed at any time. A manual unbind/bind is required to make the change effective for NCM/MBIM functions bound to the “wrong” driver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK#hhhhubeh}(h] prefer-mbimah ]h"] prefer_mbimah$]h&]uh1hhhhhhhhKubeh}(h]command-line-parametersah ]h"]command line parametersah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h Basic usageh]h Basic usage}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK)ubh)}(hX$MBIM functions are inactive when unmanaged. The cdc_mbim driver only provides a userspace interface to the MBIM control channel, and will not participate in the management of the function. This implies that a userspace MBIM management application always is required to enable a MBIM function.h]hX$MBIM functions are inactive when unmanaged. The cdc_mbim driver only provides a userspace interface to the MBIM control channel, and will not participate in the management of the function. This implies that a userspace MBIM management application always is required to enable a MBIM function.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK+hjhhubh)}(h=Such userspace applications includes, but are not limited to:h]h=Such userspace applications includes, but are not limited to:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK1hjhhubh block_quote)}(hJ- mbimcli (included with the libmbim [3] library), and - ModemManager [4] h]h bullet_list)}(hhh](h list_item)}(h4mbimcli (included with the libmbim [3] library), andh]h)}(hj h]h4mbimcli (included with the libmbim [3] library), and}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK3hj ubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hModemManager [4] h]h)}(hModemManager [4]h]hModemManager [4]}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK4hj"ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]bullet-uh1jhhhK3hjubah}(h]h ]h"]h$]h&]uh1jhhhK3hjhhubh)}(h]Establishing a MBIM IP session requires at least these actions by the management application:h]h]Establishing a MBIM IP session requires at least these actions by the management application:}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK6hjhhubj)}(hq- open the control channel - configure network connection settings - connect to network - configure IP interface h]j)}(hhh](j )}(hopen the control channelh]h)}(hj_h]hopen the control channel}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK9hj]ubah}(h]h ]h"]h$]h&]uh1j hjZubj )}(h%configure network connection settingsh]h)}(hjvh]h%configure network connection settings}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK:hjtubah}(h]h ]h"]h$]h&]uh1j hjZubj )}(hconnect to networkh]h)}(hjh]hconnect to network}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK;hjubah}(h]h ]h"]h$]h&]uh1j hjZubj )}(hconfigure IP interface h]h)}(hconfigure IP interfaceh]hconfigure IP interface}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK userspace interfaces are described below. The MBIM control channel protocol is described in [1].h]hpThe driver <-> userspace interfaces are described below. The MBIM control channel protocol is described in [1].}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK@hjhhubeh}(h]"management-application-developmentah ]h"]"management application developmentah$]h&]uh1hhjhhhhhK?ubeh}(h] basic-usageah ]h"] basic usageah$]h&]uh1hhhhhhhhK)ubh)}(hhh](h)}(h"MBIM control channel userspace ABIh]h"MBIM control channel userspace ABI}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKEubh)}(hhh](h)}(h/dev/cdc-wdmX character deviceh]h/dev/cdc-wdmX character device}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKHubh)}(hThe driver creates a two-way pipe to the MBIM function control channel using the cdc-wdm driver as a subdriver. The userspace end of the control channel pipe is a /dev/cdc-wdmX character device.h]hThe driver creates a two-way pipe to the MBIM function control channel using the cdc-wdm driver as a subdriver. The userspace end of the control channel pipe is a /dev/cdc-wdmX character device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKIhjhhubh)}(hX The cdc_mbim driver does not process or police messages on the control channel. The channel is fully delegated to the userspace management application. It is therefore up to this application to ensure that it complies with all the control channel requirements in [1].h]hX The cdc_mbim driver does not process or police messages on the control channel. The channel is fully delegated to the userspace management application. It is therefore up to this application to ensure that it complies with all the control channel requirements in [1].}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKMhjhhubh)}(hThe cdc-wdmX device is created as a child of the MBIM control interface USB device. The character device associated with a specific MBIM function can be looked up using sysfs. For example::h]hThe cdc-wdmX device is created as a child of the MBIM control interface USB device. The character device associated with a specific MBIM function can be looked up using sysfs. For example:}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKRhjhhubh literal_block)}(hbjorn@nemi:~$ ls /sys/bus/usb/drivers/cdc_mbim/2-4:2.12/usbmisc cdc-wdm0 bjorn@nemi:~$ grep . /sys/bus/usb/drivers/cdc_mbim/2-4:2.12/usbmisc/cdc-wdm0/dev 180:0h]hbjorn@nemi:~$ ls /sys/bus/usb/drivers/cdc_mbim/2-4:2.12/usbmisc cdc-wdm0 bjorn@nemi:~$ grep . /sys/bus/usb/drivers/cdc_mbim/2-4:2.12/usbmisc/cdc-wdm0/dev 180:0}hjCsbah}(h]h ]h"]h$]h&]hhuh1jAhhhKVhjhhubeh}(h]dev-cdc-wdmx-character-deviceah ]h"]/dev/cdc-wdmx character deviceah$]h&]uh1hhjhhhhhKHubh)}(hhh](h)}(hUSB configuration descriptorsh]hUSB configuration descriptors}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYhhhhhK^ubh)}(hX&The wMaxControlMessage field of the CDC MBIM functional descriptor limits the maximum control message size. The management application is responsible for negotiating a control message size complying with the requirements in section 9.3.1 of [1], taking this descriptor field into consideration.h]hX&The wMaxControlMessage field of the CDC MBIM functional descriptor limits the maximum control message size. The management application is responsible for negotiating a control message size complying with the requirements in section 9.3.1 of [1], taking this descriptor field into consideration.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK_hjYhhubh)}(hThe userspace application can access the CDC MBIM functional descriptor of a MBIM function using either of the two USB configuration descriptor kernel interfaces described in [6] or [7].h]hThe userspace application can access the CDC MBIM functional descriptor of a MBIM function using either of the two USB configuration descriptor kernel interfaces described in [6] or [7].}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKehjYhhubh)}(h'See also the ioctl documentation below.h]h'See also the ioctl documentation below.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKihjYhhubeh}(h]usb-configuration-descriptorsah ]h"]usb configuration descriptorsah$]h&]uh1hhjhhhhhK^ubh)}(hhh](h)}(h Fragmentationh]h Fragmentation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKmubh)}(hThe userspace application is responsible for all control message fragmentation and defragmentaion, as described in section 9.5 of [1].h]hThe userspace application is responsible for all control message fragmentation and defragmentaion, as described in section 9.5 of [1].}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKnhjhhubeh}(h] fragmentationah ]h"] fragmentationah$]h&]uh1hhjhhhhhKmubh)}(hhh](h)}(h/dev/cdc-wdmX write()h]h/dev/cdc-wdmX write()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKsubh)}(hpThe MBIM control messages from the management application *must not* exceed the negotiated control message size.h](h:The MBIM control messages from the management application }(hjhhhNhNubhemphasis)}(h *must not*h]hmust not}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, exceed the negotiated control message size.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKthjhhubeh}(h]dev-cdc-wdmx-writeah ]h"]/dev/cdc-wdmx write()ah$]h&]uh1hhjhhhhhKsubh)}(hhh](h)}(h/dev/cdc-wdmX read()h]h/dev/cdc-wdmX read()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKyubh)}(hdThe management application *must* accept control messages of up the negotiated control message size.h](hThe management application }(hjhhhNhNubj)}(h*must*h]hmust}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhC accept control messages of up the negotiated control message size.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKzhjhhubeh}(h]dev-cdc-wdmx-readah ]h"]/dev/cdc-wdmx read()ah$]h&]uh1hhjhhhhhKyubh)}(hhh](h)}(h/dev/cdc-wdmX ioctl()h]h/dev/cdc-wdmX ioctl()}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hhhhhKubh)}(hIOCTL_WDM_MAX_COMMAND: Get Maximum Command Size This ioctl returns the wMaxControlMessage field of the CDC MBIM functional descriptor for MBIM devices. This is intended as a convenience, eliminating the need to parse the USB descriptors from userspace.h]hIOCTL_WDM_MAX_COMMAND: Get Maximum Command Size This ioctl returns the wMaxControlMessage field of the CDC MBIM functional descriptor for MBIM devices. This is intended as a convenience, eliminating the need to parse the USB descriptors from userspace.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj7hhubjB)}(hX6#include #include #include #include #include int main() { __u16 max; int fd = open("/dev/cdc-wdm0", O_RDWR); if (!ioctl(fd, IOCTL_WDM_MAX_COMMAND, &max)) printf("wMaxControlMessage is %d\n", max); }h]hX6#include #include #include #include #include int main() { __u16 max; int fd = open("/dev/cdc-wdm0", O_RDWR); if (!ioctl(fd, IOCTL_WDM_MAX_COMMAND, &max)) printf("wMaxControlMessage is %d\n", max); }}hjVsbah}(h]h ]h"]h$]h&]hhuh1jAhhhKhj7hhubeh}(h]dev-cdc-wdmx-ioctlah ]h"]/dev/cdc-wdmx ioctl()ah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hCustom device servicesh]hCustom device services}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhhhhhKubh)}(h|The MBIM specification allows vendors to freely define additional services. This is fully supported by the cdc_mbim driver.h]h|The MBIM specification allows vendors to freely define additional services. This is fully supported by the cdc_mbim driver.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjlhhubh)}(hSupport for new MBIM services, including vendor specified services, is implemented entirely in userspace, like the rest of the MBIM control protocolh]hSupport for new MBIM services, including vendor specified services, is implemented entirely in userspace, like the rest of the MBIM control protocol}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjlhhubh)}(h;New services should be registered in the MBIM Registry [5].h]h;New services should be registered in the MBIM Registry [5].}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjlhhubeh}(h]custom-device-servicesah ]h"]custom device servicesah$]h&]uh1hhjhhhhhKubeh}(h]"mbim-control-channel-userspace-abiah ]h"]"mbim control channel userspace abiah$]h&]uh1hhhhhhhhKEubh)}(hhh](h)}(hMBIM data channel userspace ABIh]hMBIM data channel userspace ABI}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hwwanY network deviceh]hwwanY network device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hThe cdc_mbim driver represents the MBIM data channel as a single network device of the "wwan" type. This network device is initially mapped to MBIM IP session 0.h]hThe cdc_mbim driver represents the MBIM data channel as a single network device of the “wwan” type. This network device is initially mapped to MBIM IP session 0.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]wwany-network-deviceah ]h"]wwany network deviceah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hMultiplexed IP sessions (IPS)h]hMultiplexed IP sessions (IPS)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hMBIM allows multiplexing up to 256 IP sessions over a single USB data channel. The cdc_mbim driver models such IP sessions as 802.1q VLAN subdevices of the master wwanY device, mapping MBIM IP session Z to VLAN ID Z for all values of Z greater than 0.h]hMBIM allows multiplexing up to 256 IP sessions over a single USB data channel. The cdc_mbim driver models such IP sessions as 802.1q VLAN subdevices of the master wwanY device, mapping MBIM IP session Z to VLAN ID Z for all values of Z greater than 0.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hhThe device maximum Z is given in the MBIM_DEVICE_CAPS_INFO structure described in section 10.5.1 of [1].h]hhThe device maximum Z is given in the MBIM_DEVICE_CAPS_INFO structure described in section 10.5.1 of [1].}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hThe userspace management application is responsible for adding new VLAN links prior to establishing MBIM IP sessions where the SessionId is greater than 0. These links can be added by using the normal VLAN kernel interfaces, either ioctl or netlink.h]hThe userspace management application is responsible for adding new VLAN links prior to establishing MBIM IP sessions where the SessionId is greater than 0. These links can be added by using the normal VLAN kernel interfaces, either ioctl or netlink.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hCFor example, adding a link for a MBIM IP session with SessionId 3::h]hBFor example, adding a link for a MBIM IP session with SessionId 3:}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubjB)}(h2ip link add link wwan0 name wwan0.3 type vlan id 3h]h2ip link add link wwan0 name wwan0.3 type vlan id 3}hj8sbah}(h]h ]h"]h$]h&]hhuh1jAhhhKhjhhubh)}(hTThe driver will automatically map the "wwan0.3" network device to MBIM IP session 3.h]hXThe driver will automatically map the “wwan0.3” network device to MBIM IP session 3.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]multiplexed-ip-sessions-ipsah ]h"]multiplexed ip sessions (ips)ah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hDevice Service Streams (DSS)h]hDevice Service Streams (DSS)}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\hhhhhKubh)}(hXMBIM also allows up to 256 non-IP data streams to be multiplexed over the same shared USB data channel. The cdc_mbim driver models these sessions as another set of 802.1q VLAN subdevices of the master wwanY device, mapping MBIM DSS session A to VLAN ID (256 + A) for all values of A.h]hXMBIM also allows up to 256 non-IP data streams to be multiplexed over the same shared USB data channel. The cdc_mbim driver models these sessions as another set of 802.1q VLAN subdevices of the master wwanY device, mapping MBIM DSS session A to VLAN ID (256 + A) for all values of A.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj\hhubh)}(hmThe device maximum A is given in the MBIM_DEVICE_SERVICES_INFO structure described in section 10.5.29 of [1].h]hmThe device maximum A is given in the MBIM_DEVICE_SERVICES_INFO structure described in section 10.5.29 of [1].}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj\hhubh)}(hXThe DSS VLAN subdevices are used as a practical interface between the shared MBIM data channel and a MBIM DSS aware userspace application. It is not intended to be presented as-is to an end user. The assumption is that a userspace application initiating a DSS session also takes care of the necessary framing of the DSS data, presenting the stream to the end user in an appropriate way for the stream type.h]hXThe DSS VLAN subdevices are used as a practical interface between the shared MBIM data channel and a MBIM DSS aware userspace application. It is not intended to be presented as-is to an end user. The assumption is that a userspace application initiating a DSS session also takes care of the necessary framing of the DSS data, presenting the stream to the end user in an appropriate way for the stream type.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj\hhubh)}(hThe network device ABI requires a dummy ethernet header for every DSS data frame being transported. The contents of this header is arbitrary, with the following exceptions:h]hThe network device ABI requires a dummy ethernet header for every DSS data frame being transported. The contents of this header is arbitrary, with the following exceptions:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj\hhubj)}(hX- TX frames using an IP protocol (0x0800 or 0x86dd) will be dropped - RX frames will have the protocol field set to ETH_P_802_3 (but will not be properly formatted 802.3 frames) - RX frames will have the destination address set to the hardware address of the master device h]j)}(hhh](j )}(hATX frames using an IP protocol (0x0800 or 0x86dd) will be droppedh]h)}(hjh]hATX frames using an IP protocol (0x0800 or 0x86dd) will be dropped}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hkRX frames will have the protocol field set to ETH_P_802_3 (but will not be properly formatted 802.3 frames)h]h)}(hkRX frames will have the protocol field set to ETH_P_802_3 (but will not be properly formatted 802.3 frames)h]hkRX frames will have the protocol field set to ETH_P_802_3 (but will not be properly formatted 802.3 frames)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(h]RX frames will have the destination address set to the hardware address of the master device h]h)}(h\RX frames will have the destination address set to the hardware address of the master deviceh]h\RX frames will have the destination address set to the hardware address of the master device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]j@jAuh1jhhhKhjubah}(h]h ]h"]h$]h&]uh1jhhhKhj\hhubh)}(hThe DSS supporting userspace management application is responsible for adding the dummy ethernet header on TX and stripping it on RX.h]hThe DSS supporting userspace management application is responsible for adding the dummy ethernet header on TX and stripping it on RX.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj\hhubh)}(hThis is a simple example using tools commonly available, exporting DssSessionId 5 as a pty character device pointed to by a /dev/nmea symlink::h]hThis is a simple example using tools commonly available, exporting DssSessionId 5 as a pty character device pointed to by a /dev/nmea symlink:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj\hhubjB)}(hip link add link wwan0 name wwan0.dss5 type vlan id 261 ip link set dev wwan0.dss5 up socat INTERFACE:wwan0.dss5,type=2 PTY:,echo=0,link=/dev/nmeah]hip link add link wwan0 name wwan0.dss5 type vlan id 261 ip link set dev wwan0.dss5 up socat INTERFACE:wwan0.dss5,type=2 PTY:,echo=0,link=/dev/nmea}hjsbah}(h]h ]h"]h$]h&]hhuh1jAhhhKhj\hhubh)}(hThis is only an example, most suitable for testing out a DSS service. Userspace applications supporting specific MBIM DSS services are expected to use the tools and programming interfaces required by that service.h]hThis is only an example, most suitable for testing out a DSS service. Userspace applications supporting specific MBIM DSS services are expected to use the tools and programming interfaces required by that service.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj\hhubh)}(hXNote that adding VLAN links for DSS sessions is entirely optional. A management application may instead choose to bind a packet socket directly to the master network device, using the received VLAN tags to map frames to the correct DSS session and adding 18 byte VLAN ethernet headers with the appropriate tag on TX. In this case using a socket filter is recommended, matching only the DSS VLAN subset. This avoid unnecessary copying of unrelated IP session data to userspace. For example::h]hXNote that adding VLAN links for DSS sessions is entirely optional. A management application may instead choose to bind a packet socket directly to the master network device, using the received VLAN tags to map frames to the correct DSS session and adding 18 byte VLAN ethernet headers with the appropriate tag on TX. In this case using a socket filter is recommended, matching only the DSS VLAN subset. This avoid unnecessary copying of unrelated IP session data to userspace. For example:}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj\hhubjB)}(hXstatic struct sock_filter dssfilter[] = { /* use special negative offsets to get VLAN tag */ BPF_STMT(BPF_LD|BPF_B|BPF_ABS, SKF_AD_OFF + SKF_AD_VLAN_TAG_PRESENT), BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, 1, 0, 6), /* true */ /* verify DSS VLAN range */ BPF_STMT(BPF_LD|BPF_H|BPF_ABS, SKF_AD_OFF + SKF_AD_VLAN_TAG), BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 256, 0, 4), /* 256 is first DSS VLAN */ BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 512, 3, 0), /* 511 is last DSS VLAN */ /* verify ethertype */ BPF_STMT(BPF_LD|BPF_H|BPF_ABS, 2 * ETH_ALEN), BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, ETH_P_802_3, 0, 1), BPF_STMT(BPF_RET|BPF_K, (u_int)-1), /* accept */ BPF_STMT(BPF_RET|BPF_K, 0), /* ignore */ };h]hXstatic struct sock_filter dssfilter[] = { /* use special negative offsets to get VLAN tag */ BPF_STMT(BPF_LD|BPF_B|BPF_ABS, SKF_AD_OFF + SKF_AD_VLAN_TAG_PRESENT), BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, 1, 0, 6), /* true */ /* verify DSS VLAN range */ BPF_STMT(BPF_LD|BPF_H|BPF_ABS, SKF_AD_OFF + SKF_AD_VLAN_TAG), BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 256, 0, 4), /* 256 is first DSS VLAN */ BPF_JUMP(BPF_JMP|BPF_JGE|BPF_K, 512, 3, 0), /* 511 is last DSS VLAN */ /* verify ethertype */ BPF_STMT(BPF_LD|BPF_H|BPF_ABS, 2 * ETH_ALEN), BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, ETH_P_802_3, 0, 1), BPF_STMT(BPF_RET|BPF_K, (u_int)-1), /* accept */ BPF_STMT(BPF_RET|BPF_K, 0), /* ignore */ };}hjEsbah}(h]h ]h"]h$]h&]hhuh1jAhhhKhj\hhubeh}(h]device-service-streams-dssah ]h"]device service streams (dss)ah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hTagged IP session 0 VLANh]hTagged IP session 0 VLAN}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hhhhhMubh)}(hAs described above, MBIM IP session 0 is treated as special by the driver. It is initially mapped to untagged frames on the wwanY network device.h]hAs described above, MBIM IP session 0 is treated as special by the driver. It is initially mapped to untagged frames on the wwanY network device.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj[hhubh)}(hoThis mapping implies a few restrictions on multiplexed IPS and DSS sessions, which may not always be practical:h]hoThis mapping implies a few restrictions on multiplexed IPS and DSS sessions, which may not always be practical:}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj[hhubj)}(h- no IPS or DSS session can use a frame size greater than the MTU on IP session 0 - no IPS or DSS session can be in the up state unless the network device representing IP session 0 also is up h]j)}(hhh](j )}(hOno IPS or DSS session can use a frame size greater than the MTU on IP session 0h]h)}(hOno IPS or DSS session can use a frame size greater than the MTU on IP session 0h]hOno IPS or DSS session can use a frame size greater than the MTU on IP session 0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hlno IPS or DSS session can be in the up state unless the network device representing IP session 0 also is up h]h)}(hkno IPS or DSS session can be in the up state unless the network device representing IP session 0 also is uph]hkno IPS or DSS session can be in the up state unless the network device representing IP session 0 also is up}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]j@jAuh1jhhhMhjubah}(h]h ]h"]h$]h&]uh1jhhhMhj[hhubh)}(hX^These problems can be avoided by optionally making the driver map IP session 0 to a VLAN subdevice, similar to all other IP sessions. This behaviour is triggered by adding a VLAN link for the magic VLAN ID 4094. The driver will then immediately start mapping MBIM IP session 0 to this VLAN, and will drop untagged frames on the master wwanY device.h]hX^These problems can be avoided by optionally making the driver map IP session 0 to a VLAN subdevice, similar to all other IP sessions. This behaviour is triggered by adding a VLAN link for the magic VLAN ID 4094. The driver will then immediately start mapping MBIM IP session 0 to this VLAN, and will drop untagged frames on the master wwanY device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj[hhubh)}(hTip: It might be less confusing to the end user to name this VLAN subdevice after the MBIM SessionID instead of the VLAN ID. For example::h]hTip: It might be less confusing to the end user to name this VLAN subdevice after the MBIM SessionID instead of the VLAN ID. For example:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM"hj[hhubjB)}(h5ip link add link wwan0 name wwan0.0 type vlan id 4094h]h5ip link add link wwan0 name wwan0.0 type vlan id 4094}hjsbah}(h]h ]h"]h$]h&]hhuh1jAhhhM&hj[hhubeh}(h]tagged-ip-session-0-vlanah ]h"]tagged ip session 0 vlanah$]h&]uh1hhjhhhhhMubh)}(hhh](h)}(h VLAN mappingh]h VLAN mapping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhM*ubh)}(hSummarizing the cdc_mbim driver mapping described above, we have this relationship between VLAN tags on the wwanY network device and MBIM sessions on the shared USB data channel::h]hSummarizing the cdc_mbim driver mapping described above, we have this relationship between VLAN tags on the wwanY network device and MBIM sessions on the shared USB data channel:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM,hjhhubjB)}(hX VLAN ID MBIM type MBIM SessionID Notes --------------------------------------------------------- untagged IPS 0 a) 1 - 255 IPS 1 - 255 256 - 511 DSS 0 - 255 512 - 4093 b) 4094 IPS 0 c) a) if no VLAN ID 4094 link exists, else dropped b) unsupported VLAN range, unconditionally dropped c) if a VLAN ID 4094 link exists, else droppedh]hX VLAN ID MBIM type MBIM SessionID Notes --------------------------------------------------------- untagged IPS 0 a) 1 - 255 IPS 1 - 255 256 - 511 DSS 0 - 255 512 - 4093 b) 4094 IPS 0 c) a) if no VLAN ID 4094 link exists, else dropped b) unsupported VLAN range, unconditionally dropped c) if a VLAN ID 4094 link exists, else dropped}hjsbah}(h]h ]h"]h$]h&]hhuh1jAhhhM0hjhhubeh}(h] vlan-mappingah ]h"] vlan mappingah$]h&]uh1hhjhhhhhM*ubeh}(h]mbim-data-channel-userspace-abiah ]h"]mbim data channel userspace abiah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h Referencesh]h References}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hhhhhM@ubj)}(hX~1) USB Implementers Forum, Inc. - "Universal Serial Bus Communications Class Subclass Specification for Mobile Broadband Interface Model", Revision 1.0 (Errata 1), May 1, 2013 - http://www.usb.org/developers/docs/devclass_docs/ 2) USB Implementers Forum, Inc. - "Universal Serial Bus Communications Class Subclass Specifications for Network Control Model Devices", Revision 1.0 (Errata 1), November 24, 2010 - http://www.usb.org/developers/docs/devclass_docs/ 3) libmbim - "a glib-based library for talking to WWAN modems and devices which speak the Mobile Interface Broadband Model (MBIM) protocol" - http://www.freedesktop.org/wiki/Software/libmbim/ 4) ModemManager - "a DBus-activated daemon which controls mobile broadband (2G/3G/4G) devices and connections" - http://www.freedesktop.org/wiki/Software/ModemManager/ 5) "MBIM (Mobile Broadband Interface Model) Registry" - http://compliance.usb.org/mbim/ 6) "/sys/kernel/debug/usb/devices output format" - Documentation/driver-api/usb/usb.rst 7) "/sys/bus/usb/devices/.../descriptors" - Documentation/ABI/stable/sysfs-bus-usbh]henumerated_list)}(hhh](j )}(hUSB Implementers Forum, Inc. - "Universal Serial Bus Communications Class Subclass Specification for Mobile Broadband Interface Model", Revision 1.0 (Errata 1), May 1, 2013 - http://www.usb.org/developers/docs/devclass_docs/ h](h)}(hUSB Implementers Forum, Inc. - "Universal Serial Bus Communications Class Subclass Specification for Mobile Broadband Interface Model", Revision 1.0 (Errata 1), May 1, 2013h]hUSB Implementers Forum, Inc. - “Universal Serial Bus Communications Class Subclass Specification for Mobile Broadband Interface Model”, Revision 1.0 (Errata 1), May 1, 2013}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMBhjTubj)}(h4- http://www.usb.org/developers/docs/devclass_docs/ h]j)}(hhh]j )}(h2http://www.usb.org/developers/docs/devclass_docs/ h]h)}(h1http://www.usb.org/developers/docs/devclass_docs/h]h reference)}(hjsh]h1http://www.usb.org/developers/docs/devclass_docs/}(hjwhhhNhNubah}(h]h ]h"]h$]h&]refurijsuh1juhjqubah}(h]h ]h"]h$]h&]uh1hhhhMFhjmubah}(h]h ]h"]h$]h&]uh1j hjjubah}(h]h ]h"]h$]h&]j@jAuh1jhhhMFhjfubah}(h]h ]h"]h$]h&]uh1jhhhMFhjTubeh}(h]h ]h"]h$]h&]uh1j hjQubj )}(hUSB Implementers Forum, Inc. - "Universal Serial Bus Communications Class Subclass Specifications for Network Control Model Devices", Revision 1.0 (Errata 1), November 24, 2010 - http://www.usb.org/developers/docs/devclass_docs/ h](h)}(hUSB Implementers Forum, Inc. - "Universal Serial Bus Communications Class Subclass Specifications for Network Control Model Devices", Revision 1.0 (Errata 1), November 24, 2010h]hUSB Implementers Forum, Inc. - “Universal Serial Bus Communications Class Subclass Specifications for Network Control Model Devices”, Revision 1.0 (Errata 1), November 24, 2010}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMHhjubj)}(h4- http://www.usb.org/developers/docs/devclass_docs/ h]j)}(hhh]j )}(h2http://www.usb.org/developers/docs/devclass_docs/ h]h)}(h1http://www.usb.org/developers/docs/devclass_docs/h]jv)}(hjh]h1http://www.usb.org/developers/docs/devclass_docs/}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurijuh1juhjubah}(h]h ]h"]h$]h&]uh1hhhhMLhjubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]j@jAuh1jhhhMLhjubah}(h]h ]h"]h$]h&]uh1jhhhMLhjubeh}(h]h ]h"]h$]h&]uh1j hjQubj )}(hlibmbim - "a glib-based library for talking to WWAN modems and devices which speak the Mobile Interface Broadband Model (MBIM) protocol" - http://www.freedesktop.org/wiki/Software/libmbim/ h](h)}(hlibmbim - "a glib-based library for talking to WWAN modems and devices which speak the Mobile Interface Broadband Model (MBIM) protocol"h]hlibmbim - “a glib-based library for talking to WWAN modems and devices which speak the Mobile Interface Broadband Model (MBIM) protocol”}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMNhjubj)}(h4- http://www.freedesktop.org/wiki/Software/libmbim/ h]j)}(hhh]j )}(h2http://www.freedesktop.org/wiki/Software/libmbim/ h]h)}(h1http://www.freedesktop.org/wiki/Software/libmbim/h]jv)}(hjh]h1http://www.freedesktop.org/wiki/Software/libmbim/}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurijuh1juhj ubah}(h]h ]h"]h$]h&]uh1hhhhMRhj ubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]j@jAuh1jhhhMRhjubah}(h]h ]h"]h$]h&]uh1jhhhMRhjubeh}(h]h ]h"]h$]h&]uh1j hjQubj )}(hModemManager - "a DBus-activated daemon which controls mobile broadband (2G/3G/4G) devices and connections" - http://www.freedesktop.org/wiki/Software/ModemManager/ h](h)}(hkModemManager - "a DBus-activated daemon which controls mobile broadband (2G/3G/4G) devices and connections"h]hoModemManager - “a DBus-activated daemon which controls mobile broadband (2G/3G/4G) devices and connections”}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMThj=ubj)}(h9- http://www.freedesktop.org/wiki/Software/ModemManager/ h]j)}(hhh]j )}(h7http://www.freedesktop.org/wiki/Software/ModemManager/ h]h)}(h6http://www.freedesktop.org/wiki/Software/ModemManager/h]jv)}(hj\h]h6http://www.freedesktop.org/wiki/Software/ModemManager/}(hj^hhhNhNubah}(h]h ]h"]h$]h&]refurij\uh1juhjZubah}(h]h ]h"]h$]h&]uh1hhhhMWhjVubah}(h]h ]h"]h$]h&]uh1j hjSubah}(h]h ]h"]h$]h&]j@jAuh1jhhhMWhjOubah}(h]h ]h"]h$]h&]uh1jhhhMWhj=ubeh}(h]h ]h"]h$]h&]uh1j hjQubj )}(hY"MBIM (Mobile Broadband Interface Model) Registry" - http://compliance.usb.org/mbim/ h](h)}(h2"MBIM (Mobile Broadband Interface Model) Registry"h]h6“MBIM (Mobile Broadband Interface Model) Registry”}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMYhjubj)}(h"- http://compliance.usb.org/mbim/ h]j)}(hhh]j )}(h http://compliance.usb.org/mbim/ h]h)}(hhttp://compliance.usb.org/mbim/h]jv)}(hjh]hhttp://compliance.usb.org/mbim/}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurijuh1juhjubah}(h]h ]h"]h$]h&]uh1hhhhM[hjubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]j@jAuh1jhhhM[hjubah}(h]h ]h"]h$]h&]uh1jhhhM[hjubeh}(h]h ]h"]h$]h&]uh1j hjQubj )}(hY"/sys/kernel/debug/usb/devices output format" - Documentation/driver-api/usb/usb.rst h](h)}(h-"/sys/kernel/debug/usb/devices output format"h]h1“/sys/kernel/debug/usb/devices output format”}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM]hjubj)}(h'- Documentation/driver-api/usb/usb.rst h]j)}(hhh]j )}(h%Documentation/driver-api/usb/usb.rst h]h)}(h$Documentation/driver-api/usb/usb.rsth]h$Documentation/driver-api/usb/usb.rst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM_hjubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]j@jAuh1jhhhM_hjubah}(h]h ]h"]h$]h&]uh1jhhhM_hjubeh}(h]h ]h"]h$]h&]uh1j hjQubj )}(hS"/sys/bus/usb/devices/.../descriptors" - Documentation/ABI/stable/sysfs-bus-usbh](h)}(h&"/sys/bus/usb/devices/.../descriptors"h]h*“/sys/bus/usb/devices/.../descriptors”}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMahj ubj)}(h(- Documentation/ABI/stable/sysfs-bus-usbh]j)}(hhh]j )}(h&Documentation/ABI/stable/sysfs-bus-usbh]h)}(hj5 h]h&Documentation/ABI/stable/sysfs-bus-usb}(hj7 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMchj3 ubah}(h]h ]h"]h$]h&]uh1j hj0 ubah}(h]h ]h"]h$]h&]j@jAuh1jhhhMchj, ubah}(h]h ]h"]h$]h&]uh1jhhhMchj ubeh}(h]h ]h"]h$]h&]uh1j hjQubeh}(h]h ]h"]h$]h&]enumtypearabicprefixhsuffix)uh1jOhjKubah}(h]h ]h"]h$]h&]uh1jhhhMBhj:hhubeh}(h] referencesah ]h"] referencesah$]h&]uh1hhhhhhhhM@ubeh}(h]4cdc-mbim-driver-for-cdc-mbim-mobile-broadband-modemsah ]h"]6cdc_mbim - driver for cdc mbim mobile broadband modemsah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_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_handlerj error_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}(jz jw jjjjjjjjjjjVjSjjjjjjj4j1jijfjjj7j4jjjYjVjXjUjjj/j,jr jo u nametypes}(jz jjjjjjVjjjj4jijj7jjYjXjj/jr uh}(jw hjhjhjjjjjjjSjjjYjjjjj1jjfj7jjlj4jjjjVjjUj\jj[j,jjo j: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.