Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) /* SPDX-License-Identifier: GPL-2.0-or-later */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3)  *  Copyright (c) 2005 Andrea Bittau <a.bittau@cs.ucl.ac.uk>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5) #ifndef _DCCP_CCID2_H_
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6) #define _DCCP_CCID2_H_
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) #include <linux/timer.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) #include <linux/types.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) #include "../ccid.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) #include "../dccp.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14)  * CCID-2 timestamping faces the same issues as TCP timestamping.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15)  * Hence we reuse/share as much of the code as possible.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) #define ccid2_jiffies32	((u32)jiffies)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) /* NUMDUPACK parameter from RFC 4341, p. 6 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) #define NUMDUPACK	3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) struct ccid2_seq {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) 	u64			ccid2s_seq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) 	u32			ccid2s_sent;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) 	int			ccid2s_acked;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) 	struct ccid2_seq	*ccid2s_prev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) 	struct ccid2_seq	*ccid2s_next;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) #define CCID2_SEQBUF_LEN 1024
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) #define CCID2_SEQBUF_MAX 128
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34)  * Multiple of congestion window to keep the sequence window at
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35)  * (RFC 4340 7.5.2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) #define CCID2_WIN_CHANGE_FACTOR 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40)  * struct ccid2_hc_tx_sock - CCID2 TX half connection
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41)  * @tx_{cwnd,ssthresh,pipe}: as per RFC 4341, section 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42)  * @tx_packets_acked:	     Ack counter for deriving cwnd growth (RFC 3465)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43)  * @tx_srtt:		     smoothed RTT estimate, scaled by 2^3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44)  * @tx_mdev:		     smoothed RTT variation, scaled by 2^2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45)  * @tx_mdev_max:	     maximum of @mdev during one flight
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46)  * @tx_rttvar:		     moving average/maximum of @mdev_max
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47)  * @tx_rto:		     RTO value deriving from SRTT and RTTVAR (RFC 2988)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48)  * @tx_rtt_seq:		     to decay RTTVAR at most once per flight
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49)  * @tx_cwnd_used:	     actually used cwnd, W_used of RFC 2861
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50)  * @tx_expected_wnd:	     moving average of @tx_cwnd_used
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51)  * @tx_cwnd_stamp:	     to track idle periods in CWV
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52)  * @tx_lsndtime:	     last time (in jiffies) a data packet was sent
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53)  * @tx_rpseq:		     last consecutive seqno
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54)  * @tx_rpdupack:	     dupacks since rpseq
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55)  * @tx_av_chunks:	     list of Ack Vectors received on current skb
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) struct ccid2_hc_tx_sock {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) 	u32			tx_cwnd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) 	u32			tx_ssthresh;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) 	u32			tx_pipe;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) 	u32			tx_packets_acked;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) 	struct ccid2_seq	*tx_seqbuf[CCID2_SEQBUF_MAX];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) 	int			tx_seqbufc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) 	struct ccid2_seq	*tx_seqh;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) 	struct ccid2_seq	*tx_seqt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 	/* RTT measurement: variables/principles are the same as in TCP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) 	u32			tx_srtt,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) 				tx_mdev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) 				tx_mdev_max,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) 				tx_rttvar,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) 				tx_rto;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) 	u64			tx_rtt_seq:48;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) 	struct timer_list	tx_rtotimer;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) 	struct sock		*sk;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) 	/* Congestion Window validation (optional, RFC 2861) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) 	u32			tx_cwnd_used,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) 				tx_expected_wnd,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) 				tx_cwnd_stamp,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 				tx_lsndtime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 	u64			tx_rpseq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) 	int			tx_rpdupack;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) 	u32			tx_last_cong;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 	u64			tx_high_ack;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) 	struct list_head	tx_av_chunks;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) static inline bool ccid2_cwnd_network_limited(struct ccid2_hc_tx_sock *hc)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) 	return hc->tx_pipe >= hc->tx_cwnd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96)  * Convert RFC 3390 larger initial window into an equivalent number of packets.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97)  * This is based on the numbers specified in RFC 5681, 3.1.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) static inline u32 rfc3390_bytes_to_packets(const u32 smss)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) 	return smss <= 1095 ? 4 : (smss > 2190 ? 2 : 3);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105)  * struct ccid2_hc_rx_sock  -  Receiving end of CCID-2 half-connection
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106)  * @rx_num_data_pkts: number of data packets received since last feedback
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) struct ccid2_hc_rx_sock {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) 	u32	rx_num_data_pkts;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) static inline struct ccid2_hc_tx_sock *ccid2_hc_tx_sk(const struct sock *sk)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) 	return ccid_priv(dccp_sk(sk)->dccps_hc_tx_ccid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) static inline struct ccid2_hc_rx_sock *ccid2_hc_rx_sk(const struct sock *sk)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) 	return ccid_priv(dccp_sk(sk)->dccps_hc_rx_ccid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) #endif /* _DCCP_CCID2_H_ */