^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) .. SPDX-License-Identifier: GPL-2.0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) =============
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) DCCP protocol
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) =============
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) .. Contents
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) - Introduction
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) - Missing features
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) - Socket options
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) - Sysctl variables
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) - IOCTLs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) - Other tunables
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) - Notes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) Introduction
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) ============
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) Datagram Congestion Control Protocol (DCCP) is an unreliable, connection
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) oriented protocol designed to solve issues present in UDP and TCP, particularly
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) for real-time and multimedia (streaming) traffic.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) It divides into a base protocol (RFC 4340) and pluggable congestion control
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) modules called CCIDs. Like pluggable TCP congestion control, at least one CCID
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) needs to be enabled in order for the protocol to function properly. In the Linux
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) implementation, this is the TCP-like CCID2 (RFC 4341). Additional CCIDs, such as
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) the TCP-friendly CCID3 (RFC 4342), are optional.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) For a brief introduction to CCIDs and suggestions for choosing a CCID to match
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) given applications, see section 10 of RFC 4340.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) It has a base protocol and pluggable congestion control IDs (CCIDs).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) DCCP is a Proposed Standard (RFC 2026), and the homepage for DCCP as a protocol
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) is at http://www.ietf.org/html.charters/dccp-charter.html
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) Missing features
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) ================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) The Linux DCCP implementation does not currently support all the features that are
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) specified in RFCs 4340...42.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) The known bugs are at:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) http://www.linuxfoundation.org/collaborate/workgroups/networking/todo#DCCP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) For more up-to-date versions of the DCCP implementation, please consider using
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) the experimental DCCP test tree; instructions for checking this out are on:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) http://www.linuxfoundation.org/collaborate/workgroups/networking/dccp_testing#Experimental_DCCP_source_tree
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) Socket options
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) ==============
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) DCCP_SOCKOPT_QPOLICY_ID sets the dequeuing policy for outgoing packets. It takes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) a policy ID as argument and can only be set before the connection (i.e. changes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) during an established connection are not supported). Currently, two policies are
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) defined: the "simple" policy (DCCPQ_POLICY_SIMPLE), which does nothing special,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) and a priority-based variant (DCCPQ_POLICY_PRIO). The latter allows to pass an
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) u32 priority value as ancillary data to sendmsg(), where higher numbers indicate
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) a higher packet priority (similar to SO_PRIORITY). This ancillary data needs to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) be formatted using a cmsg(3) message header filled in as follows::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) cmsg->cmsg_level = SOL_DCCP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) cmsg->cmsg_type = DCCP_SCM_PRIORITY;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) cmsg->cmsg_len = CMSG_LEN(sizeof(uint32_t)); /* or CMSG_LEN(4) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) DCCP_SOCKOPT_QPOLICY_TXQLEN sets the maximum length of the output queue. A zero
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) value is always interpreted as unbounded queue length. If different from zero,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) the interpretation of this parameter depends on the current dequeuing policy
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) (see above): the "simple" policy will enforce a fixed queue size by returning
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) EAGAIN, whereas the "prio" policy enforces a fixed queue length by dropping the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) lowest-priority packet first. The default value for this parameter is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) initialised from /proc/sys/net/dccp/default/tx_qlen.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) DCCP_SOCKOPT_SERVICE sets the service. The specification mandates use of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) service codes (RFC 4340, sec. 8.1.2); if this socket option is not set,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) the socket will fall back to 0 (which means that no meaningful service code
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) is present). On active sockets this is set before connect(); specifying more
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) than one code has no effect (all subsequent service codes are ignored). The
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) case is different for passive sockets, where multiple service codes (up to 32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) can be set before calling bind().
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) DCCP_SOCKOPT_GET_CUR_MPS is read-only and retrieves the current maximum packet
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) size (application payload size) in bytes, see RFC 4340, section 14.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) DCCP_SOCKOPT_AVAILABLE_CCIDS is also read-only and returns the list of CCIDs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) supported by the endpoint. The option value is an array of type uint8_t whose
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) size is passed as option length. The minimum array size is 4 elements, the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) value returned in the optlen argument always reflects the true number of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) built-in CCIDs.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) DCCP_SOCKOPT_CCID is write-only and sets both the TX and RX CCIDs at the same
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) time, combining the operation of the next two socket options. This option is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) preferable over the latter two, since often applications will use the same
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) type of CCID for both directions; and mixed use of CCIDs is not currently well
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) understood. This socket option takes as argument at least one uint8_t value, or
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) an array of uint8_t values, which must match available CCIDS (see above). CCIDs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) must be registered on the socket before calling connect() or listen().
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) DCCP_SOCKOPT_TX_CCID is read/write. It returns the current CCID (if set) or sets
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) the preference list for the TX CCID, using the same format as DCCP_SOCKOPT_CCID.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) Please note that the getsockopt argument type here is ``int``, not uint8_t.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) DCCP_SOCKOPT_RX_CCID is analogous to DCCP_SOCKOPT_TX_CCID, but for the RX CCID.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) DCCP_SOCKOPT_SERVER_TIMEWAIT enables the server (listening socket) to hold
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) timewait state when closing the connection (RFC 4340, 8.3). The usual case is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) that the closing server sends a CloseReq, whereupon the client holds timewait
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) state. When this boolean socket option is on, the server sends a Close instead
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) and will enter TIMEWAIT. This option must be set after accept() returns.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) DCCP_SOCKOPT_SEND_CSCOV and DCCP_SOCKOPT_RECV_CSCOV are used for setting the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) partial checksum coverage (RFC 4340, sec. 9.2). The default is that checksums
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) always cover the entire packet and that only fully covered application data is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) accepted by the receiver. Hence, when using this feature on the sender, it must
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) be enabled at the receiver, too with suitable choice of CsCov.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) DCCP_SOCKOPT_SEND_CSCOV sets the sender checksum coverage. Values in the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) range 0..15 are acceptable. The default setting is 0 (full coverage),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) values between 1..15 indicate partial coverage.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) DCCP_SOCKOPT_RECV_CSCOV is for the receiver and has a different meaning: it
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) sets a threshold, where again values 0..15 are acceptable. The default
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) of 0 means that all packets with a partial coverage will be discarded.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) Values in the range 1..15 indicate that packets with minimally such a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) coverage value are also acceptable. The higher the number, the more
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) restrictive this setting (see [RFC 4340, sec. 9.2.1]). Partial coverage
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) settings are inherited to the child socket after accept().
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) The following two options apply to CCID 3 exclusively and are getsockopt()-only.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) In either case, a TFRC info struct (defined in <linux/tfrc.h>) is returned.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) DCCP_SOCKOPT_CCID_RX_INFO
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) Returns a ``struct tfrc_rx_info`` in optval; the buffer for optval and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) optlen must be set to at least sizeof(struct tfrc_rx_info).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) DCCP_SOCKOPT_CCID_TX_INFO
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) Returns a ``struct tfrc_tx_info`` in optval; the buffer for optval and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) optlen must be set to at least sizeof(struct tfrc_tx_info).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) On unidirectional connections it is useful to close the unused half-connection
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) via shutdown (SHUT_WR or SHUT_RD): this will reduce per-packet processing costs.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) Sysctl variables
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) ================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) Several DCCP default parameters can be managed by the following sysctls
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) (sysctl net.dccp.default or /proc/sys/net/dccp/default):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) request_retries
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) The number of active connection initiation retries (the number of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) Requests minus one) before timing out. In addition, it also governs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) the behaviour of the other, passive side: this variable also sets
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) the number of times DCCP repeats sending a Response when the initial
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) handshake does not progress from RESPOND to OPEN (i.e. when no Ack
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) is received after the initial Request). This value should be greater
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) than 0, suggested is less than 10. Analogue of tcp_syn_retries.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) retries1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) How often a DCCP Response is retransmitted until the listening DCCP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) side considers its connecting peer dead. Analogue of tcp_retries1.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) retries2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) The number of times a general DCCP packet is retransmitted. This has
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) importance for retransmitted acknowledgments and feature negotiation,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) data packets are never retransmitted. Analogue of tcp_retries2.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) tx_ccid = 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) Default CCID for the sender-receiver half-connection. Depending on the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) choice of CCID, the Send Ack Vector feature is enabled automatically.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) rx_ccid = 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) Default CCID for the receiver-sender half-connection; see tx_ccid.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) seq_window = 100
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) The initial sequence window (sec. 7.5.2) of the sender. This influences
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) the local ackno validity and the remote seqno validity windows (7.5.1).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) Values in the range Wmin = 32 (RFC 4340, 7.5.2) up to 2^32-1 can be set.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) tx_qlen = 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) The size of the transmit buffer in packets. A value of 0 corresponds
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) to an unbounded transmit buffer.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) sync_ratelimit = 125 ms
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) The timeout between subsequent DCCP-Sync packets sent in response to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) sequence-invalid packets on the same socket (RFC 4340, 7.5.4). The unit
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) of this parameter is milliseconds; a value of 0 disables rate-limiting.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) IOCTLS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) ======
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) FIONREAD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) Works as in udp(7): returns in the ``int`` argument pointer the size of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) the next pending datagram in bytes, or 0 when no datagram is pending.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) SIOCOUTQ
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) Returns the number of unsent data bytes in the socket send queue as ``int``
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) into the buffer specified by the argument pointer.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) Other tunables
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) ==============
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) Per-route rto_min support
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) CCID-2 supports the RTAX_RTO_MIN per-route setting for the minimum value
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) of the RTO timer. This setting can be modified via the 'rto_min' option
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) of iproute2; for example::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) > ip route change 10.0.0.0/24 rto_min 250j dev wlan0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) > ip route add 10.0.0.254/32 rto_min 800j dev wlan0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) > ip route show dev wlan0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) CCID-3 also supports the rto_min setting: it is used to define the lower
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) bound for the expiry of the nofeedback timer. This can be useful on LANs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) with very low RTTs (e.g., loopback, Gbit ethernet).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) Notes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) =====
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) DCCP does not travel through NAT successfully at present on many boxes. This is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) because the checksum covers the pseudo-header as per TCP and UDP. Linux NAT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) support for DCCP has been added.