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
2a044515
Commit
2a044515
authored
Sep 10, 2005
by
David S. Miller
Browse files
Options
Browse Files
Download
Plain Diff
Merge davem@outer-richmond.davemloft.net:src/GIT/net-2.6/
parents
2625c1be
e6df439b
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
115 additions
and
135 deletions
+115
-135
include/linux/in6.h
include/linux/in6.h
+36
-20
include/linux/ipv6.h
include/linux/ipv6.h
+1
-1
net/dccp/ccids/ccid3.c
net/dccp/ccids/ccid3.c
+68
-98
net/dccp/ccids/ccid3.h
net/dccp/ccids/ccid3.h
+2
-0
net/dccp/ipv4.c
net/dccp/ipv4.c
+0
-4
net/dccp/output.c
net/dccp/output.c
+0
-3
net/ipv6/exthdrs.c
net/ipv6/exthdrs.c
+1
-2
net/ipv6/netfilter/ip6t_rt.c
net/ipv6/netfilter/ip6t_rt.c
+7
-7
No files found.
include/linux/in6.h
View file @
2a044515
...
@@ -198,27 +198,43 @@ struct in6_flowlabel_req
...
@@ -198,27 +198,43 @@ struct in6_flowlabel_req
* MCAST_MSFILTER 48
* MCAST_MSFILTER 48
*/
*/
/* RFC3542 advanced socket options (50-67) */
/*
#define IPV6_RECVPKTINFO 50
* Advanced API (RFC3542) (1)
#define IPV6_PKTINFO 51
*
#if 0
* Note: IPV6_RECVRTHDRDSTOPTS does not exist. see net/ipv6/datagram.c.
#define IPV6_RECVPATHMTU 52
*/
#define IPV6_PATHMTU 53
#define IPV6_DONTFRAG 54
#define IPV6_RECVPKTINFO 49
#define IPV6_USE_MIN_MTU 55
#define IPV6_PKTINFO 50
#endif
#define IPV6_RECVHOPLIMIT 51
#define IPV6_RECVHOPOPTS 56
#define IPV6_HOPLIMIT 52
#define IPV6_HOPOPTS 57
#define IPV6_RECVHOPOPTS 53
#if 0
#define IPV6_HOPOPTS 54
#define IPV6_RECVRTHDRDSTOPTS 58 /* Unused, see net/ipv6/datagram.c */
#define IPV6_RTHDRDSTOPTS 55
#define IPV6_RECVRTHDR 56
#define IPV6_RTHDR 57
#define IPV6_RECVDSTOPTS 58
#define IPV6_DSTOPTS 59
#if 0 /* not yet */
#define IPV6_RECVPATHMTU 60
#define IPV6_PATHMTU 61
#define IPV6_DONTFRAG 62
#define IPV6_USE_MIN_MTU 63
#endif
#endif
#define IPV6_RTHDRDSTOPTS 59
#define IPV6_RECVRTHDR 60
/*
#define IPV6_RTHDR 61
* Netfilter
#define IPV6_RECVDSTOPTS 62
*
#define IPV6_DSTOPTS 63
* Following socket options are used in ip6_tables;
#define IPV6_RECVHOPLIMIT 64
* see include/linux/netfilter_ipv6/ip6_tables.h.
#define IPV6_HOPLIMIT 65
*
* IP6T_SO_SET_REPLACE / IP6T_SO_GET_INFO 64
* IP6T_SO_SET_ADD_COUNTERS / IP6T_SO_GET_ENTRIES 65
*/
/*
* Advanced API (RFC3542) (2)
*/
#define IPV6_RECVTCLASS 66
#define IPV6_RECVTCLASS 66
#define IPV6_TCLASS 67
#define IPV6_TCLASS 67
...
...
include/linux/ipv6.h
View file @
2a044515
...
@@ -68,7 +68,7 @@ struct ipv6_opt_hdr {
...
@@ -68,7 +68,7 @@ struct ipv6_opt_hdr {
struct
rt0_hdr
{
struct
rt0_hdr
{
struct
ipv6_rt_hdr
rt_hdr
;
struct
ipv6_rt_hdr
rt_hdr
;
__u32
bitmap
;
/* strict/loose bit map */
__u32
reserved
;
struct
in6_addr
addr
[
0
];
struct
in6_addr
addr
[
0
];
#define rt0_type rt_hdr.type
#define rt0_type rt_hdr.type
...
...
net/dccp/ccids/ccid3.c
View file @
2a044515
...
@@ -78,13 +78,11 @@ static struct dccp_li_hist *ccid3_li_hist;
...
@@ -78,13 +78,11 @@ static struct dccp_li_hist *ccid3_li_hist;
static
int
ccid3_init
(
struct
sock
*
sk
)
static
int
ccid3_init
(
struct
sock
*
sk
)
{
{
ccid3_pr_debug
(
"%s, sk=%p
\n
"
,
dccp_role
(
sk
),
sk
);
return
0
;
return
0
;
}
}
static
void
ccid3_exit
(
struct
sock
*
sk
)
static
void
ccid3_exit
(
struct
sock
*
sk
)
{
{
ccid3_pr_debug
(
"%s, sk=%p
\n
"
,
dccp_role
(
sk
),
sk
);
}
}
/* TFRC sender states */
/* TFRC sender states */
...
@@ -287,14 +285,14 @@ static int ccid3_hc_tx_send_packet(struct sock *sk,
...
@@ -287,14 +285,14 @@ static int ccid3_hc_tx_send_packet(struct sock *sk,
long
delay
;
long
delay
;
int
rc
=
-
ENOTCONN
;
int
rc
=
-
ENOTCONN
;
/* Check if pure ACK or Terminating*/
BUG_ON
(
hctx
==
NULL
||
hctx
->
ccid3hctx_state
==
TFRC_SSTATE_TERM
);
/* Check if pure ACK or Terminating*/
/*
/*
* XXX: We only call this function for DATA and DATAACK, on, these
* XXX: We only call this function for DATA and DATAACK, on, these
* packets can have zero length, but why the comment about "pure ACK"?
* packets can have zero length, but why the comment about "pure ACK"?
*/
*/
if
(
hctx
==
NULL
||
len
==
0
||
if
(
unlikely
(
len
==
0
))
hctx
->
ccid3hctx_state
==
TFRC_SSTATE_TERM
)
goto
out
;
goto
out
;
/* See if last packet allocated was not sent */
/* See if last packet allocated was not sent */
...
@@ -304,10 +302,10 @@ static int ccid3_hc_tx_send_packet(struct sock *sk,
...
@@ -304,10 +302,10 @@ static int ccid3_hc_tx_send_packet(struct sock *sk,
SLAB_ATOMIC
);
SLAB_ATOMIC
);
rc
=
-
ENOBUFS
;
rc
=
-
ENOBUFS
;
if
(
new_packet
==
NULL
)
{
if
(
unlikely
(
new_packet
==
NULL
)
)
{
ccid3_pr_debug
(
"%s, sk=%p, not enough mem to add
"
LIMIT_NETDEBUG
(
KERN_WARNING
"%s: %s, sk=%p, not enough
"
"to history, send refused
\n
"
,
"
mem to add
to history, send refused
\n
"
,
dccp_role
(
sk
),
sk
);
__FUNCTION__
,
dccp_role
(
sk
),
sk
);
goto
out
;
goto
out
;
}
}
...
@@ -318,9 +316,6 @@ static int ccid3_hc_tx_send_packet(struct sock *sk,
...
@@ -318,9 +316,6 @@ static int ccid3_hc_tx_send_packet(struct sock *sk,
switch
(
hctx
->
ccid3hctx_state
)
{
switch
(
hctx
->
ccid3hctx_state
)
{
case
TFRC_SSTATE_NO_SENT
:
case
TFRC_SSTATE_NO_SENT
:
ccid3_pr_debug
(
"%s, sk=%p, first packet(%llu)
\n
"
,
dccp_role
(
sk
),
sk
,
dp
->
dccps_gss
);
hctx
->
ccid3hctx_no_feedback_timer
.
function
=
ccid3_hc_tx_no_feedback_timer
;
hctx
->
ccid3hctx_no_feedback_timer
.
function
=
ccid3_hc_tx_no_feedback_timer
;
hctx
->
ccid3hctx_no_feedback_timer
.
data
=
(
unsigned
long
)
sk
;
hctx
->
ccid3hctx_no_feedback_timer
.
data
=
(
unsigned
long
)
sk
;
sk_reset_timer
(
sk
,
&
hctx
->
ccid3hctx_no_feedback_timer
,
sk_reset_timer
(
sk
,
&
hctx
->
ccid3hctx_no_feedback_timer
,
...
@@ -328,7 +323,7 @@ static int ccid3_hc_tx_send_packet(struct sock *sk,
...
@@ -328,7 +323,7 @@ static int ccid3_hc_tx_send_packet(struct sock *sk,
hctx
->
ccid3hctx_last_win_count
=
0
;
hctx
->
ccid3hctx_last_win_count
=
0
;
hctx
->
ccid3hctx_t_last_win_count
=
now
;
hctx
->
ccid3hctx_t_last_win_count
=
now
;
ccid3_hc_tx_set_state
(
sk
,
TFRC_SSTATE_NO_FBACK
);
ccid3_hc_tx_set_state
(
sk
,
TFRC_SSTATE_NO_FBACK
);
hctx
->
ccid3hctx_t_ipi
=
TFRC_INITIAL_
TIMEOUT
;
hctx
->
ccid3hctx_t_ipi
=
TFRC_INITIAL_
IPI
;
/* Set nominal send time for initial packet */
/* Set nominal send time for initial packet */
hctx
->
ccid3hctx_t_nom
=
now
;
hctx
->
ccid3hctx_t_nom
=
now
;
...
@@ -341,7 +336,6 @@ static int ccid3_hc_tx_send_packet(struct sock *sk,
...
@@ -341,7 +336,6 @@ static int ccid3_hc_tx_send_packet(struct sock *sk,
case
TFRC_SSTATE_FBACK
:
case
TFRC_SSTATE_FBACK
:
delay
=
(
timeval_delta
(
&
now
,
&
hctx
->
ccid3hctx_t_nom
)
-
delay
=
(
timeval_delta
(
&
now
,
&
hctx
->
ccid3hctx_t_nom
)
-
hctx
->
ccid3hctx_delta
);
hctx
->
ccid3hctx_delta
);
ccid3_pr_debug
(
"send_packet delay=%ld
\n
"
,
delay
);
delay
/=
-
1000
;
delay
/=
-
1000
;
/* divide by -1000 is to convert to ms and get sign right */
/* divide by -1000 is to convert to ms and get sign right */
rc
=
delay
>
0
?
delay
:
0
;
rc
=
delay
>
0
?
delay
:
0
;
...
@@ -371,13 +365,7 @@ static void ccid3_hc_tx_packet_sent(struct sock *sk, int more, int len)
...
@@ -371,13 +365,7 @@ static void ccid3_hc_tx_packet_sent(struct sock *sk, int more, int len)
struct
ccid3_hc_tx_sock
*
hctx
=
ccid3_hc_tx_sk
(
sk
);
struct
ccid3_hc_tx_sock
*
hctx
=
ccid3_hc_tx_sk
(
sk
);
struct
timeval
now
;
struct
timeval
now
;
BUG_ON
(
hctx
==
NULL
);
BUG_ON
(
hctx
==
NULL
||
hctx
->
ccid3hctx_state
==
TFRC_SSTATE_TERM
);
if
(
hctx
->
ccid3hctx_state
==
TFRC_SSTATE_TERM
)
{
ccid3_pr_debug
(
"%s, sk=%p, while state is TFRC_SSTATE_TERM!
\n
"
,
dccp_role
(
sk
),
sk
);
return
;
}
dccp_timestamp
(
sk
,
&
now
);
dccp_timestamp
(
sk
,
&
now
);
...
@@ -387,14 +375,14 @@ static void ccid3_hc_tx_packet_sent(struct sock *sk, int more, int len)
...
@@ -387,14 +375,14 @@ static void ccid3_hc_tx_packet_sent(struct sock *sk, int more, int len)
struct
dccp_tx_hist_entry
*
packet
;
struct
dccp_tx_hist_entry
*
packet
;
packet
=
dccp_tx_hist_head
(
&
hctx
->
ccid3hctx_hist
);
packet
=
dccp_tx_hist_head
(
&
hctx
->
ccid3hctx_hist
);
if
(
packet
==
NULL
)
{
if
(
unlikely
(
packet
==
NULL
)
)
{
printk
(
KERN_CRIT
"%s: packet doesn't exists in
"
LIMIT_NETDEBUG
(
KERN_WARNING
"%s: packet doesn't
"
"
history!
\n
"
,
__FUNCTION__
);
"exists in
history!
\n
"
,
__FUNCTION__
);
return
;
return
;
}
}
if
(
packet
->
dccphtx_sent
)
{
if
(
unlikely
(
packet
->
dccphtx_sent
)
)
{
printk
(
KERN_CRIT
"%s: no unsent packet in history!
\n
"
,
LIMIT_NETDEBUG
(
KERN_WARNING
"%s: no unsent packet in "
__FUNCTION__
);
"history!
\n
"
,
__FUNCTION__
);
return
;
return
;
}
}
packet
->
dccphtx_tstamp
=
now
;
packet
->
dccphtx_tstamp
=
now
;
...
@@ -465,14 +453,7 @@ static void ccid3_hc_tx_packet_recv(struct sock *sk, struct sk_buff *skb)
...
@@ -465,14 +453,7 @@ static void ccid3_hc_tx_packet_recv(struct sock *sk, struct sk_buff *skb)
u32
x_recv
;
u32
x_recv
;
u32
r_sample
;
u32
r_sample
;
if
(
hctx
==
NULL
)
BUG_ON
(
hctx
==
NULL
||
hctx
->
ccid3hctx_state
==
TFRC_SSTATE_TERM
);
return
;
if
(
hctx
->
ccid3hctx_state
==
TFRC_SSTATE_TERM
)
{
ccid3_pr_debug
(
"%s, sk=%p, received a packet when "
"terminating!
\n
"
,
dccp_role
(
sk
),
sk
);
return
;
}
/* we are only interested in ACKs */
/* we are only interested in ACKs */
if
(
!
(
DCCP_SKB_CB
(
skb
)
->
dccpd_type
==
DCCP_PKT_ACK
||
if
(
!
(
DCCP_SKB_CB
(
skb
)
->
dccpd_type
==
DCCP_PKT_ACK
||
...
@@ -496,12 +477,12 @@ static void ccid3_hc_tx_packet_recv(struct sock *sk, struct sk_buff *skb)
...
@@ -496,12 +477,12 @@ static void ccid3_hc_tx_packet_recv(struct sock *sk, struct sk_buff *skb)
/* get t_recvdata from history */
/* get t_recvdata from history */
packet
=
dccp_tx_hist_find_entry
(
&
hctx
->
ccid3hctx_hist
,
packet
=
dccp_tx_hist_find_entry
(
&
hctx
->
ccid3hctx_hist
,
DCCP_SKB_CB
(
skb
)
->
dccpd_ack_seq
);
DCCP_SKB_CB
(
skb
)
->
dccpd_ack_seq
);
if
(
packet
==
NULL
)
{
if
(
unlikely
(
packet
==
NULL
)
)
{
ccid3_pr_debug
(
"%s, sk=%p, seqno %llu(%s) does't
"
LIMIT_NETDEBUG
(
KERN_WARNING
"%s: %s, sk=%p, seqno
"
"exist in history!
\n
"
,
"
%llu(%s) does't
exist in history!
\n
"
,
dccp_role
(
sk
),
sk
,
__FUNCTION__
,
dccp_role
(
sk
),
sk
,
DCCP_SKB_CB
(
skb
)
->
dccpd_ack_seq
,
(
unsigned
long
long
)
DCCP_SKB_CB
(
skb
)
->
dccpd_ack_seq
,
dccp_packet_name
(
DCCP_SKB_CB
(
skb
)
->
dccpd_type
));
dccp_packet_name
(
DCCP_SKB_CB
(
skb
)
->
dccpd_type
));
return
;
return
;
}
}
...
@@ -509,8 +490,8 @@ static void ccid3_hc_tx_packet_recv(struct sock *sk, struct sk_buff *skb)
...
@@ -509,8 +490,8 @@ static void ccid3_hc_tx_packet_recv(struct sock *sk, struct sk_buff *skb)
dccp_timestamp
(
sk
,
&
now
);
dccp_timestamp
(
sk
,
&
now
);
r_sample
=
timeval_delta
(
&
now
,
&
packet
->
dccphtx_tstamp
);
r_sample
=
timeval_delta
(
&
now
,
&
packet
->
dccphtx_tstamp
);
if
(
unlikely
(
r_sample
<=
t_elapsed
))
if
(
unlikely
(
r_sample
<=
t_elapsed
))
LIMIT_NETDEBUG
(
KERN_WARNING
LIMIT_NETDEBUG
(
KERN_WARNING
"%s: r_sample=%uus, "
"
%s: r_sample=%uus,
t_elapsed=%uus
\n
"
,
"t_elapsed=%uus
\n
"
,
__FUNCTION__
,
r_sample
,
t_elapsed
);
__FUNCTION__
,
r_sample
,
t_elapsed
);
else
else
r_sample
-=
t_elapsed
;
r_sample
-=
t_elapsed
;
...
@@ -606,10 +587,11 @@ static void ccid3_hc_tx_packet_recv(struct sock *sk, struct sk_buff *skb)
...
@@ -606,10 +587,11 @@ static void ccid3_hc_tx_packet_recv(struct sock *sk, struct sk_buff *skb)
static
void
ccid3_hc_tx_insert_options
(
struct
sock
*
sk
,
struct
sk_buff
*
skb
)
static
void
ccid3_hc_tx_insert_options
(
struct
sock
*
sk
,
struct
sk_buff
*
skb
)
{
{
struct
ccid3_hc_tx_sock
*
hctx
=
ccid3_hc_tx_sk
(
sk
);
const
struct
ccid3_hc_tx_sock
*
hctx
=
ccid3_hc_tx_sk
(
sk
);
if
(
hctx
==
NULL
||
!
(
sk
->
sk_state
==
DCCP_OPEN
||
BUG_ON
(
hctx
==
NULL
);
sk
->
sk_state
==
DCCP_PARTOPEN
))
if
(
!
(
sk
->
sk_state
==
DCCP_OPEN
||
sk
->
sk_state
==
DCCP_PARTOPEN
))
return
;
return
;
DCCP_SKB_CB
(
skb
)
->
dccpd_ccval
=
hctx
->
ccid3hctx_last_win_count
;
DCCP_SKB_CB
(
skb
)
->
dccpd_ccval
=
hctx
->
ccid3hctx_last_win_count
;
...
@@ -624,8 +606,7 @@ static int ccid3_hc_tx_parse_options(struct sock *sk, unsigned char option,
...
@@ -624,8 +606,7 @@ static int ccid3_hc_tx_parse_options(struct sock *sk, unsigned char option,
struct
ccid3_hc_tx_sock
*
hctx
=
ccid3_hc_tx_sk
(
sk
);
struct
ccid3_hc_tx_sock
*
hctx
=
ccid3_hc_tx_sk
(
sk
);
struct
ccid3_options_received
*
opt_recv
;
struct
ccid3_options_received
*
opt_recv
;
if
(
hctx
==
NULL
)
BUG_ON
(
hctx
==
NULL
);
return
0
;
opt_recv
=
&
hctx
->
ccid3hctx_options_received
;
opt_recv
=
&
hctx
->
ccid3hctx_options_received
;
...
@@ -639,10 +620,10 @@ static int ccid3_hc_tx_parse_options(struct sock *sk, unsigned char option,
...
@@ -639,10 +620,10 @@ static int ccid3_hc_tx_parse_options(struct sock *sk, unsigned char option,
switch
(
option
)
{
switch
(
option
)
{
case
TFRC_OPT_LOSS_EVENT_RATE
:
case
TFRC_OPT_LOSS_EVENT_RATE
:
if
(
len
!=
4
)
{
if
(
unlikely
(
len
!=
4
)
)
{
ccid3_pr_debug
(
"%s, sk=%p, invalid len for
"
LIMIT_NETDEBUG
(
KERN_WARNING
"%s: %s, sk=%p, invalid
"
"TFRC_OPT_LOSS_EVENT_RATE
\n
"
,
"
len for
TFRC_OPT_LOSS_EVENT_RATE
\n
"
,
dccp_role
(
sk
),
sk
);
__FUNCTION__
,
dccp_role
(
sk
),
sk
);
rc
=
-
EINVAL
;
rc
=
-
EINVAL
;
}
else
{
}
else
{
opt_recv
->
ccid3or_loss_event_rate
=
ntohl
(
*
(
u32
*
)
value
);
opt_recv
->
ccid3or_loss_event_rate
=
ntohl
(
*
(
u32
*
)
value
);
...
@@ -660,10 +641,10 @@ static int ccid3_hc_tx_parse_options(struct sock *sk, unsigned char option,
...
@@ -660,10 +641,10 @@ static int ccid3_hc_tx_parse_options(struct sock *sk, unsigned char option,
opt_recv
->
ccid3or_loss_intervals_len
);
opt_recv
->
ccid3or_loss_intervals_len
);
break
;
break
;
case
TFRC_OPT_RECEIVE_RATE
:
case
TFRC_OPT_RECEIVE_RATE
:
if
(
len
!=
4
)
{
if
(
unlikely
(
len
!=
4
)
)
{
ccid3_pr_debug
(
"%s, sk=%p, invalid len for
"
LIMIT_NETDEBUG
(
KERN_WARNING
"%s: %s, sk=%p, invalid
"
"TFRC_OPT_RECEIVE_RATE
\n
"
,
"
len for
TFRC_OPT_RECEIVE_RATE
\n
"
,
dccp_role
(
sk
),
sk
);
__FUNCTION__
,
dccp_role
(
sk
),
sk
);
rc
=
-
EINVAL
;
rc
=
-
EINVAL
;
}
else
{
}
else
{
opt_recv
->
ccid3or_receive_rate
=
ntohl
(
*
(
u32
*
)
value
);
opt_recv
->
ccid3or_receive_rate
=
ntohl
(
*
(
u32
*
)
value
);
...
@@ -682,8 +663,6 @@ static int ccid3_hc_tx_init(struct sock *sk)
...
@@ -682,8 +663,6 @@ static int ccid3_hc_tx_init(struct sock *sk)
struct
dccp_sock
*
dp
=
dccp_sk
(
sk
);
struct
dccp_sock
*
dp
=
dccp_sk
(
sk
);
struct
ccid3_hc_tx_sock
*
hctx
;
struct
ccid3_hc_tx_sock
*
hctx
;
ccid3_pr_debug
(
"%s, sk=%p
\n
"
,
dccp_role
(
sk
),
sk
);
dp
->
dccps_hc_tx_ccid_private
=
kmalloc
(
sizeof
(
*
hctx
),
gfp_any
());
dp
->
dccps_hc_tx_ccid_private
=
kmalloc
(
sizeof
(
*
hctx
),
gfp_any
());
if
(
dp
->
dccps_hc_tx_ccid_private
==
NULL
)
if
(
dp
->
dccps_hc_tx_ccid_private
==
NULL
)
return
-
ENOMEM
;
return
-
ENOMEM
;
...
@@ -712,7 +691,6 @@ static void ccid3_hc_tx_exit(struct sock *sk)
...
@@ -712,7 +691,6 @@ static void ccid3_hc_tx_exit(struct sock *sk)
struct
dccp_sock
*
dp
=
dccp_sk
(
sk
);
struct
dccp_sock
*
dp
=
dccp_sk
(
sk
);
struct
ccid3_hc_tx_sock
*
hctx
=
ccid3_hc_tx_sk
(
sk
);
struct
ccid3_hc_tx_sock
*
hctx
=
ccid3_hc_tx_sk
(
sk
);
ccid3_pr_debug
(
"%s, sk=%p
\n
"
,
dccp_role
(
sk
),
sk
);
BUG_ON
(
hctx
==
NULL
);
BUG_ON
(
hctx
==
NULL
);
ccid3_hc_tx_set_state
(
sk
,
TFRC_SSTATE_TERM
);
ccid3_hc_tx_set_state
(
sk
,
TFRC_SSTATE_TERM
);
...
@@ -792,10 +770,10 @@ static void ccid3_hc_rx_send_feedback(struct sock *sk)
...
@@ -792,10 +770,10 @@ static void ccid3_hc_rx_send_feedback(struct sock *sk)
}
}
packet
=
dccp_rx_hist_find_data_packet
(
&
hcrx
->
ccid3hcrx_hist
);
packet
=
dccp_rx_hist_find_data_packet
(
&
hcrx
->
ccid3hcrx_hist
);
if
(
packet
==
NULL
)
{
if
(
unlikely
(
packet
==
NULL
)
)
{
printk
(
KERN_CRIT
"%s: %s, sk=%p, no data packet in history!
\n
"
,
LIMIT_NETDEBUG
(
KERN_WARNING
"%s: %s, sk=%p, no data packet "
__FUNCTION__
,
dccp_role
(
sk
),
sk
);
"in history!
\n
"
,
dump_stack
(
);
__FUNCTION__
,
dccp_role
(
sk
),
sk
);
return
;
return
;
}
}
...
@@ -817,11 +795,12 @@ static void ccid3_hc_rx_send_feedback(struct sock *sk)
...
@@ -817,11 +795,12 @@ static void ccid3_hc_rx_send_feedback(struct sock *sk)
static
void
ccid3_hc_rx_insert_options
(
struct
sock
*
sk
,
struct
sk_buff
*
skb
)
static
void
ccid3_hc_rx_insert_options
(
struct
sock
*
sk
,
struct
sk_buff
*
skb
)
{
{
struct
ccid3_hc_rx_sock
*
hcrx
=
ccid3_hc_rx_sk
(
sk
);
const
struct
ccid3_hc_rx_sock
*
hcrx
=
ccid3_hc_rx_sk
(
sk
);
u32
x_recv
,
pinv
;
u32
x_recv
,
pinv
;
if
(
hcrx
==
NULL
||
!
(
sk
->
sk_state
==
DCCP_OPEN
||
BUG_ON
(
hcrx
==
NULL
);
sk
->
sk_state
==
DCCP_PARTOPEN
))
if
(
!
(
sk
->
sk_state
==
DCCP_OPEN
||
sk
->
sk_state
==
DCCP_PARTOPEN
))
return
;
return
;
DCCP_SKB_CB
(
skb
)
->
dccpd_ccval
=
hcrx
->
ccid3hcrx_last_counter
;
DCCP_SKB_CB
(
skb
)
->
dccpd_ccval
=
hcrx
->
ccid3hcrx_last_counter
;
...
@@ -878,17 +857,17 @@ static u32 ccid3_hc_rx_calc_first_li(struct sock *sk)
...
@@ -878,17 +857,17 @@ static u32 ccid3_hc_rx_calc_first_li(struct sock *sk)
}
}
}
}
if
(
step
==
0
)
{
if
(
unlikely
(
step
==
0
)
)
{
printk
(
KERN_CRIT
"%s: %s, sk=%p, packet history contains no
"
LIMIT_NETDEBUG
(
KERN_WARNING
"%s: %s, sk=%p, packet history
"
"
data packets!
\n
"
,
"contains no
data packets!
\n
"
,
__FUNCTION__
,
dccp_role
(
sk
),
sk
);
__FUNCTION__
,
dccp_role
(
sk
),
sk
);
return
~
0
;
return
~
0
;
}
}
if
(
interval
==
0
)
{
if
(
unlikely
(
interval
==
0
)
)
{
ccid3_pr_debug
(
"%s, sk=%p, Could not find a win_count
"
LIMIT_NETDEBUG
(
KERN_WARNING
"%s: %s, sk=%p, Could not find a
"
"interval > 0. Defaulting to 1
\n
"
,
"
win_count
interval > 0. Defaulting to 1
\n
"
,
dccp_role
(
sk
),
sk
);
__FUNCTION__
,
dccp_role
(
sk
),
sk
);
interval
=
1
;
interval
=
1
;
}
}
found:
found:
...
@@ -931,8 +910,9 @@ static void ccid3_hc_rx_update_li(struct sock *sk, u64 seq_loss, u8 win_loss)
...
@@ -931,8 +910,9 @@ static void ccid3_hc_rx_update_li(struct sock *sk, u64 seq_loss, u8 win_loss)
if
(
li_tail
==
NULL
)
if
(
li_tail
==
NULL
)
return
;
return
;
li_tail
->
dccplih_interval
=
ccid3_hc_rx_calc_first_li
(
sk
);
li_tail
->
dccplih_interval
=
ccid3_hc_rx_calc_first_li
(
sk
);
}
}
else
/* FIXME: find end of interval */
LIMIT_NETDEBUG
(
KERN_WARNING
"%s: FIXME: find end of "
"interval
\n
"
,
__FUNCTION__
);
}
}
static
void
ccid3_hc_rx_detect_loss
(
struct
sock
*
sk
)
static
void
ccid3_hc_rx_detect_loss
(
struct
sock
*
sk
)
...
@@ -956,10 +936,8 @@ static void ccid3_hc_rx_packet_recv(struct sock *sk, struct sk_buff *skb)
...
@@ -956,10 +936,8 @@ static void ccid3_hc_rx_packet_recv(struct sock *sk, struct sk_buff *skb)
u32
p_prev
,
r_sample
,
t_elapsed
;
u32
p_prev
,
r_sample
,
t_elapsed
;
int
ins
;
int
ins
;
if
(
hcrx
==
NULL
)
BUG_ON
(
hcrx
==
NULL
||
return
;
!
(
hcrx
->
ccid3hcrx_state
==
TFRC_RSTATE_NO_DATA
||
BUG_ON
(
!
(
hcrx
->
ccid3hcrx_state
==
TFRC_RSTATE_NO_DATA
||
hcrx
->
ccid3hcrx_state
==
TFRC_RSTATE_DATA
));
hcrx
->
ccid3hcrx_state
==
TFRC_RSTATE_DATA
));
opt_recv
=
&
dccp_sk
(
sk
)
->
dccps_options_received
;
opt_recv
=
&
dccp_sk
(
sk
)
->
dccps_options_received
;
...
@@ -978,8 +956,8 @@ static void ccid3_hc_rx_packet_recv(struct sock *sk, struct sk_buff *skb)
...
@@ -978,8 +956,8 @@ static void ccid3_hc_rx_packet_recv(struct sock *sk, struct sk_buff *skb)
t_elapsed
=
opt_recv
->
dccpor_elapsed_time
*
10
;
t_elapsed
=
opt_recv
->
dccpor_elapsed_time
*
10
;
if
(
unlikely
(
r_sample
<=
t_elapsed
))
if
(
unlikely
(
r_sample
<=
t_elapsed
))
LIMIT_NETDEBUG
(
KERN_WARNING
LIMIT_NETDEBUG
(
KERN_WARNING
"%s: r_sample=%uus, "
"
%s: r_sample=%uus,
t_elapsed=%uus
\n
"
,
"t_elapsed=%uus
\n
"
,
__FUNCTION__
,
r_sample
,
t_elapsed
);
__FUNCTION__
,
r_sample
,
t_elapsed
);
else
else
r_sample
-=
t_elapsed
;
r_sample
-=
t_elapsed
;
...
@@ -997,19 +975,16 @@ static void ccid3_hc_rx_packet_recv(struct sock *sk, struct sk_buff *skb)
...
@@ -997,19 +975,16 @@ static void ccid3_hc_rx_packet_recv(struct sock *sk, struct sk_buff *skb)
break
;
break
;
case
DCCP_PKT_DATA
:
case
DCCP_PKT_DATA
:
break
;
break
;
default:
default:
/* We're not interested in other packet types, move along */
ccid3_pr_debug
(
"%s, sk=%p, not DATA/DATAACK/ACK packet(%s)
\n
"
,
dccp_role
(
sk
),
sk
,
dccp_packet_name
(
DCCP_SKB_CB
(
skb
)
->
dccpd_type
));
return
;
return
;
}
}
packet
=
dccp_rx_hist_entry_new
(
ccid3_rx_hist
,
sk
,
opt_recv
->
dccpor_ndp
,
packet
=
dccp_rx_hist_entry_new
(
ccid3_rx_hist
,
sk
,
opt_recv
->
dccpor_ndp
,
skb
,
SLAB_ATOMIC
);
skb
,
SLAB_ATOMIC
);
if
(
packet
==
NULL
)
{
if
(
unlikely
(
packet
==
NULL
)
)
{
ccid3_pr_debug
(
"%s, sk=%p, Not enough mem to add rx packet
"
LIMIT_NETDEBUG
(
KERN_WARNING
"%s: %s, sk=%p, Not enough mem to
"
"to history (consider it lost)!
"
,
"add rx packet to history, consider it lost!
\n
"
,
dccp_role
(
sk
),
sk
);
__FUNCTION__
,
dccp_role
(
sk
),
sk
);
return
;
return
;
}
}
...
@@ -1102,10 +1077,7 @@ static void ccid3_hc_rx_exit(struct sock *sk)
...
@@ -1102,10 +1077,7 @@ static void ccid3_hc_rx_exit(struct sock *sk)
struct
ccid3_hc_rx_sock
*
hcrx
=
ccid3_hc_rx_sk
(
sk
);
struct
ccid3_hc_rx_sock
*
hcrx
=
ccid3_hc_rx_sk
(
sk
);
struct
dccp_sock
*
dp
=
dccp_sk
(
sk
);
struct
dccp_sock
*
dp
=
dccp_sk
(
sk
);
ccid3_pr_debug
(
"%s, sk=%p
\n
"
,
dccp_role
(
sk
),
sk
);
BUG_ON
(
hcrx
==
NULL
);
if
(
hcrx
==
NULL
)
return
;
ccid3_hc_rx_set_state
(
sk
,
TFRC_RSTATE_TERM
);
ccid3_hc_rx_set_state
(
sk
,
TFRC_RSTATE_TERM
);
...
@@ -1123,8 +1095,7 @@ static void ccid3_hc_rx_get_info(struct sock *sk, struct tcp_info *info)
...
@@ -1123,8 +1095,7 @@ static void ccid3_hc_rx_get_info(struct sock *sk, struct tcp_info *info)
{
{
const
struct
ccid3_hc_rx_sock
*
hcrx
=
ccid3_hc_rx_sk
(
sk
);
const
struct
ccid3_hc_rx_sock
*
hcrx
=
ccid3_hc_rx_sk
(
sk
);
if
(
hcrx
==
NULL
)
BUG_ON
(
hcrx
==
NULL
);
return
;
info
->
tcpi_ca_state
=
hcrx
->
ccid3hcrx_state
;
info
->
tcpi_ca_state
=
hcrx
->
ccid3hcrx_state
;
info
->
tcpi_options
|=
TCPI_OPT_TIMESTAMPS
;
info
->
tcpi_options
|=
TCPI_OPT_TIMESTAMPS
;
...
@@ -1135,8 +1106,7 @@ static void ccid3_hc_tx_get_info(struct sock *sk, struct tcp_info *info)
...
@@ -1135,8 +1106,7 @@ static void ccid3_hc_tx_get_info(struct sock *sk, struct tcp_info *info)
{
{
const
struct
ccid3_hc_tx_sock
*
hctx
=
ccid3_hc_tx_sk
(
sk
);
const
struct
ccid3_hc_tx_sock
*
hctx
=
ccid3_hc_tx_sk
(
sk
);
if
(
hctx
==
NULL
)
BUG_ON
(
hctx
==
NULL
);
return
;
info
->
tcpi_rto
=
hctx
->
ccid3hctx_t_rto
;
info
->
tcpi_rto
=
hctx
->
ccid3hctx_t_rto
;
info
->
tcpi_rtt
=
hctx
->
ccid3hctx_rtt
;
info
->
tcpi_rtt
=
hctx
->
ccid3hctx_rtt
;
...
...
net/dccp/ccids/ccid3.h
View file @
2a044515
...
@@ -48,6 +48,8 @@
...
@@ -48,6 +48,8 @@
/* Two seconds as per CCID3 spec */
/* Two seconds as per CCID3 spec */
#define TFRC_INITIAL_TIMEOUT (2 * USEC_PER_SEC)
#define TFRC_INITIAL_TIMEOUT (2 * USEC_PER_SEC)
#define TFRC_INITIAL_IPI (USEC_PER_SEC / 4)
/* In usecs - half the scheduling granularity as per RFC3448 4.6 */
/* In usecs - half the scheduling granularity as per RFC3448 4.6 */
#define TFRC_OPSYS_HALF_TIME_GRAN (USEC_PER_SEC / (2 * HZ))
#define TFRC_OPSYS_HALF_TIME_GRAN (USEC_PER_SEC / (2 * HZ))
...
...
net/dccp/ipv4.c
View file @
2a044515
...
@@ -641,16 +641,12 @@ int dccp_v4_send_reset(struct sock *sk, enum dccp_reset_codes code)
...
@@ -641,16 +641,12 @@ int dccp_v4_send_reset(struct sock *sk, enum dccp_reset_codes code)
skb
=
dccp_make_reset
(
sk
,
sk
->
sk_dst_cache
,
code
);
skb
=
dccp_make_reset
(
sk
,
sk
->
sk_dst_cache
,
code
);
if
(
skb
!=
NULL
)
{
if
(
skb
!=
NULL
)
{
const
struct
dccp_sock
*
dp
=
dccp_sk
(
sk
);
const
struct
inet_sock
*
inet
=
inet_sk
(
sk
);
const
struct
inet_sock
*
inet
=
inet_sk
(
sk
);
err
=
ip_build_and_send_pkt
(
skb
,
sk
,
err
=
ip_build_and_send_pkt
(
skb
,
sk
,
inet
->
saddr
,
inet
->
daddr
,
NULL
);
inet
->
saddr
,
inet
->
daddr
,
NULL
);
if
(
err
==
NET_XMIT_CN
)
if
(
err
==
NET_XMIT_CN
)
err
=
0
;
err
=
0
;
ccid_hc_rx_exit
(
dp
->
dccps_hc_rx_ccid
,
sk
);
ccid_hc_tx_exit
(
dp
->
dccps_hc_tx_ccid
,
sk
);
}
}
return
err
;
return
err
;
...
...
net/dccp/output.c
View file @
2a044515
...
@@ -522,7 +522,4 @@ void dccp_send_close(struct sock *sk, const int active)
...
@@ -522,7 +522,4 @@ void dccp_send_close(struct sock *sk, const int active)
dccp_transmit_skb
(
sk
,
skb_clone
(
skb
,
prio
));
dccp_transmit_skb
(
sk
,
skb_clone
(
skb
,
prio
));
}
else
}
else
dccp_transmit_skb
(
sk
,
skb
);
dccp_transmit_skb
(
sk
,
skb
);
ccid_hc_rx_exit
(
dp
->
dccps_hc_rx_ccid
,
sk
);
ccid_hc_tx_exit
(
dp
->
dccps_hc_tx_ccid
,
sk
);
}
}
net/ipv6/exthdrs.c
View file @
2a044515
...
@@ -406,8 +406,7 @@ ipv6_invert_rthdr(struct sock *sk, struct ipv6_rt_hdr *hdr)
...
@@ -406,8 +406,7 @@ ipv6_invert_rthdr(struct sock *sk, struct ipv6_rt_hdr *hdr)
memcpy
(
opt
->
srcrt
,
hdr
,
sizeof
(
*
hdr
));
memcpy
(
opt
->
srcrt
,
hdr
,
sizeof
(
*
hdr
));
irthdr
=
(
struct
rt0_hdr
*
)
opt
->
srcrt
;
irthdr
=
(
struct
rt0_hdr
*
)
opt
->
srcrt
;
/* Obsolete field, MBZ, when originated by us */
irthdr
->
reserved
=
0
;
irthdr
->
bitmap
=
0
;
opt
->
srcrt
->
segments_left
=
n
;
opt
->
srcrt
->
segments_left
=
n
;
for
(
i
=
0
;
i
<
n
;
i
++
)
for
(
i
=
0
;
i
<
n
;
i
++
)
memcpy
(
irthdr
->
addr
+
i
,
rthdr
->
addr
+
(
n
-
1
-
i
),
16
);
memcpy
(
irthdr
->
addr
+
i
,
rthdr
->
addr
+
(
n
-
1
-
i
),
16
);
...
...
net/ipv6/netfilter/ip6t_rt.c
View file @
2a044515
...
@@ -161,8 +161,8 @@ match(const struct sk_buff *skb,
...
@@ -161,8 +161,8 @@ match(const struct sk_buff *skb,
((
rtinfo
->
hdrlen
==
hdrlen
)
^
((
rtinfo
->
hdrlen
==
hdrlen
)
^
!!
(
rtinfo
->
invflags
&
IP6T_RT_INV_LEN
))));
!!
(
rtinfo
->
invflags
&
IP6T_RT_INV_LEN
))));
DEBUGP
(
"res %02X %02X %02X "
,
DEBUGP
(
"res %02X %02X %02X "
,
(
rtinfo
->
flags
&
IP6T_RT_RES
),
((
struct
rt0_hdr
*
)
rh
)
->
bitmap
,
(
rtinfo
->
flags
&
IP6T_RT_RES
),
((
struct
rt0_hdr
*
)
rh
)
->
reserved
,
!
((
rtinfo
->
flags
&
IP6T_RT_RES
)
&&
(((
struct
rt0_hdr
*
)
rh
)
->
bitmap
)));
!
((
rtinfo
->
flags
&
IP6T_RT_RES
)
&&
(((
struct
rt0_hdr
*
)
rh
)
->
reserved
)));
ret
=
(
rh
!=
NULL
)
ret
=
(
rh
!=
NULL
)
&&
&&
...
@@ -179,12 +179,12 @@ match(const struct sk_buff *skb,
...
@@ -179,12 +179,12 @@ match(const struct sk_buff *skb,
!!
(
rtinfo
->
invflags
&
IP6T_RT_INV_TYP
)));
!!
(
rtinfo
->
invflags
&
IP6T_RT_INV_TYP
)));
if
(
ret
&&
(
rtinfo
->
flags
&
IP6T_RT_RES
))
{
if
(
ret
&&
(
rtinfo
->
flags
&
IP6T_RT_RES
))
{
u_int32_t
*
bp
,
_bitmap
;
u_int32_t
*
rp
,
_reserved
;
b
p
=
skb_header_pointer
(
skb
,
r
p
=
skb_header_pointer
(
skb
,
ptr
+
offsetof
(
struct
rt0_hdr
,
bitmap
),
ptr
+
offsetof
(
struct
rt0_hdr
,
reserved
),
sizeof
(
_
bitmap
),
&
_bitmap
);
sizeof
(
_
reserved
),
&
_reserved
);
ret
=
(
*
b
p
==
0
);
ret
=
(
*
r
p
==
0
);
}
}
DEBUGP
(
"#%d "
,
rtinfo
->
addrnr
);
DEBUGP
(
"#%d "
,
rtinfo
->
addrnr
);
...
...
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