Bug 198055

Summary: Missing mechanism to find maximum datagram sizes (mandated by RFC 1122)
Product: Networking Reporter: kwyut
Component: OtherAssignee: Stephen Hemminger (stephen)
Status: NEW ---    
Severity: high    
Priority: P1    
Hardware: All   
OS: Linux   
Kernel Version: 4.13.15-300.fc27.x86_64 Subsystem:
Regression: No Bisected commit-id:

Description kwyut 2017-12-01 15:54:14 UTC
It's currently impossible to reliably implement an application layer protocol with UDP sockets in Linux. Applications can retrieve the PMTU from IP_RECVERR control messages but are unable to account for the variable size of IP and UDP headers beyond hard-coding a large enough guess.

Relevant section of RFC 1122

    4.1.4  UDP/APPLICATION LAYER INTERFACE

         The application interface to UDP MUST provide the full services
         of the IP/transport interface described in Section 3.4 of this
         document.  Thus, an application using UDP needs the functions
         of the GET_SRCADDR(), GET_MAXSIZES(), ADVISE_DELIVPROB(), and
         RECV_ICMP() calls described in Section 3.4.  For example,
         GET_MAXSIZES() can be used to learn the effective maximum UDP
         maximum datagram size for a particular {interface,remote
         host,TOS} triplet.

In particular, GET_MAXSIZES() appears to be missing.