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
ccid2.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2005 Andrea Bittau <
[email protected]
>
3
*
4
* This program is free software; you can redistribute it and/or modify
5
* it under the terms of the GNU General Public License as published by
6
* the Free Software Foundation; either version 2 of the License, or
7
* (at your option) any later version.
8
*
9
* This program is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
* GNU General Public License for more details.
13
*
14
* You should have received a copy of the GNU General Public License
15
* along with this program; if not, write to the Free Software
16
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17
*/
18
#ifndef _DCCP_CCID2_H_
19
#define _DCCP_CCID2_H_
20
21
#include <
linux/timer.h
>
22
#include <linux/types.h>
23
#include "../ccid.h"
24
#include "../dccp.h"
25
26
/*
27
* CCID-2 timestamping faces the same issues as TCP timestamping.
28
* Hence we reuse/share as much of the code as possible.
29
*/
30
#define ccid2_time_stamp tcp_time_stamp
31
32
/* NUMDUPACK parameter from RFC 4341, p. 6 */
33
#define NUMDUPACK 3
34
35
struct
ccid2_seq
{
36
u64
ccid2s_seq
;
37
u32
ccid2s_sent
;
38
int
ccid2s_acked
;
39
struct
ccid2_seq
*
ccid2s_prev
;
40
struct
ccid2_seq
*
ccid2s_next
;
41
};
42
43
#define CCID2_SEQBUF_LEN 1024
44
#define CCID2_SEQBUF_MAX 128
45
46
/*
47
* Multiple of congestion window to keep the sequence window at
48
* (RFC 4340 7.5.2)
49
*/
50
#define CCID2_WIN_CHANGE_FACTOR 5
51
70
struct
ccid2_hc_tx_sock
{
71
u32
tx_cwnd
;
72
u32
tx_ssthresh
;
73
u32
tx_pipe
;
74
u32
tx_packets_acked
;
75
struct
ccid2_seq
*
tx_seqbuf
[
CCID2_SEQBUF_MAX
];
76
int
tx_seqbufc
;
77
struct
ccid2_seq
*
tx_seqh
;
78
struct
ccid2_seq
*
tx_seqt
;
79
80
/* RTT measurement: variables/principles are the same as in TCP */
81
u32
tx_srtt
,
82
tx_mdev
,
83
tx_mdev_max
,
84
tx_rttvar
,
85
tx_rto
;
86
u64
tx_rtt_seq
:48;
87
struct
timer_list
tx_rtotimer
;
88
89
/* Congestion Window validation (optional, RFC 2861) */
90
u32
tx_cwnd_used
,
91
tx_expected_wnd
,
92
tx_cwnd_stamp
,
93
tx_lsndtime
;
94
95
u64
tx_rpseq
;
96
int
tx_rpdupack
;
97
u32
tx_last_cong
;
98
u64
tx_high_ack
;
99
struct
list_head
tx_av_chunks
;
100
};
101
102
static
inline
bool
ccid2_cwnd_network_limited(
struct
ccid2_hc_tx_sock
*hc)
103
{
104
return
hc->
tx_pipe
>= hc->
tx_cwnd
;
105
}
106
107
/*
108
* Convert RFC 3390 larger initial window into an equivalent number of packets.
109
* This is based on the numbers specified in RFC 5681, 3.1.
110
*/
111
static
inline
u32
rfc3390_bytes_to_packets(
const
u32
smss)
112
{
113
return
smss <= 1095 ? 4 : (smss > 2190 ? 2 : 3);
114
}
115
120
struct
ccid2_hc_rx_sock
{
121
u32
rx_num_data_pkts
;
122
};
123
124
static
inline
struct
ccid2_hc_tx_sock
*ccid2_hc_tx_sk(
const
struct
sock
*
sk
)
125
{
126
return
ccid_priv(dccp_sk(sk)->dccps_hc_tx_ccid);
127
}
128
129
static
inline
struct
ccid2_hc_rx_sock
*ccid2_hc_rx_sk(
const
struct
sock
*
sk
)
130
{
131
return
ccid_priv(dccp_sk(sk)->dccps_hc_rx_ccid);
132
}
133
#endif
/* _DCCP_CCID2_H_ */
Generated on Thu Jan 10 2013 14:57:53 for Linux Kernel by
1.8.2