Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
net
dccp
ccids
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
64
enum
ccid3_options
{
65
TFRC_OPT_LOSS_EVENT_RATE
= 192,
66
TFRC_OPT_LOSS_INTERVALS
= 193,
67
TFRC_OPT_RECEIVE_RATE
= 194,
68
};
69
70
/* TFRC sender states */
71
enum
ccid3_hc_tx_states
{
72
TFRC_SSTATE_NO_SENT
= 1,
73
TFRC_SSTATE_NO_FBACK
,
74
TFRC_SSTATE_FBACK
,
75
};
76
96
struct
ccid3_hc_tx_sock
{
97
u64
tx_x
;
98
u64
tx_x_recv
;
99
u32
tx_x_calc
;
100
u32
tx_rtt
;
101
u32
tx_p
;
102
u32
tx_t_rto
;
103
u32
tx_t_ipi
;
104
u16
tx_s
;
105
enum
ccid3_hc_tx_states
tx_state
:8;
106
u8
tx_last_win_count
;
107
ktime_t
tx_t_last_win_count
;
108
struct
timer_list
tx_no_feedback_timer
;
109
ktime_t
tx_t_ld
;
110
ktime_t
tx_t_nom
;
111
struct
tfrc_tx_hist_entry
*
tx_hist
;
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 */
122
enum
ccid3_hc_rx_states
{
123
TFRC_RSTATE_NO_DATA
= 1,
124
TFRC_RSTATE_DATA
,
125
};
126
140
struct
ccid3_hc_rx_sock
{
141
u8
rx_last_counter
:4;
142
enum
ccid3_hc_rx_states
rx_state
:8;
143
u32
rx_bytes_recv
;
144
u32
rx_x_recv
;
145
u32
rx_rtt
;
146
ktime_t
rx_tstamp_last_feedback
;
147
struct
tfrc_rx_hist
rx_hist
;
148
struct
tfrc_loss_hist
rx_li_hist
;
149
u16
rx_s
;
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_ */
Generated on Thu Jan 10 2013 14:57:54 for Linux Kernel by
1.8.2