udplite(7)

๐Ÿ’– udplite(7) โ€” the manual page, bestie edition ๐Ÿ’–

okay so you found udplite(7), the Miscellaneous Information Manual page for UDP-Lite. yes it's got its own man page number and everything. iconic. let's get into it ๐Ÿฆ‹


โœจ NAME โœจ

udplite โ€” the Lightweight User Datagram Protocol. yes that's really what it stands for. cute, right?


๐ŸŒธ SYNOPSIS ๐ŸŒธ

#include <sys/socket.h>

sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDPLITE);

that's it. that's the whole vibe. one socket() call and you're in ๐Ÿ’…


๐ŸŽ€ DESCRIPTION ๐ŸŽ€

so this is an implementation of the Lightweight User Datagram Protocol (UDP-Lite), exactly as described in RFC 3828. no cap.

UDP-Lite is a whole extension of UDP (that's RFC 768, the classic) and what it adds is variable-length checksums. and like, that's genuinely a slay for certain types of multimedia transport, because those can actually make use of slightly damaged datagrams instead of just letting the lower-layer protocols discard them. sometimes a little damage is fine!! let the datagram live!!

the variable-length checksum coverage gets set through a setsockopt(2) option. and if you don't set that option? the only difference from regular UDP is that it uses a different IP protocol identifier โ€” IANA number 136. that's literally the only glow-up.

the UDP-Lite implementation is a full extension of udp(7), meaning it shares the same API and the same API behavior, and on top of that it offers two socket options to control the checksum coverage. two!! lil bonus options ๐Ÿซถ

๐ŸŒˆ Address format

UDP-Litev4 uses the sockaddr_in address format, which is described over in ip(7). UDP-Litev6 uses the sockaddr_in6 address format, described in ipv6(7). pick your fighter โœจ

๐Ÿ’œ Socket options

to set or get a UDP-Lite socket option, you call getsockopt(2) to read it or setsockopt(2) to write it, with the option level argument set to IPPROTO_UDPLITE. and also โ€” every single IPPROTO_UDP socket option is valid on a UDP-Lite socket too. see udp(7) for more info on those. bestie really said "yes and" to the whole UDP option set.

the following two options are specific to UDP-Lite:

  • UDPLITE_SEND_CSCOV โ€” this one sets the sender checksum coverage, and it takes an int as its argument, with a checksum coverage value in the range 0..2^16-1. a value of 0 means the entire datagram is always covered. values from 1-7 are illegal (RFC 3828, 3.1) and get rounded up to the minimum coverage of 8. and heads up about IPv6 jumbograms (RFC 2675): the UDP-Litev6 checksum coverage is limited to the first 2^16-1 octets, as per RFC 3828, 3.5, so higher values are therefore silently truncated to 2^16-1. if in doubt, the current coverage value can always be queried using getsockopt(2). always check, bestie, always check ๐Ÿ”
  • UDPLITE_RECV_CSCOV โ€” this is the receiver-side analogue, and it uses the same argument format and the same value range as UDPLITE_SEND_CSCOV. and listen: this option is not required to enable traffic with partial checksum coverage. its whole function is that of a traffic filter โ€” when enabled, it instructs the kernel to drop all packets which have a coverage less than the specified coverage value. so it's giving bouncer at the club energy. and when the value of UDPLITE_RECV_CSCOV exceeds the actual packet coverage, incoming packets are silently dropped, though they may generate a warning message in the system log. silent but it's logging about it, the duality ๐Ÿ˜ญ

๐Ÿ’€ ERRORS ๐Ÿ’€

all errors documented for udp(7) may be returned. UDP-Lite does not add any further errors. inherits the whole error collection from its parent and adds nothing. respect.


๐Ÿ“ FILES ๐Ÿ“

  • /proc/net/snmp โ€” basic UDP-Litev4 statistics counters. your numbers live here โœจ
  • /proc/net/snmp6 โ€” basic UDP-Litev6 statistics counters. same but v6 ๐Ÿ’ซ

๐Ÿ‘‘ VERSIONS ๐Ÿ‘‘

UDP-Litev4 and UDP-Litev6 first appeared in Linux 2.6.20. ancient history in kernel years, but still serving.


๐Ÿ™ˆ BUGS ๐Ÿ™ˆ

where glibc support is missing, you need these definitions. like, literally define them yourself, it's fine:

#define IPPROTO_UDPLITE     136
#define UDPLITE_SEND_CSCOV  10
#define UDPLITE_RECV_CSCOV  11
ok so that's the whole "you're on your own if your libc doesn't carry these" situation. just paste them in and move on, no drama ๐Ÿ’…

๐ŸŒŸ SEE ALSO ๐ŸŒŸ

RFC 3828 for the Lightweight User Datagram Protocol (UDP-Lite).

Documentation/networking/udplite.rst in the Linux kernel source tree


and that's the whole page, bestie!! ๐ŸŽ€ this one came from the Linux man-pages, version 6.20, dated 2026-02-08. read RFC 3828 if you're feeling academic, go make some slightly damaged multimedia datagrams if you're feeling unhinged, and remember: partial coverage is still coverage. periodt ๐Ÿ’–๐Ÿฆ‹โœจ

๐Ÿ“ฆ where this page comes from
  • arch rolling: man-pages 6.20-1 ยท BSD-2-Clause AND BSD-3-Clause AND BSD-4.3TAHOE AND BSD-4-Clause-UC AND GPL-1.0-or-later AND GPL-2.0-only AND GPL-2.0-or-later AND GPL-3.0-or-later AND LGPL-3.0-linking-exception AND LGPL-3.0-or-later AND LicenseRef-Public-Domain AND LicenseRef-UltraPermissive AND Linux-man-pages-1-para AND Linux-man-pages-copyleft AND Linux-man-pages-copyleft-2-para AND Linux-man-pages-copyleft-var AND MIT AND Spencer-94
  • nixpkgs unstable: man-pages 6.20
  • ๐Ÿ“œ the page's license: Linux-man-pages-copyleft
  • ๐Ÿ’– girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms