DCCP protocol
-============
+=============
 
 
 Contents
 ========
-
 - Introduction
 - Missing features
 - Socket options
+- Sysctl variables
+- IOCTLs
+- Other tunables
 - Notes
 
+
 Introduction
 ============
-
 Datagram Congestion Control Protocol (DCCP) is an unreliable, connection
 oriented protocol designed to solve issues present in UDP and TCP, particularly
 for real-time and multimedia (streaming) traffic.
 DCCP is a Proposed Standard (RFC 2026), and the homepage for DCCP as a protocol
 is at http://www.ietf.org/html.charters/dccp-charter.html
 
+
 Missing features
 ================
-
 The Linux DCCP implementation does not currently support all the features that are
 specified in RFCs 4340...42.
 
 
 Socket options
 ==============
-
 DCCP_SOCKOPT_SERVICE sets the service. The specification mandates use of
 service codes (RFC 4340, sec. 8.1.2); if this socket option is not set,
 the socket will fall back to 0 (which means that no meaningful service code
 On unidirectional connections it is useful to close the unused half-connection
 via shutdown (SHUT_WR or SHUT_RD): this will reduce per-packet processing costs.
 
+
 Sysctl variables
 ================
 Several DCCP default parameters can be managed by the following sysctls
        sequence-invalid packets on the same socket (RFC 4340, 7.5.4). The unit
        of this parameter is milliseconds; a value of 0 disables rate-limiting.
 
+
 IOCTLS
 ======
 FIONREAD
        Works as in udp(7): returns in the `int' argument pointer the size of
        the next pending datagram in bytes, or 0 when no datagram is pending.
 
+
+Other tunables
+==============
+Per-route rto_min support
+       CCID-2 supports the RTAX_RTO_MIN per-route setting for the minimum value
+       of the RTO timer. This setting can be modified via the 'rto_min' option
+       of iproute2; for example:
+               > ip route change 10.0.0.0/24   rto_min 250j dev wlan0
+               > ip route add    10.0.0.254/32 rto_min 800j dev wlan0
+               > ip route show dev wlan0
+
+
 Notes
 =====
-
 DCCP does not travel through NAT successfully at present on many boxes. This is
 because the checksum covers the pseudo-header as per TCP and UDP. Linux NAT
 support for DCCP has been added.
 
                hc->tx_srtt = m << 3;
                hc->tx_mdev = m << 1;
 
-               hc->tx_mdev_max = max(TCP_RTO_MIN, hc->tx_mdev);
+               hc->tx_mdev_max = max(hc->tx_mdev, tcp_rto_min(sk));
                hc->tx_rttvar   = hc->tx_mdev_max;
+
                hc->tx_rtt_seq  = dccp_sk(sk)->dccps_gss;
        } else {
                /* Update scaled SRTT as SRTT += 1/8 * (m - SRTT) */
                                hc->tx_rttvar -= (hc->tx_rttvar -
                                                  hc->tx_mdev_max) >> 2;
                        hc->tx_rtt_seq  = dccp_sk(sk)->dccps_gss;
-                       hc->tx_mdev_max = TCP_RTO_MIN;
+                       hc->tx_mdev_max = tcp_rto_min(sk);
                }
        }