Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
5cb960a8
Commit
5cb960a8
authored
Jun 11, 2008
by
David S. Miller
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
git://eden-feed.erg.abdn.ac.uk/net-2.6
parents
ceeff754
be4c798a
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
41 additions
and
59 deletions
+41
-59
net/dccp/ackvec.c
net/dccp/ackvec.c
+2
-27
net/dccp/ccids/ccid3.c
net/dccp/ccids/ccid3.c
+10
-4
net/dccp/ccids/lib/tfrc.c
net/dccp/ccids/lib/tfrc.c
+0
-8
net/dccp/ccids/lib/tfrc.h
net/dccp/ccids/lib/tfrc.h
+15
-10
net/dccp/ccids/lib/tfrc_equation.c
net/dccp/ccids/lib/tfrc_equation.c
+4
-4
net/dccp/minisocks.c
net/dccp/minisocks.c
+4
-4
net/dccp/options.c
net/dccp/options.c
+3
-1
net/dccp/output.c
net/dccp/output.c
+2
-0
net/dccp/probe.c
net/dccp/probe.c
+1
-1
No files found.
net/dccp/ackvec.c
View file @
5cb960a8
...
...
@@ -290,12 +290,12 @@ int dccp_ackvec_add(struct dccp_ackvec *av, const struct sock *sk,
while
(
1
)
{
const
u8
len
=
dccp_ackvec_len
(
av
,
index
);
const
u8
state
=
dccp_ackvec_state
(
av
,
index
);
const
u8
av_
state
=
dccp_ackvec_state
(
av
,
index
);
/*
* valid packets not yet in av_buf have a reserved
* entry, with a len equal to 0.
*/
if
(
state
==
DCCP_ACKVEC_STATE_NOT_RECEIVED
&&
if
(
av_
state
==
DCCP_ACKVEC_STATE_NOT_RECEIVED
&&
len
==
0
&&
delta
==
0
)
{
/* Found our
reserved seat! */
dccp_pr_debug
(
"Found %llu reserved seat!
\n
"
,
...
...
@@ -325,31 +325,6 @@ int dccp_ackvec_add(struct dccp_ackvec *av, const struct sock *sk,
return
-
EILSEQ
;
}
#ifdef CONFIG_IP_DCCP_DEBUG
void
dccp_ackvector_print
(
const
u64
ackno
,
const
unsigned
char
*
vector
,
int
len
)
{
dccp_pr_debug_cat
(
"ACK vector len=%d, ackno=%llu |"
,
len
,
(
unsigned
long
long
)
ackno
);
while
(
len
--
)
{
const
u8
state
=
(
*
vector
&
DCCP_ACKVEC_STATE_MASK
)
>>
6
;
const
u8
rl
=
*
vector
&
DCCP_ACKVEC_LEN_MASK
;
dccp_pr_debug_cat
(
"%d,%d|"
,
state
,
rl
);
++
vector
;
}
dccp_pr_debug_cat
(
"
\n
"
);
}
void
dccp_ackvec_print
(
const
struct
dccp_ackvec
*
av
)
{
dccp_ackvector_print
(
av
->
av_buf_ackno
,
av
->
av_buf
+
av
->
av_buf_head
,
av
->
av_vec_len
);
}
#endif
static
void
dccp_ackvec_throw_record
(
struct
dccp_ackvec
*
av
,
struct
dccp_ackvec_record
*
avr
)
{
...
...
net/dccp/ccids/ccid3.c
View file @
5cb960a8
...
...
@@ -159,8 +159,8 @@ static void ccid3_hc_tx_update_x(struct sock *sk, ktime_t *stamp)
}
else
if
(
ktime_us_delta
(
now
,
hctx
->
ccid3hctx_t_ld
)
-
(
s64
)
hctx
->
ccid3hctx_rtt
>=
0
)
{
hctx
->
ccid3hctx_x
=
max
(
min
(
2
*
hctx
->
ccid3hctx_x
,
min_rate
)
,
hctx
->
ccid3hctx_x
=
min
(
2
*
hctx
->
ccid3hctx_x
,
min_rate
);
hctx
->
ccid3hctx_x
=
max
(
hctx
->
ccid3hctx_x
,
scaled_div
(((
__u64
)
hctx
->
ccid3hctx_s
)
<<
6
,
hctx
->
ccid3hctx_rtt
));
hctx
->
ccid3hctx_t_ld
=
now
;
...
...
@@ -329,8 +329,14 @@ static int ccid3_hc_tx_send_packet(struct sock *sk, struct sk_buff *skb)
hctx
->
ccid3hctx_x
=
rfc3390_initial_rate
(
sk
);
hctx
->
ccid3hctx_t_ld
=
now
;
}
else
{
/* Sender does not have RTT sample: X_pps = 1 pkt/sec */
hctx
->
ccid3hctx_x
=
hctx
->
ccid3hctx_s
;
/*
* Sender does not have RTT sample:
* - set fallback RTT (RFC 4340, 3.4) since a RTT value
* is needed in several parts (e.g. window counter);
* - set sending rate X_pps = 1pps as per RFC 3448, 4.2.
*/
hctx
->
ccid3hctx_rtt
=
DCCP_FALLBACK_RTT
;
hctx
->
ccid3hctx_x
=
hctx
->
ccid3hctx_s
;
hctx
->
ccid3hctx_x
<<=
6
;
}
ccid3_update_send_interval
(
hctx
);
...
...
net/dccp/ccids/lib/tfrc.c
View file @
5cb960a8
...
...
@@ -14,14 +14,6 @@ module_param(tfrc_debug, bool, 0444);
MODULE_PARM_DESC
(
tfrc_debug
,
"Enable debug messages"
);
#endif
extern
int
tfrc_tx_packet_history_init
(
void
);
extern
void
tfrc_tx_packet_history_exit
(
void
);
extern
int
tfrc_rx_packet_history_init
(
void
);
extern
void
tfrc_rx_packet_history_exit
(
void
);
extern
int
tfrc_li_init
(
void
);
extern
void
tfrc_li_exit
(
void
);
static
int
__init
tfrc_module_init
(
void
)
{
int
rc
=
tfrc_li_init
();
...
...
net/dccp/ccids/lib/tfrc.h
View file @
5cb960a8
...
...
@@ -15,7 +15,7 @@
* (at your option) any later version.
*/
#include <linux/types.h>
#include <
asm/div
64.h>
#include <
linux/math
64.h>
#include "../../dccp.h"
/* internal includes that this module exports: */
#include "loss_interval.h"
...
...
@@ -29,21 +29,19 @@ extern int tfrc_debug;
#endif
/* integer-arithmetic divisions of type (a * 1000000)/b */
static
inline
u64
scaled_div
(
u64
a
,
u
32
b
)
static
inline
u64
scaled_div
(
u64
a
,
u
64
b
)
{
BUG_ON
(
b
==
0
);
a
*=
1000000
;
do_div
(
a
,
b
);
return
a
;
return
div64_u64
(
a
*
1000000
,
b
);
}
static
inline
u32
scaled_div32
(
u64
a
,
u
32
b
)
static
inline
u32
scaled_div32
(
u64
a
,
u
64
b
)
{
u64
result
=
scaled_div
(
a
,
b
);
if
(
result
>
UINT_MAX
)
{
DCCP_CRIT
(
"Overflow:
a(%llu)/b(%u) > ~0U
"
,
(
unsigned
long
long
)
a
,
b
);
DCCP_CRIT
(
"Overflow:
%llu/%llu > UINT_MAX
"
,
(
unsigned
long
long
)
a
,
(
unsigned
long
long
)
b
);
return
UINT_MAX
;
}
return
result
;
...
...
@@ -58,7 +56,14 @@ static inline u32 tfrc_ewma(const u32 avg, const u32 newval, const u8 weight)
return
avg
?
(
weight
*
avg
+
(
10
-
weight
)
*
newval
)
/
10
:
newval
;
}
extern
u32
tfrc_calc_x
(
u16
s
,
u32
R
,
u32
p
);
extern
u32
tfrc_calc_x_reverse_lookup
(
u32
fvalue
);
extern
u32
tfrc_calc_x
(
u16
s
,
u32
R
,
u32
p
);
extern
u32
tfrc_calc_x_reverse_lookup
(
u32
fvalue
);
extern
int
tfrc_tx_packet_history_init
(
void
);
extern
void
tfrc_tx_packet_history_exit
(
void
);
extern
int
tfrc_rx_packet_history_init
(
void
);
extern
void
tfrc_rx_packet_history_exit
(
void
);
extern
int
tfrc_li_init
(
void
);
extern
void
tfrc_li_exit
(
void
);
#endif
/* _TFRC_H_ */
net/dccp/ccids/lib/tfrc_equation.c
View file @
5cb960a8
...
...
@@ -661,7 +661,7 @@ u32 tfrc_calc_x(u16 s, u32 R, u32 p)
EXPORT_SYMBOL_GPL
(
tfrc_calc_x
);
/*
/*
*
* tfrc_calc_x_reverse_lookup - try to find p given f(p)
*
* @fvalue: function value to match, scaled by 1000000
...
...
@@ -676,11 +676,11 @@ u32 tfrc_calc_x_reverse_lookup(u32 fvalue)
/* Error cases. */
if
(
fvalue
<
tfrc_calc_x_lookup
[
0
][
1
])
{
DCCP_WARN
(
"fvalue %
d
smaller than resolution
\n
"
,
fvalue
);
return
tfrc_calc_x_lookup
[
0
][
1
]
;
DCCP_WARN
(
"fvalue %
u
smaller than resolution
\n
"
,
fvalue
);
return
TFRC_SMALLEST_P
;
}
if
(
fvalue
>
tfrc_calc_x_lookup
[
TFRC_CALC_X_ARRSIZE
-
1
][
0
])
{
DCCP_WARN
(
"fvalue %
d
exceeds bounds!
\n
"
,
fvalue
);
DCCP_WARN
(
"fvalue %
u
exceeds bounds!
\n
"
,
fvalue
);
return
1000000
;
}
...
...
net/dccp/minisocks.c
View file @
5cb960a8
...
...
@@ -165,12 +165,12 @@ struct sock *dccp_create_openreq_child(struct sock *sk,
/* See dccp_v4_conn_request */
newdmsk
->
dccpms_sequence_window
=
req
->
rcv_wnd
;
newdp
->
dccps_gar
=
newdp
->
dccps_isr
=
dreq
->
dreq_isr
;
dccp_update_gsr
(
newsk
,
dreq
->
dreq_isr
);
newdp
->
dccps_iss
=
dreq
->
dreq_iss
;
newdp
->
dccps_gar
=
newdp
->
dccps_iss
=
dreq
->
dreq_iss
;
dccp_update_gss
(
newsk
,
dreq
->
dreq_iss
);
newdp
->
dccps_isr
=
dreq
->
dreq_isr
;
dccp_update_gsr
(
newsk
,
dreq
->
dreq_isr
);
/*
* SWL and AWL are initially adjusted so that they are not less than
* the initial Sequence Numbers received and sent, respectively:
...
...
net/dccp/options.c
View file @
5cb960a8
...
...
@@ -107,9 +107,11 @@ int dccp_parse_options(struct sock *sk, struct dccp_request_sock *dreq,
*
* CCID-specific options are ignored during connection setup, as
* negotiation may still be in progress (see RFC 4340, 10.3).
* The same applies to Ack Vectors, as these depend on the CCID.
*
*/
if
(
dreq
!=
NULL
&&
opt
>=
128
)
if
(
dreq
!=
NULL
&&
(
opt
>=
128
||
opt
==
DCCPO_ACK_VECTOR_0
||
opt
==
DCCPO_ACK_VECTOR_1
))
goto
ignore_option
;
switch
(
opt
)
{
...
...
net/dccp/output.c
View file @
5cb960a8
...
...
@@ -508,6 +508,7 @@ void dccp_send_ack(struct sock *sk)
EXPORT_SYMBOL_GPL
(
dccp_send_ack
);
#if 0
/* FIXME: Is this still necessary (11.3) - currently nowhere used by DCCP. */
void dccp_send_delayed_ack(struct sock *sk)
{
...
...
@@ -538,6 +539,7 @@ void dccp_send_delayed_ack(struct sock *sk)
icsk->icsk_ack.timeout = timeout;
sk_reset_timer(sk, &icsk->icsk_delack_timer, timeout);
}
#endif
void
dccp_send_sync
(
struct
sock
*
sk
,
const
u64
ackno
,
const
enum
dccp_pkt_type
pkt_type
)
...
...
net/dccp/probe.c
View file @
5cb960a8
...
...
@@ -42,7 +42,7 @@ static int bufsize = 64 * 1024;
static
const
char
procname
[]
=
"dccpprobe"
;
struct
{
st
atic
st
ruct
{
struct
kfifo
*
fifo
;
spinlock_t
lock
;
wait_queue_head_t
wait
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment