€•²ÞŒ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/udplite”Œ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/udplite”Œ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/udplite”Œ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/udplite”Œ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/udplite”Œ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/udplite”Œ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/udplite”Œ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³Œ@/var/lib/git/docbuild/linux/Documentation/networking/udplite.rst”h´KubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒ The UDP-Lite protocol (RFC 3828)”h]”hŒ The UDP-Lite protocol (RFC 3828)”…”�”}”(hhÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhÊh²hh³hÇh´KubhŒ block_quote”“”)�”}”(hX¦UDP-Lite is a Standards-Track IETF transport protocol whose characteristic is a variable-length checksum. This has advantages for transport of multimedia (video, VoIP) over wireless networks, as partly damaged packets can still be fed into the codec instead of being discarded due to a failed checksum test. This file briefly describes the existing kernel support and the socket API. For in-depth information, you can consult: - The UDP-Lite Homepage: http://web.archive.org/web/%2E/http://www.erg.abdn.ac.uk/users/gerrit/udp-lite/ From here you can also download some example application source code. - The UDP-Lite HOWTO on http://web.archive.org/web/%2E/http://www.erg.abdn.ac.uk/users/gerrit/udp-lite/files/UDP-Lite-HOWTO.txt - The Wireshark UDP-Lite WiKi (with capture files): https://wiki.wireshark.org/Lightweight_User_Datagram_Protocol - The Protocol Spec, RFC 3828, http://www.ietf.org/rfc/rfc3828.txt ”h]”(hŒ paragraph”“”)�”}”(hX3UDP-Lite is a Standards-Track IETF transport protocol whose characteristic is a variable-length checksum. This has advantages for transport of multimedia (video, VoIP) over wireless networks, as partly damaged packets can still be fed into the codec instead of being discarded due to a failed checksum test.”h]”hX3UDP-Lite is a Standards-Track IETF transport protocol whose characteristic is a variable-length checksum. This has advantages for transport of multimedia (video, VoIP) over wireless networks, as partly damaged packets can still be fed into the codec instead of being discarded due to a failed checksum test.”…”�”}”(hhåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´Khhßubhä)�”}”(hŒvThis file briefly describes the existing kernel support and the socket API. For in-depth information, you can consult:”h]”hŒvThis file briefly describes the existing kernel support and the socket API. For in-depth information, you can consult:”…”�”}”(hhóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´K hhßubhÞ)�”}”(hXñ- The UDP-Lite Homepage: http://web.archive.org/web/%2E/http://www.erg.abdn.ac.uk/users/gerrit/udp-lite/ From here you can also download some example application source code. - The UDP-Lite HOWTO on http://web.archive.org/web/%2E/http://www.erg.abdn.ac.uk/users/gerrit/udp-lite/files/UDP-Lite-HOWTO.txt - The Wireshark UDP-Lite WiKi (with capture files): https://wiki.wireshark.org/Lightweight_User_Datagram_Protocol - The Protocol Spec, RFC 3828, http://www.ietf.org/rfc/rfc3828.txt ”h]”hŒ bullet_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hŒ®The UDP-Lite Homepage: http://web.archive.org/web/%2E/http://www.erg.abdn.ac.uk/users/gerrit/udp-lite/ From here you can also download some example application source code. ”h]”(hä)�”}”(hŒfThe UDP-Lite Homepage: http://web.archive.org/web/%2E/http://www.erg.abdn.ac.uk/users/gerrit/udp-lite/”h]”(hŒThe UDP-Lite Homepage: ”…”�”}”(hjh²hh³Nh´NubhŒ reference”“”)�”}”(hŒOhttp://web.archive.org/web/%2E/http://www.erg.abdn.ac.uk/users/gerrit/udp-lite/”h]”hŒOhttp://web.archive.org/web/%2E/http://www.erg.abdn.ac.uk/users/gerrit/udp-lite/”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”juh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´Khj ubhä)�”}”(hŒEFrom here you can also download some example application source code.”h]”hŒEFrom here you can also download some example application source code.”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´Khj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjubj )�”}”(hŒ~The UDP-Lite HOWTO on http://web.archive.org/web/%2E/http://www.erg.abdn.ac.uk/users/gerrit/udp-lite/files/UDP-Lite-HOWTO.txt ”h]”hä)�”}”(hŒ}The UDP-Lite HOWTO on http://web.archive.org/web/%2E/http://www.erg.abdn.ac.uk/users/gerrit/udp-lite/files/UDP-Lite-HOWTO.txt”h]”(hŒThe UDP-Lite HOWTO on ”…”�”}”(hjGh²hh³Nh´Nubj)�”}”(hŒghttp://web.archive.org/web/%2E/http://www.erg.abdn.ac.uk/users/gerrit/udp-lite/files/UDP-Lite-HOWTO.txt”h]”hŒghttp://web.archive.org/web/%2E/http://www.erg.abdn.ac.uk/users/gerrit/udp-lite/files/UDP-Lite-HOWTO.txt”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”jQuh1jhjGubeh}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´KhjCubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjubj )�”}”(hŒpThe Wireshark UDP-Lite WiKi (with capture files): https://wiki.wireshark.org/Lightweight_User_Datagram_Protocol ”h]”hä)�”}”(hŒoThe Wireshark UDP-Lite WiKi (with capture files): https://wiki.wireshark.org/Lightweight_User_Datagram_Protocol”h]”(hŒ2The Wireshark UDP-Lite WiKi (with capture files): ”…”�”}”(hjnh²hh³Nh´Nubj)�”}”(hŒ=https://wiki.wireshark.org/Lightweight_User_Datagram_Protocol”h]”hŒ=https://wiki.wireshark.org/Lightweight_User_Datagram_Protocol”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”jxuh1jhjnubeh}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´Khjjubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjubj )�”}”(hŒBThe Protocol Spec, RFC 3828, http://www.ietf.org/rfc/rfc3828.txt ”h]”hä)�”}”(hŒ@The Protocol Spec, RFC 3828, http://www.ietf.org/rfc/rfc3828.txt”h]”(hŒThe Protocol Spec, RFC 3828, ”…”�”}”(hj•h²hh³Nh´Nubj)�”}”(hŒ#http://www.ietf.org/rfc/rfc3828.txt”h]”hŒ#http://www.ietf.org/rfc/rfc3828.txt”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”jŸuh1jhj•ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´Khj‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1jh³hÇh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khhßubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhhÊh²hubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ1. Applications”h]”hŒ1. Applications”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjÌh²hh³hÇh´KubhÞ)�”}”(hXdSeveral applications have been ported successfully to UDP-Lite. Ethereal (now called wireshark) has UDP-Litev4/v6 support by default. Porting applications to UDP-Lite is straightforward: only socket level and IPPROTO need to be changed; senders additionally set the checksum coverage length (default = header length = 8). Details are in the next section. ”h]”(hä)�”}”(hŒ…Several applications have been ported successfully to UDP-Lite. Ethereal (now called wireshark) has UDP-Litev4/v6 support by default.”h]”hŒ…Several applications have been ported successfully to UDP-Lite. Ethereal (now called wireshark) has UDP-Litev4/v6 support by default.”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´K!hjÝubhä)�”}”(hŒÜPorting applications to UDP-Lite is straightforward: only socket level and IPPROTO need to be changed; senders additionally set the checksum coverage length (default = header length = 8). Details are in the next section.”h]”hŒÜPorting applications to UDP-Lite is straightforward: only socket level and IPPROTO need to be changed; senders additionally set the checksum coverage length (default = header length = 8). Details are in the next section.”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´K$hjÝubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K!hjÌh²hubeh}”(h]”Œ applications”ah ]”h"]”Œ1. applications”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ2. Programming API”h]”hŒ2. Programming API”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj h²hh³hÇh´K)ubhÞ)�”}”(hXUDP-Lite provides a connectionless, unreliable datagram service and hence uses the same socket type as UDP. In fact, porting from UDP to UDP-Lite is very easy: simply add ``IPPROTO_UDPLITE`` as the last argument of the socket(2) call so that the statement looks like:: s = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDPLITE); or, respectively, :: s = socket(PF_INET6, SOCK_DGRAM, IPPROTO_UDPLITE); With just the above change you are able to run UDP-Lite services or connect to UDP-Lite servers. The kernel will assume that you are not interested in using partial checksum coverage and so emulate UDP mode (full coverage). To make use of the partial checksum coverage facilities requires setting a single socket option, which takes an integer specifying the coverage length: * Sender checksum coverage: UDPLITE_SEND_CSCOV For example:: int val = 20; setsockopt(s, SOL_UDPLITE, UDPLITE_SEND_CSCOV, &val, sizeof(int)); sets the checksum coverage length to 20 bytes (12b data + 8b header). Of each packet only the first 20 bytes (plus the pseudo-header) will be checksummed. This is useful for RTP applications which have a 12-byte base header. * Receiver checksum coverage: UDPLITE_RECV_CSCOV This option is the receiver-side analogue. It is truly optional, i.e. not required to enable traffic with partial checksum coverage. Its function is that of a traffic filter: when enabled, it instructs the kernel to drop all packets which have a coverage _less_ than this value. For example, if RTP and UDP headers are to be protected, a receiver can enforce that only packets with a minimum coverage of 20 are admitted:: int min = 20; setsockopt(s, SOL_UDPLITE, UDPLITE_RECV_CSCOV, &min, sizeof(int)); The calls to getsockopt(2) are analogous. Being an extension and not a stand- alone protocol, all socket options known from UDP can be used in exactly the same manner as before, e.g. UDP_CORK or UDP_ENCAP. A detailed discussion of UDP-Lite checksum coverage options is in section IV. ”h]”(hä)�”}”(hX UDP-Lite provides a connectionless, unreliable datagram service and hence uses the same socket type as UDP. In fact, porting from UDP to UDP-Lite is very easy: simply add ``IPPROTO_UDPLITE`` as the last argument of the socket(2) call so that the statement looks like::”h]”(hŒ«UDP-Lite provides a connectionless, unreliable datagram service and hence uses the same socket type as UDP. In fact, porting from UDP to UDP-Lite is very easy: simply add ”…”�”}”(hj h²hh³Nh´NubhŒliteral”“”)�”}”(hŒ``IPPROTO_UDPLITE``”h]”hŒIPPROTO_UDPLITE”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j(hj ubhŒM as the last argument of the socket(2) call so that the statement looks like:”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´K+hjubhŒ literal_block”“”)�”}”(hŒ1s = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDPLITE);”h]”hŒ1s = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDPLITE);”…”�”}”hjDsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jBh³hÇh´K0hjubhä)�”}”(hŒor, respectively,”h]”hŒor, respectively,”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´K2hjubjC)�”}”(hŒ2s = socket(PF_INET6, SOCK_DGRAM, IPPROTO_UDPLITE);”h]”hŒ2s = socket(PF_INET6, SOCK_DGRAM, IPPROTO_UDPLITE);”…”�”}”hj`sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jBh³hÇh´K6hjubhä)�”}”(hŒßWith just the above change you are able to run UDP-Lite services or connect to UDP-Lite servers. The kernel will assume that you are not interested in using partial checksum coverage and so emulate UDP mode (full coverage).”h]”hŒßWith just the above change you are able to run UDP-Lite services or connect to UDP-Lite servers. The kernel will assume that you are not interested in using partial checksum coverage and so emulate UDP mode (full coverage).”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´K8hjubhä)�”}”(hŒ—To make use of the partial checksum coverage facilities requires setting a single socket option, which takes an integer specifying the coverage length:”h]”hŒ—To make use of the partial checksum coverage facilities requires setting a single socket option, which takes an integer specifying the coverage length:”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´Kh²hh³hÇh´K_ubhÞ)�”}”(hXThe socket API requires support through header files in /usr/include: * /usr/include/netinet/in.h to define IPPROTO_UDPLITE * /usr/include/netinet/udplite.h for UDP-Lite header fields and protocol constants For testing purposes, the following can serve as a ``mini`` header file:: #define IPPROTO_UDPLITE 136 #define SOL_UDPLITE 136 #define UDPLITE_SEND_CSCOV 10 #define UDPLITE_RECV_CSCOV 11 Ready-made header files for various distros are in the UDP-Lite tarball. ”h]”(hä)�”}”(hŒEThe socket API requires support through header files in /usr/include:”h]”hŒEThe socket API requires support through header files in /usr/include:”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´KahjOubhÞ)�”}”(hŒŽ* /usr/include/netinet/in.h to define IPPROTO_UDPLITE * /usr/include/netinet/udplite.h for UDP-Lite header fields and protocol constants ”h]”j)�”}”(hhh]”(j )�”}”(hŒ4/usr/include/netinet/in.h to define IPPROTO_UDPLITE ”h]”hä)�”}”(hŒ3/usr/include/netinet/in.h to define IPPROTO_UDPLITE”h]”hŒ3/usr/include/netinet/in.h to define IPPROTO_UDPLITE”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´Kchjhubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjeubj )�”}”(hŒQ/usr/include/netinet/udplite.h for UDP-Lite header fields and protocol constants ”h]”hä)�”}”(hŒP/usr/include/netinet/udplite.h for UDP-Lite header fields and protocol constants”h]”hŒP/usr/include/netinet/udplite.h for UDP-Lite header fields and protocol constants”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´Kfhj€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjeubeh}”(h]”h ]”h"]”h$]”h&]”j¾j uh1jh³hÇh´Kchjaubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KchjOubhä)�”}”(hŒIFor testing purposes, the following can serve as a ``mini`` header file::”h]”(hŒ3For testing purposes, the following can serve as a ”…”�”}”(hj¤h²hh³Nh´Nubj))�”}”(hŒ``mini``”h]”hŒmini”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j(hj¤ubhŒ header file:”…”�”}”(hj¤h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´KihjOubjC)�”}”(hŒ‡#define IPPROTO_UDPLITE 136 #define SOL_UDPLITE 136 #define UDPLITE_SEND_CSCOV 10 #define UDPLITE_RECV_CSCOV 11”h]”hŒ‡#define IPPROTO_UDPLITE 136 #define SOL_UDPLITE 136 #define UDPLITE_SEND_CSCOV 10 #define UDPLITE_RECV_CSCOV 11”…”�”}”hjÄsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jBh³hÇh´KkhjOubhä)�”}”(hŒHReady-made header files for various distros are in the UDP-Lite tarball.”h]”hŒHReady-made header files for various distros are in the UDP-Lite tarball.”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´KphjOubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kahj>h²hubeh}”(h]”Œ header-files”ah ]”h"]”Œ3. header files”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K_ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ>4. Kernel Behaviour with Regards to the Various Socket Options”h]”hŒ>4. Kernel Behaviour with Regards to the Various Socket Options”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjîh²hh³hÇh´KsubhÞ)�”}”(hX¯To enable debugging messages, the log level need to be set to 8, as most messages use the KERN_DEBUG level (7). 1) Sender Socket Options If the sender specifies a value of 0 as coverage length, the module assumes full coverage, transmits a packet with coverage length of 0 and according checksum. If the sender specifies a coverage < 8 and different from 0, the kernel assumes 8 as default value. Finally, if the specified coverage length exceeds the packet length, the packet length is used instead as coverage length. 2) Receiver Socket Options The receiver specifies the minimum value of the coverage length it is willing to accept. A value of 0 here indicates that the receiver always wants the whole of the packet covered. In this case, all partially covered packets are dropped and an error is logged. It is not possible to specify illegal values (<0 and <8); in these cases the default of 8 is assumed. All packets arriving with a coverage value less than the specified threshold are discarded, these events are also logged. 3) Disabling the Checksum Computation On both sender and receiver, checksumming will always be performed and cannot be disabled using SO_NO_CHECK. Thus:: setsockopt(sockfd, SOL_SOCKET, SO_NO_CHECK, ... ); will always will be ignored, while the value of:: getsockopt(sockfd, SOL_SOCKET, SO_NO_CHECK, &value, ...); is meaningless (as in TCP). Packets with a zero checksum field are illegal (cf. RFC 3828, sec. 3.1) and will be silently discarded. 4) Fragmentation The checksum computation respects both buffersize and MTU. The size of UDP-Lite packets is determined by the size of the send buffer. The minimum size of the send buffer is 2048 (defined as SOCK_MIN_SNDBUF in include/net/sock.h), the default value is configurable as net.core.wmem_default or via setting the SO_SNDBUF socket(7) option. The maximum upper bound for the send buffer is determined by net.core.wmem_max. Given a payload size larger than the send buffer size, UDP-Lite will split the payload into several individual packets, filling up the send buffer size in each case. The precise value also depends on the interface MTU. The interface MTU, in turn, may trigger IP fragmentation. In this case, the generated UDP-Lite packet is split into several IP packets, of which only the first one contains the L4 header. The send buffer size has implications on the checksum coverage length. Consider the following example:: Payload: 1536 bytes Send Buffer: 1024 bytes MTU: 1500 bytes Coverage Length: 856 bytes UDP-Lite will ship the 1536 bytes in two separate packets:: Packet 1: 1024 payload + 8 byte header + 20 byte IP header = 1052 bytes Packet 2: 512 payload + 8 byte header + 20 byte IP header = 540 bytes The coverage packet covers the UDP-Lite header and 848 bytes of the payload in the first packet, the second packet is fully covered. Note that for the second packet, the coverage length exceeds the packet length. The kernel always re-adjusts the coverage length to the packet length in such cases. As an example of what happens when one UDP-Lite packet is split into several tiny fragments, consider the following example:: Payload: 1024 bytes Send buffer size: 1024 bytes MTU: 300 bytes Coverage length: 575 bytes +-+-----------+--------------+--------------+--------------+ |8| 272 | 280 | 280 | 280 | +-+-----------+--------------+--------------+--------------+ 280 560 840 1032 ^ *****checksum coverage************* The UDP-Lite module generates one 1032 byte packet (1024 + 8 byte header). According to the interface MTU, these are split into 4 IP packets (280 byte IP payload + 20 byte IP header). The kernel module sums the contents of the entire first two packets, plus 15 bytes of the last packet before releasing the fragments to the IP module. To see the analogous case for IPv6 fragmentation, consider a link MTU of 1280 bytes and a write buffer of 3356 bytes. If the checksum coverage is less than 1232 bytes (MTU minus IPv6/fragment header lengths), only the first fragment needs to be considered. When using larger checksum coverage lengths, each eligible fragment needs to be checksummed. Suppose we have a checksum coverage of 3062. The buffer of 3356 bytes will be split into the following fragments:: Fragment 1: 1280 bytes carrying 1232 bytes of UDP-Lite data Fragment 2: 1280 bytes carrying 1232 bytes of UDP-Lite data Fragment 3: 948 bytes carrying 900 bytes of UDP-Lite data The first two fragments have to be checksummed in full, of the last fragment only 598 (= 3062 - 2*1232) bytes are checksummed. While it is important that such cases are dealt with correctly, they are (annoyingly) rare: UDP-Lite is designed for optimising multimedia performance over wireless (or generally noisy) links and thus smaller coverage lengths are likely to be expected. ”h]”(hä)�”}”(hŒoTo enable debugging messages, the log level need to be set to 8, as most messages use the KERN_DEBUG level (7).”h]”hŒoTo enable debugging messages, the log level need to be set to 8, as most messages use the KERN_DEBUG level (7).”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´KvhjÿubhŒenumerated_list”“”)�”}”(hhh]”j )�”}”(hŒSender Socket Options ”h]”hä)�”}”(hŒSender Socket Options”h]”hŒSender Socket Options”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´Kyhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjubah}”(h]”h ]”h"]”h$]”h&]”Œenumtype”Œarabic”Œprefix”hŒsuffix”Œ)”uh1jhjÿubhä)�”}”(hX€If the sender specifies a value of 0 as coverage length, the module assumes full coverage, transmits a packet with coverage length of 0 and according checksum. If the sender specifies a coverage < 8 and different from 0, the kernel assumes 8 as default value. Finally, if the specified coverage length exceeds the packet length, the packet length is used instead as coverage length.”h]”hX€If the sender specifies a value of 0 as coverage length, the module assumes full coverage, transmits a packet with coverage length of 0 and according checksum. If the sender specifies a coverage < 8 and different from 0, the kernel assumes 8 as default value. Finally, if the specified coverage length exceeds the packet length, the packet length is used instead as coverage length.”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´K{hjÿubj)�”}”(hhh]”j )�”}”(hŒReceiver Socket Options ”h]”hä)�”}”(hŒReceiver Socket Options”h]”hŒReceiver Socket Options”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´K‚hjJubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjGubah}”(h]”h ]”h"]”h$]”h&]”j4j5j6hj7j8Œstart”Kuh1jhjÿubhä)�”}”(hXThe receiver specifies the minimum value of the coverage length it is willing to accept. A value of 0 here indicates that the receiver always wants the whole of the packet covered. In this case, all partially covered packets are dropped and an error is logged.”h]”hXThe receiver specifies the minimum value of the coverage length it is willing to accept. A value of 0 here indicates that the receiver always wants the whole of the packet covered. In this case, all partially covered packets are dropped and an error is logged.”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´K„hjÿubhä)�”}”(hŒeIt is not possible to specify illegal values (<0 and <8); in these cases the default of 8 is assumed.”h]”hŒeIt is not possible to specify illegal values (<0 and <8); in these cases the default of 8 is assumed.”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´K‰hjÿubhä)�”}”(hŒyAll packets arriving with a coverage value less than the specified threshold are discarded, these events are also logged.”h]”hŒyAll packets arriving with a coverage value less than the specified threshold are discarded, these events are also logged.”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´KŒhjÿubj)�”}”(hhh]”j )�”}”(hŒ#Disabling the Checksum Computation ”h]”hä)�”}”(hŒ"Disabling the Checksum Computation”h]”hŒ"Disabling the Checksum Computation”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´K�hj–ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj“ubah}”(h]”h ]”h"]”h$]”h&]”j4j5j6hj7j8jhKuh1jhjÿubhä)�”}”(hŒsOn both sender and receiver, checksumming will always be performed and cannot be disabled using SO_NO_CHECK. Thus::”h]”hŒrOn both sender and receiver, checksumming will always be performed and cannot be disabled using SO_NO_CHECK. Thus:”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´K‘hjÿubjC)�”}”(hŒ3setsockopt(sockfd, SOL_SOCKET, SO_NO_CHECK, ... );”h]”hŒ3setsockopt(sockfd, SOL_SOCKET, SO_NO_CHECK, ... );”…”�”}”hjÂsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jBh³hÇh´K”hjÿubhä)�”}”(hŒ1will always will be ignored, while the value of::”h]”hŒ0will always will be ignored, while the value of:”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´K–hjÿubjC)�”}”(hŒ9getsockopt(sockfd, SOL_SOCKET, SO_NO_CHECK, &value, ...);”h]”hŒ9getsockopt(sockfd, SOL_SOCKET, SO_NO_CHECK, &value, ...);”…”�”}”hjÞsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jBh³hÇh´K˜hjÿubhä)�”}”(hŒƒis meaningless (as in TCP). Packets with a zero checksum field are illegal (cf. RFC 3828, sec. 3.1) and will be silently discarded.”h]”hŒƒis meaningless (as in TCP). Packets with a zero checksum field are illegal (cf. RFC 3828, sec. 3.1) and will be silently discarded.”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´Kšhjÿubj)�”}”(hhh]”j )�”}”(hŒFragmentation ”h]”hä)�”}”(hŒ Fragmentation”h]”hŒ Fragmentation”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´K�hjýubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjúubah}”(h]”h ]”h"]”h$]”h&]”j4j5j6hj7j8jhKuh1jhjÿubhä)�”}”(hXŸThe checksum computation respects both buffersize and MTU. The size of UDP-Lite packets is determined by the size of the send buffer. The minimum size of the send buffer is 2048 (defined as SOCK_MIN_SNDBUF in include/net/sock.h), the default value is configurable as net.core.wmem_default or via setting the SO_SNDBUF socket(7) option. The maximum upper bound for the send buffer is determined by net.core.wmem_max.”h]”hXŸThe checksum computation respects both buffersize and MTU. The size of UDP-Lite packets is determined by the size of the send buffer. The minimum size of the send buffer is 2048 (defined as SOCK_MIN_SNDBUF in include/net/sock.h), the default value is configurable as net.core.wmem_default or via setting the SO_SNDBUF socket(7) option. The maximum upper bound for the send buffer is determined by net.core.wmem_max.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´KŸhjÿubhä)�”}”(hŒ¥Given a payload size larger than the send buffer size, UDP-Lite will split the payload into several individual packets, filling up the send buffer size in each case.”h]”hŒ¥Given a payload size larger than the send buffer size, UDP-Lite will split the payload into several individual packets, filling up the send buffer size in each case.”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´K§hjÿubhä)�”}”(hŒðThe precise value also depends on the interface MTU. The interface MTU, in turn, may trigger IP fragmentation. In this case, the generated UDP-Lite packet is split into several IP packets, of which only the first one contains the L4 header.”h]”hŒðThe precise value also depends on the interface MTU. The interface MTU, in turn, may trigger IP fragmentation. In this case, the generated UDP-Lite packet is split into several IP packets, of which only the first one contains the L4 header.”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´K«hjÿubhä)�”}”(hŒgThe send buffer size has implications on the checksum coverage length. Consider the following example::”h]”hŒfThe send buffer size has implications on the checksum coverage length. Consider the following example:”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´K°hjÿubjC)�”}”(hŒqPayload: 1536 bytes Send Buffer: 1024 bytes MTU: 1500 bytes Coverage Length: 856 bytes”h]”hŒqPayload: 1536 bytes Send Buffer: 1024 bytes MTU: 1500 bytes Coverage Length: 856 bytes”…”�”}”hjSsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jBh³hÇh´K³hjÿubhä)�”}”(hŒ;UDP-Lite will ship the 1536 bytes in two separate packets::”h]”hŒ:UDP-Lite will ship the 1536 bytes in two separate packets:”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´K¶hjÿubjC)�”}”(hŒ�Packet 1: 1024 payload + 8 byte header + 20 byte IP header = 1052 bytes Packet 2: 512 payload + 8 byte header + 20 byte IP header = 540 bytes”h]”hŒ�Packet 1: 1024 payload + 8 byte header + 20 byte IP header = 1052 bytes Packet 2: 512 payload + 8 byte header + 20 byte IP header = 540 bytes”…”�”}”hjosbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jBh³hÇh´K¸hjÿubhä)�”}”(hX)The coverage packet covers the UDP-Lite header and 848 bytes of the payload in the first packet, the second packet is fully covered. Note that for the second packet, the coverage length exceeds the packet length. The kernel always re-adjusts the coverage length to the packet length in such cases.”h]”hX)The coverage packet covers the UDP-Lite header and 848 bytes of the payload in the first packet, the second packet is fully covered. Note that for the second packet, the coverage length exceeds the packet length. The kernel always re-adjusts the coverage length to the packet length in such cases.”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´K»hjÿubhä)�”}”(hŒ}As an example of what happens when one UDP-Lite packet is split into several tiny fragments, consider the following example::”h]”hŒ|As an example of what happens when one UDP-Lite packet is split into several tiny fragments, consider the following example:”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´KÁhjÿubjC)�”}”(hX¶Payload: 1024 bytes Send buffer size: 1024 bytes MTU: 300 bytes Coverage length: 575 bytes +-+-----------+--------------+--------------+--------------+ |8| 272 | 280 | 280 | 280 | +-+-----------+--------------+--------------+--------------+ 280 560 840 1032 ^ *****checksum coverage*************”h]”hX¶Payload: 1024 bytes Send buffer size: 1024 bytes MTU: 300 bytes Coverage length: 575 bytes +-+-----------+--------------+--------------+--------------+ |8| 272 | 280 | 280 | 280 | +-+-----------+--------------+--------------+--------------+ 280 560 840 1032 ^ *****checksum coverage*************”…”�”}”hj™sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jBh³hÇh´KÄhjÿubhä)�”}”(hXNThe UDP-Lite module generates one 1032 byte packet (1024 + 8 byte header). According to the interface MTU, these are split into 4 IP packets (280 byte IP payload + 20 byte IP header). The kernel module sums the contents of the entire first two packets, plus 15 bytes of the last packet before releasing the fragments to the IP module.”h]”hXNThe UDP-Lite module generates one 1032 byte packet (1024 + 8 byte header). According to the interface MTU, these are split into 4 IP packets (280 byte IP payload + 20 byte IP header). The kernel module sums the contents of the entire first two packets, plus 15 bytes of the last packet before releasing the fragments to the IP module.”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´KÎhjÿubhä)�”}”(hXÐTo see the analogous case for IPv6 fragmentation, consider a link MTU of 1280 bytes and a write buffer of 3356 bytes. If the checksum coverage is less than 1232 bytes (MTU minus IPv6/fragment header lengths), only the first fragment needs to be considered. When using larger checksum coverage lengths, each eligible fragment needs to be checksummed. Suppose we have a checksum coverage of 3062. The buffer of 3356 bytes will be split into the following fragments::”h]”hXÏTo see the analogous case for IPv6 fragmentation, consider a link MTU of 1280 bytes and a write buffer of 3356 bytes. If the checksum coverage is less than 1232 bytes (MTU minus IPv6/fragment header lengths), only the first fragment needs to be considered. When using larger checksum coverage lengths, each eligible fragment needs to be checksummed. Suppose we have a checksum coverage of 3062. The buffer of 3356 bytes will be split into the following fragments:”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´KÔhjÿubjC)�”}”(hŒ¶Fragment 1: 1280 bytes carrying 1232 bytes of UDP-Lite data Fragment 2: 1280 bytes carrying 1232 bytes of UDP-Lite data Fragment 3: 948 bytes carrying 900 bytes of UDP-Lite data”h]”hŒ¶Fragment 1: 1280 bytes carrying 1232 bytes of UDP-Lite data Fragment 2: 1280 bytes carrying 1232 bytes of UDP-Lite data Fragment 3: 948 bytes carrying 900 bytes of UDP-Lite data”…”�”}”hjÃsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jBh³hÇh´KÜhjÿubhä)�”}”(hŒ~The first two fragments have to be checksummed in full, of the last fragment only 598 (= 3062 - 2*1232) bytes are checksummed.”h]”hŒ~The first two fragments have to be checksummed in full, of the last fragment only 598 (= 3062 - 2*1232) bytes are checksummed.”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´Kàhjÿubhä)�”}”(hŒüWhile it is important that such cases are dealt with correctly, they are (annoyingly) rare: UDP-Lite is designed for optimising multimedia performance over wireless (or generally noisy) links and thus smaller coverage lengths are likely to be expected.”h]”hŒüWhile it is important that such cases are dealt with correctly, they are (annoyingly) rare: UDP-Lite is designed for optimising multimedia performance over wireless (or generally noisy) links and thus smaller coverage lengths are likely to be expected.”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´Kãhjÿubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kvhjîh²hubeh}”(h]”Œ;kernel-behaviour-with-regards-to-the-various-socket-options”ah ]”h"]”Œ>4. kernel behaviour with regards to the various socket options”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KsubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ05. UDP-Lite Runtime Statistics and their Meaning”h]”hŒ05. UDP-Lite Runtime Statistics and their Meaning”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjûh²hh³hÇh´KéubhÞ)�”}”(hX Exceptional and error conditions are logged to syslog at the KERN_DEBUG level. Live statistics about UDP-Lite are available in /proc/net/snmp and can (with newer versions of netstat) be viewed using:: netstat -svu This displays UDP-Lite statistics variables, whose meaning is as follows. ============ ===================================================== InDatagrams The total number of datagrams delivered to users. NoPorts Number of packets received to an unknown port. These cases are counted separately (not as InErrors). InErrors Number of erroneous UDP-Lite packets. Errors include: * internal socket queue receive errors * packet too short (less than 8 bytes or stated coverage length exceeds received length) * xfrm4_policy_check() returned with error * application has specified larger min. coverage length than that of incoming packet * checksum coverage violated * bad checksum OutDatagrams Total number of sent datagrams. ============ ===================================================== These statistics derive from the UDP MIB (RFC 2013). ”h]”(hä)�”}”(hŒÉExceptional and error conditions are logged to syslog at the KERN_DEBUG level. Live statistics about UDP-Lite are available in /proc/net/snmp and can (with newer versions of netstat) be viewed using::”h]”hŒÈExceptional and error conditions are logged to syslog at the KERN_DEBUG level. Live statistics about UDP-Lite are available in /proc/net/snmp and can (with newer versions of netstat) be viewed using:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´Këhj ubjC)�”}”(hŒ netstat -svu”h]”hŒ netstat -svu”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jBh³hÇh´Kïhj ubhä)�”}”(hŒIThis displays UDP-Lite statistics variables, whose meaning is as follows.”h]”hŒIThis displays UDP-Lite statistics variables, whose meaning is as follows.”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´Kñhj ubhÞ)�”}”(hXÒ============ ===================================================== InDatagrams The total number of datagrams delivered to users. NoPorts Number of packets received to an unknown port. These cases are counted separately (not as InErrors). InErrors Number of erroneous UDP-Lite packets. Errors include: * internal socket queue receive errors * packet too short (less than 8 bytes or stated coverage length exceeds received length) * xfrm4_policy_check() returned with error * application has specified larger min. coverage length than that of incoming packet * checksum coverage violated * bad checksum OutDatagrams Total number of sent datagrams. ============ ===================================================== These statistics derive from the UDP MIB (RFC 2013). ”h]”(hŒtable”“”)�”}”(hhh]”hŒtgroup”“”)�”}”(hhh]”(hŒcolspec”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K uh1jHhjEubjI)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K5uh1jHhjEubhŒtbody”“”)�”}”(hhh]”(hŒrow”“”)�”}”(hhh]”(hŒentry”“”)�”}”(hhh]”hä)�”}”(hŒ InDatagrams”h]”hŒ InDatagrams”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´Kôhjjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjeubji)�”}”(hhh]”hä)�”}”(hŒ1The total number of datagrams delivered to users.”h]”hŒ1The total number of datagrams delivered to users.”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´Kôhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjeubeh}”(h]”h ]”h"]”h$]”h&]”uh1jchj`ubjd)�”}”(hhh]”(ji)�”}”(hhh]”hä)�”}”(hŒNoPorts”h]”hŒNoPorts”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´Köhj¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjžubji)�”}”(hhh]”hä)�”}”(hŒdNumber of packets received to an unknown port. These cases are counted separately (not as InErrors).”h]”hŒdNumber of packets received to an unknown port. These cases are counted separately (not as InErrors).”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´Köhj¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjžubeh}”(h]”h ]”h"]”h$]”h&]”uh1jchj`ubjd)�”}”(hhh]”(ji)�”}”(hhh]”hä)�”}”(hŒInErrors”h]”hŒInErrors”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´KùhjØubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÕubji)�”}”(hhh]”(hä)�”}”(hŒ5Number of erroneous UDP-Lite packets. Errors include:”h]”hŒ5Number of erroneous UDP-Lite packets. Errors include:”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´KùhjïubhÞ)�”}”(hX0* internal socket queue receive errors * packet too short (less than 8 bytes or stated coverage length exceeds received length) * xfrm4_policy_check() returned with error * application has specified larger min. coverage length than that of incoming packet * checksum coverage violated * bad checksum ”h]”j)�”}”(hhh]”(j )�”}”(hŒ$internal socket queue receive errors”h]”hä)�”}”(hj h]”hŒ$internal socket queue receive errors”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´Kûhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjubj )�”}”(hŒVpacket too short (less than 8 bytes or stated coverage length exceeds received length)”h]”hä)�”}”(hŒVpacket too short (less than 8 bytes or stated coverage length exceeds received length)”h]”hŒVpacket too short (less than 8 bytes or stated coverage length exceeds received length)”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´Kühjubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjubj )�”}”(hŒ(xfrm4_policy_check() returned with error”h]”hä)�”}”(hj8h]”hŒ(xfrm4_policy_check() returned with error”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´Kþhj6ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjubj )�”}”(hŒRapplication has specified larger min. coverage length than that of incoming packet”h]”hä)�”}”(hŒRapplication has specified larger min. coverage length than that of incoming packet”h]”hŒRapplication has specified larger min. coverage length than that of incoming packet”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´KÿhjMubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjubj )�”}”(hŒchecksum coverage violated”h]”hä)�”}”(hjgh]”hŒchecksum coverage violated”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´Mhjeubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjubj )�”}”(hŒ bad checksum ”h]”hä)�”}”(hŒ bad checksum”h]”hŒ bad checksum”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´Mhj|ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjubeh}”(h]”h ]”h"]”h$]”h&]”j¾j uh1jh³hÇh´Kûhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kûhjïubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÕubeh}”(h]”h ]”h"]”h$]”h&]”uh1jchj`ubjd)�”}”(hhh]”(ji)�”}”(hhh]”hä)�”}”(hŒ OutDatagrams”h]”hŒ OutDatagrams”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´Mhj¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj¬ubji)�”}”(hhh]”hä)�”}”(hŒTotal number of sent datagrams.”h]”hŒTotal number of sent datagrams.”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´MhjÆubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj¬ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jchj`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j^hjEubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jChj@ubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj:ubhä)�”}”(hŒ4These statistics derive from the UDP MIB (RFC 2013).”h]”hŒ4These statistics derive from the UDP MIB (RFC 2013).”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´Mhj:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kóhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Këhjûh²hubeh}”(h]”Œ-udp-lite-runtime-statistics-and-their-meaning”ah ]”h"]”Œ05. udp-lite runtime statistics and their meaning”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KéubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ 6. IPtables”h]”hŒ 6. IPtables”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjh²hh³hÇh´M ubhÞ)�”}”(hXVThere is packet match support for UDP-Lite as well as support for the LOG target. If you copy and paste the following line into /etc/protocols:: udplite 136 UDP-Lite # UDP-Lite [RFC 3828] then:: iptables -A INPUT -p udplite -j LOG will produce logging output to syslog. Dropping and rejecting packets also works. ”h]”(hä)�”}”(hŒ�There is packet match support for UDP-Lite as well as support for the LOG target. If you copy and paste the following line into /etc/protocols::”h]”hŒ�There is packet match support for UDP-Lite as well as support for the LOG target. If you copy and paste the following line into /etc/protocols:”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´M hj)ubjC)�”}”(hŒ5udplite 136 UDP-Lite # UDP-Lite [RFC 3828]”h]”hŒ5udplite 136 UDP-Lite # UDP-Lite [RFC 3828]”…”�”}”hj;sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jBh³hÇh´Mhj)ubhä)�”}”(hŒthen::”h]”hŒthen:”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´Mhj)ubjC)�”}”(hŒ#iptables -A INPUT -p udplite -j LOG”h]”hŒ#iptables -A INPUT -p udplite -j LOG”…”�”}”hjWsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jBh³hÇh´Mhj)ubhä)�”}”(hŒQwill produce logging output to syslog. Dropping and rejecting packets also works.”h]”hŒQwill produce logging output to syslog. Dropping and rejecting packets also works.”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´Mhj)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M hjh²hubeh}”(h]”Œiptables”ah ]”h"]”Œ 6. iptables”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´M ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ7. Maintainer Address”h]”hŒ7. Maintainer Address”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj�h²hh³hÇh´MubhÞ)�”}”(hX†The UDP-Lite patch was developed at University of Aberdeen Electronics Research Group Department of Engineering Fraser Noble Building Aberdeen AB24 3UE; UK The current maintainer is Gerrit Renker, . Initial code was developed by William Stanislaus, .”h]”(hä)�”}”(hŒ#The UDP-Lite patch was developed at”h]”hŒ#The UDP-Lite patch was developed at”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´Mhj’ubhÞ)�”}”(hŒxUniversity of Aberdeen Electronics Research Group Department of Engineering Fraser Noble Building Aberdeen AB24 3UE; UK ”h]”hä)�”}”(hŒwUniversity of Aberdeen Electronics Research Group Department of Engineering Fraser Noble Building Aberdeen AB24 3UE; UK”h]”hŒwUniversity of Aberdeen Electronics Research Group Department of Engineering Fraser Noble Building Aberdeen AB24 3UE; UK”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´Mhj¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Mhj’ubhä)�”}”(hŒŽThe current maintainer is Gerrit Renker, . Initial code was developed by William Stanislaus, .”h]”(hŒ*The current maintainer is Gerrit Renker, <”…”�”}”(hj¼h²hh³Nh´Nubj)�”}”(hŒgerrit@erg.abdn.ac.uk”h]”hŒgerrit@erg.abdn.ac.uk”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”Œmailto:gerrit@erg.abdn.ac.uk”uh1jhj¼ubhŒ7>. Initial code was developed by William Stanislaus, <”…”�”}”(hj¼h²hh³Nh´Nubj)�”}”(hŒwilliam@erg.abdn.ac.uk”h]”hŒwilliam@erg.abdn.ac.uk”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”Œmailto:william@erg.abdn.ac.uk”uh1jhj¼ubhŒ>.”…”�”}”(hj¼h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´M"hj’ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Mhj�h²hubeh}”(h]”Œmaintainer-address”ah ]”h"]”Œ7. maintainer address”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´Mubeh}”(h]”Œthe-udp-lite-protocol-rfc-3828”ah ]”h"]”Œ the udp-lite protocol (rfc 3828)”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”jhŒ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”j* Œ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 jjj;j8jëjèjøjõjjj~j{jýjúuŒ nametypes”}”(j ‰j‰j;‰jë‰jø‰j‰j~‰jý‰uh}”(j hÊjjÌj8j jèj>jõjîjjûj{jjúj�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”]”(hŒsystem_message”“”)�”}”(hhh]”hä)�”}”(hŒ:Enumerated list start value not ordinal-1: "2" (ordinal 2)”h]”hŒ>Enumerated list start value not ordinal-1: “2â€� (ordinal 2)”…”�”}”(hj‘ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãhjŽ ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”ŒINFO”Œsource”hÇŒline”Kuh1jŒ hjÿubj� )�”}”(hhh]”hä)�”}”(hŒ:Enumerated list start value not ordinal-1: "3" (ordinal 3)”h]”hŒ>Enumerated list start value not ordinal-1: “3â€� (ordinal 3)”…”�”}”(hj­ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãhjª ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”j§ Œsource”hÇŒline”Kuh1jŒ hjÿubj� )�”}”(hhh]”hä)�”}”(hŒ:Enumerated list start value not ordinal-1: "4" (ordinal 4)”h]”hŒ>Enumerated list start value not ordinal-1: “4â€� (ordinal 4)”…”�”}”(hjÈ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãhjÅ ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”j§ Œsource”hÇŒline”Kuh1jŒ hjÿubeŒtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.