]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - net/dccp/ccids/ccid2.h
dccp tfrc: Increase number of RTT samples
[linux-2.6-omap-h63xx.git] / net / dccp / ccids / ccid2.h
index 5b2ef4acb300de407396a90d7a4f7208b2a85d63..8b7a2dee2f6d587fc0513fb8e631ad80629f413a 100644 (file)
@@ -24,6 +24,8 @@
 #include <linux/timer.h>
 #include <linux/types.h>
 #include "../ccid.h"
+/* NUMDUPACK parameter from RFC 4341, p. 6 */
+#define NUMDUPACK      3
 
 struct sock;
 
@@ -35,47 +37,54 @@ struct ccid2_seq {
        struct ccid2_seq        *ccid2s_next;
 };
 
-#define CCID2_SEQBUF_LEN 256
+#define CCID2_SEQBUF_LEN 1024
 #define CCID2_SEQBUF_MAX 128
 
 /** struct ccid2_hc_tx_sock - CCID2 TX half connection
  *
- * @ccid2hctx_ssacks - ACKs recv in slow start
- * @ccid2hctx_acks - ACKS recv in AI phase
- * @ccid2hctx_sent - packets sent in this window
- * @ccid2hctx_lastrtt -time RTT was last measured
- * @ccid2hctx_arsent - packets sent [ack ratio]
- * @ccid2hctx_ackloss - ack was lost in this win
- * @ccid2hctx_rpseq - last consecutive seqno
- * @ccid2hctx_rpdupack - dupacks since rpseq
-*/
+ * @{cwnd,ssthresh,pipe}: as per RFC 4341, section 5
+ * @packets_acked: Ack counter for deriving cwnd growth (RFC 3465)
+ * @srtt: smoothed RTT estimate, scaled by 2^3
+ * @mdev: smoothed RTT variation, scaled by 2^2
+ * @mdev_max: maximum of @mdev during one flight
+ * @rttvar: moving average/maximum of @mdev_max
+ * @rto: RTO value deriving from SRTT and RTTVAR (RFC 2988)
+ * @rtt_seq: to decay RTTVAR at most once per flight
+ * @rpseq: last consecutive seqno
+ * @rpdupack: dupacks since rpseq
+ * @av_chunks: list of Ack Vectors received on current skb
+ */
 struct ccid2_hc_tx_sock {
-       int                     ccid2hctx_cwnd;
-       int                     ccid2hctx_ssacks;
-       int                     ccid2hctx_acks;
-       unsigned int            ccid2hctx_ssthresh;
-       int                     ccid2hctx_pipe;
-       int                     ccid2hctx_numdupack;
-       struct ccid2_seq        *ccid2hctx_seqbuf[CCID2_SEQBUF_MAX];
-       int                     ccid2hctx_seqbufc;
-       struct ccid2_seq        *ccid2hctx_seqh;
-       struct ccid2_seq        *ccid2hctx_seqt;
-       long                    ccid2hctx_rto;
-       long                    ccid2hctx_srtt;
-       long                    ccid2hctx_rttvar;
-       int                     ccid2hctx_sent;
-       unsigned long           ccid2hctx_lastrtt;
-       struct timer_list       ccid2hctx_rtotimer;
-       unsigned long           ccid2hctx_arsent;
-       int                     ccid2hctx_ackloss;
-       u64                     ccid2hctx_rpseq;
-       int                     ccid2hctx_rpdupack;
-       int                     ccid2hctx_sendwait;
-       unsigned long           ccid2hctx_last_cong;
+       u32                     cwnd;
+       u32                     ssthresh;
+       u32                     pipe;
+       u32                     packets_acked;
+       struct ccid2_seq        *seqbuf[CCID2_SEQBUF_MAX];
+       int                     seqbufc;
+       struct ccid2_seq        *seqh;
+       struct ccid2_seq        *seqt;
+       /* RTT measurement: variables/principles are the same as in TCP */
+       u32                     srtt,
+                               mdev,
+                               mdev_max,
+                               rttvar,
+                               rto;
+       u64                     rtt_seq:48;
+       struct timer_list       rtotimer;
+       u64                     rpseq;
+       int                     rpdupack;
+       unsigned long           last_cong;
+       u64                     high_ack;
+       struct list_head        av_chunks;
 };
 
+static inline bool ccid2_cwnd_network_limited(struct ccid2_hc_tx_sock *hctx)
+{
+       return (hctx->pipe >= hctx->cwnd);
+}
+
 struct ccid2_hc_rx_sock {
-       int     ccid2hcrx_data;
+       int                     data;
 };
 
 static inline struct ccid2_hc_tx_sock *ccid2_hc_tx_sk(const struct sock *sk)