Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
ccid3.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2005-7 The University of Waikato, Hamilton, New Zealand.
3  * Copyright (c) 2007 The University of Aberdeen, Scotland, UK
4  *
5  * An implementation of the DCCP protocol
6  *
7  * This code has been developed by the University of Waikato WAND
8  * research group. For further information please see http://www.wand.net.nz/
9  * or e-mail Ian McDonald - [email protected]
10  *
11  * This code also uses code from Lulea University, rereleased as GPL by its
12  * authors:
13  * Copyright (c) 2003 Nils-Erik Mattsson, Joacim Haggmark, Magnus Erixzon
14  *
15  * Changes to meet Linux coding standards, to make it meet latest ccid3 draft
16  * and to make it work as a loadable module in the DCCP stack written by
17  * Arnaldo Carvalho de Melo <[email protected]>.
18  *
19  * Copyright (c) 2005 Arnaldo Carvalho de Melo <[email protected]>
20  *
21  * This program is free software; you can redistribute it and/or modify
22  * it under the terms of the GNU General Public License as published by
23  * the Free Software Foundation; either version 2 of the License, or
24  * (at your option) any later version.
25  *
26  * This program is distributed in the hope that it will be useful,
27  * but WITHOUT ANY WARRANTY; without even the implied warranty of
28  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
29  * GNU General Public License for more details.
30  *
31  * You should have received a copy of the GNU General Public License
32  * along with this program; if not, write to the Free Software
33  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
34  */
35 #ifndef _DCCP_CCID3_H_
36 #define _DCCP_CCID3_H_
37 
38 #include <linux/ktime.h>
39 #include <linux/list.h>
40 #include <linux/types.h>
41 #include <linux/tfrc.h>
42 #include "lib/tfrc.h"
43 #include "../ccid.h"
44 
45 /* Two seconds as per RFC 5348, 4.2 */
46 #define TFRC_INITIAL_TIMEOUT (2 * USEC_PER_SEC)
47 
48 /* Parameter t_mbi from [RFC 3448, 4.3]: backoff interval in seconds */
49 #define TFRC_T_MBI 64
50 
51 /*
52  * The t_delta parameter (RFC 5348, 8.3): delays of less than %USEC_PER_MSEC are
53  * rounded down to 0, since sk_reset_timer() here uses millisecond granularity.
54  * Hence we can use a constant t_delta = %USEC_PER_MSEC when HZ >= 500. A coarse
55  * resolution of HZ < 500 means that the error is below one timer tick (t_gran)
56  * when using the constant t_delta = t_gran / 2 = %USEC_PER_SEC / (2 * HZ).
57  */
58 #if (HZ >= 500)
59 # define TFRC_T_DELTA USEC_PER_MSEC
60 #else
61 # define TFRC_T_DELTA (USEC_PER_SEC / (2 * HZ))
62 #endif
63 
68 };
69 
70 /* TFRC sender states */
75 };
76 
112 };
113 
114 static inline struct ccid3_hc_tx_sock *ccid3_hc_tx_sk(const struct sock *sk)
115 {
116  struct ccid3_hc_tx_sock *hctx = ccid_priv(dccp_sk(sk)->dccps_hc_tx_ccid);
117  BUG_ON(hctx == NULL);
118  return hctx;
119 }
120 
121 /* TFRC receiver states */
125 };
126 
150 #define rx_pinv rx_li_hist.i_mean
151 };
152 
153 static inline struct ccid3_hc_rx_sock *ccid3_hc_rx_sk(const struct sock *sk)
154 {
155  struct ccid3_hc_rx_sock *hcrx = ccid_priv(dccp_sk(sk)->dccps_hc_rx_ccid);
156  BUG_ON(hcrx == NULL);
157  return hcrx;
158 }
159 
160 #endif /* _DCCP_CCID3_H_ */