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
nexedi
linux
Commits
cf9e50a9
Commit
cf9e50a9
authored
Jan 19, 2006
by
David S. Miller
Browse files
Options
Browse Files
Download
Plain Diff
Merge master.kernel.org:/pub/scm/linux/kernel/git/sridhar/lksctp-2.6
parents
0f36b018
a7d1f1b6
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
155 additions
and
84 deletions
+155
-84
include/net/sctp/sctp.h
include/net/sctp/sctp.h
+2
-0
include/net/sctp/structs.h
include/net/sctp/structs.h
+51
-38
net/sctp/input.c
net/sctp/input.c
+62
-13
net/sctp/inqueue.c
net/sctp/inqueue.c
+3
-1
net/sctp/proc.c
net/sctp/proc.c
+12
-20
net/sctp/sm_make_chunk.c
net/sctp/sm_make_chunk.c
+13
-3
net/sctp/sm_sideeffect.c
net/sctp/sm_sideeffect.c
+2
-2
net/sctp/sm_statefuns.c
net/sctp/sm_statefuns.c
+2
-0
net/sctp/socket.c
net/sctp/socket.c
+5
-1
net/sctp/sysctl.c
net/sctp/sysctl.c
+2
-5
net/sctp/transport.c
net/sctp/transport.c
+1
-1
No files found.
include/net/sctp/sctp.h
View file @
cf9e50a9
...
@@ -175,6 +175,8 @@ void sctp_icmp_frag_needed(struct sock *, struct sctp_association *,
...
@@ -175,6 +175,8 @@ void sctp_icmp_frag_needed(struct sock *, struct sctp_association *,
void
sctp_icmp_proto_unreachable
(
struct
sock
*
sk
,
void
sctp_icmp_proto_unreachable
(
struct
sock
*
sk
,
struct
sctp_association
*
asoc
,
struct
sctp_association
*
asoc
,
struct
sctp_transport
*
t
);
struct
sctp_transport
*
t
);
void
sctp_backlog_migrate
(
struct
sctp_association
*
assoc
,
struct
sock
*
oldsk
,
struct
sock
*
newsk
);
/*
/*
* Section: Macros, externs, and inlines
* Section: Macros, externs, and inlines
...
...
include/net/sctp/structs.h
View file @
cf9e50a9
...
@@ -127,9 +127,9 @@ extern struct sctp_globals {
...
@@ -127,9 +127,9 @@ extern struct sctp_globals {
* RTO.Alpha - 1/8 (3 when converted to right shifts.)
* RTO.Alpha - 1/8 (3 when converted to right shifts.)
* RTO.Beta - 1/4 (2 when converted to right shifts.)
* RTO.Beta - 1/4 (2 when converted to right shifts.)
*/
*/
__u32
rto_initial
;
unsigned
long
rto_initial
;
__u32
rto_min
;
unsigned
long
rto_min
;
__u32
rto_max
;
unsigned
long
rto_max
;
/* Note: rto_alpha and rto_beta are really defined as inverse
/* Note: rto_alpha and rto_beta are really defined as inverse
* powers of two to facilitate integer operations.
* powers of two to facilitate integer operations.
...
@@ -140,12 +140,18 @@ extern struct sctp_globals {
...
@@ -140,12 +140,18 @@ extern struct sctp_globals {
/* Max.Burst - 4 */
/* Max.Burst - 4 */
int
max_burst
;
int
max_burst
;
/* Valid.Cookie.Life - 60 seconds */
int
valid_cookie_life
;
/* Whether Cookie Preservative is enabled(1) or not(0) */
/* Whether Cookie Preservative is enabled(1) or not(0) */
int
cookie_preserve_enable
;
int
cookie_preserve_enable
;
/* Valid.Cookie.Life - 60 seconds */
unsigned
long
valid_cookie_life
;
/* Delayed SACK timeout 200ms default*/
unsigned
long
sack_timeout
;
/* HB.interval - 30 seconds */
unsigned
long
hb_interval
;
/* Association.Max.Retrans - 10 attempts
/* Association.Max.Retrans - 10 attempts
* Path.Max.Retrans - 5 attempts (per destination address)
* Path.Max.Retrans - 5 attempts (per destination address)
* Max.Init.Retransmits - 8 attempts
* Max.Init.Retransmits - 8 attempts
...
@@ -168,12 +174,6 @@ extern struct sctp_globals {
...
@@ -168,12 +174,6 @@ extern struct sctp_globals {
*/
*/
int
rcvbuf_policy
;
int
rcvbuf_policy
;
/* Delayed SACK timeout 200ms default*/
int
sack_timeout
;
/* HB.interval - 30 seconds */
int
hb_interval
;
/* The following variables are implementation specific. */
/* The following variables are implementation specific. */
/* Default initialization values to be applied to new associations. */
/* Default initialization values to be applied to new associations. */
...
@@ -405,8 +405,9 @@ struct sctp_cookie {
...
@@ -405,8 +405,9 @@ struct sctp_cookie {
/* The format of our cookie that we send to our peer. */
/* The format of our cookie that we send to our peer. */
struct
sctp_signed_cookie
{
struct
sctp_signed_cookie
{
__u8
signature
[
SCTP_SECRET_SIZE
];
__u8
signature
[
SCTP_SECRET_SIZE
];
__u32
__pad
;
/* force sctp_cookie alignment to 64 bits */
struct
sctp_cookie
c
;
struct
sctp_cookie
c
;
};
}
__attribute__
((
packed
))
;
/* This is another convenience type to allocate memory for address
/* This is another convenience type to allocate memory for address
* params for the maximum size and pass such structures around
* params for the maximum size and pass such structures around
...
@@ -827,7 +828,7 @@ struct sctp_transport {
...
@@ -827,7 +828,7 @@ struct sctp_transport {
__u32
rtt
;
/* This is the most recent RTT. */
__u32
rtt
;
/* This is the most recent RTT. */
/* RTO : The current retransmission timeout value. */
/* RTO : The current retransmission timeout value. */
__u32
rto
;
unsigned
long
rto
;
/* RTTVAR : The current RTT variation. */
/* RTTVAR : The current RTT variation. */
__u32
rttvar
;
__u32
rttvar
;
...
@@ -877,22 +878,10 @@ struct sctp_transport {
...
@@ -877,22 +878,10 @@ struct sctp_transport {
/* Heartbeat interval: The endpoint sends out a Heartbeat chunk to
/* Heartbeat interval: The endpoint sends out a Heartbeat chunk to
* the destination address every heartbeat interval.
* the destination address every heartbeat interval.
*/
*/
__u32
hbinterval
;
unsigned
long
hbinterval
;
/* This is the max_retrans value for the transport and will
* be initialized from the assocs value. This can be changed
* using SCTP_SET_PEER_ADDR_PARAMS socket option.
*/
__u16
pathmaxrxt
;
/* PMTU : The current known path MTU. */
__u32
pathmtu
;
/* SACK delay timeout */
/* SACK delay timeout */
__u32
sackdelay
;
unsigned
long
sackdelay
;
/* Flags controling Heartbeat, SACK delay, and Path MTU Discovery. */
__u32
param_flags
;
/* When was the last time (in jiffies) that we heard from this
/* When was the last time (in jiffies) that we heard from this
* transport? We use this to pick new active and retran paths.
* transport? We use this to pick new active and retran paths.
...
@@ -904,6 +893,18 @@ struct sctp_transport {
...
@@ -904,6 +893,18 @@ struct sctp_transport {
*/
*/
unsigned
long
last_time_ecne_reduced
;
unsigned
long
last_time_ecne_reduced
;
/* This is the max_retrans value for the transport and will
* be initialized from the assocs value. This can be changed
* using SCTP_SET_PEER_ADDR_PARAMS socket option.
*/
__u16
pathmaxrxt
;
/* PMTU : The current known path MTU. */
__u32
pathmtu
;
/* Flags controling Heartbeat, SACK delay, and Path MTU Discovery. */
__u32
param_flags
;
/* The number of times INIT has been sent on this transport. */
/* The number of times INIT has been sent on this transport. */
int
init_sent_count
;
int
init_sent_count
;
...
@@ -1249,6 +1250,14 @@ struct sctp_endpoint {
...
@@ -1249,6 +1250,14 @@ struct sctp_endpoint {
int
last_key
;
int
last_key
;
int
key_changed_at
;
int
key_changed_at
;
/* digest: This is a digest of the sctp cookie. This field is
* only used on the receive path when we try to validate
* that the cookie has not been tampered with. We put
* this here so we pre-allocate this once and can re-use
* on every receive.
*/
__u8
digest
[
SCTP_SIGNATURE_SIZE
];
/* sendbuf acct. policy. */
/* sendbuf acct. policy. */
__u32
sndbuf_policy
;
__u32
sndbuf_policy
;
...
@@ -1499,9 +1508,9 @@ struct sctp_association {
...
@@ -1499,9 +1508,9 @@ struct sctp_association {
* These values will be initialized by system defaults, but can
* These values will be initialized by system defaults, but can
* be modified via the SCTP_RTOINFO socket option.
* be modified via the SCTP_RTOINFO socket option.
*/
*/
__u32
rto_initial
;
unsigned
long
rto_initial
;
__u32
rto_max
;
unsigned
long
rto_max
;
__u32
rto_min
;
unsigned
long
rto_min
;
/* Maximum number of new data packets that can be sent in a burst. */
/* Maximum number of new data packets that can be sent in a burst. */
int
max_burst
;
int
max_burst
;
...
@@ -1519,13 +1528,13 @@ struct sctp_association {
...
@@ -1519,13 +1528,13 @@ struct sctp_association {
__u16
init_retries
;
__u16
init_retries
;
/* The largest timeout or RTO value to use in attempting an INIT */
/* The largest timeout or RTO value to use in attempting an INIT */
__u16
max_init_timeo
;
unsigned
long
max_init_timeo
;
/* Heartbeat interval: The endpoint sends out a Heartbeat chunk to
/* Heartbeat interval: The endpoint sends out a Heartbeat chunk to
* the destination address every heartbeat interval. This value
* the destination address every heartbeat interval. This value
* will be inherited by all new transports.
* will be inherited by all new transports.
*/
*/
__u32
hbinterval
;
unsigned
long
hbinterval
;
/* This is the max_retrans value for new transports in the
/* This is the max_retrans value for new transports in the
* association.
* association.
...
@@ -1537,13 +1546,14 @@ struct sctp_association {
...
@@ -1537,13 +1546,14 @@ struct sctp_association {
*/
*/
__u32
pathmtu
;
__u32
pathmtu
;
/* SACK delay timeout */
__u32
sackdelay
;
/* Flags controling Heartbeat, SACK delay, and Path MTU Discovery. */
/* Flags controling Heartbeat, SACK delay, and Path MTU Discovery. */
__u32
param_flags
;
__u32
param_flags
;
int
timeouts
[
SCTP_NUM_TIMEOUT_TYPES
];
/* SACK delay timeout */
unsigned
long
sackdelay
;
unsigned
long
timeouts
[
SCTP_NUM_TIMEOUT_TYPES
];
struct
timer_list
timers
[
SCTP_NUM_TIMEOUT_TYPES
];
struct
timer_list
timers
[
SCTP_NUM_TIMEOUT_TYPES
];
/* Transport to which SHUTDOWN chunk was last sent. */
/* Transport to which SHUTDOWN chunk was last sent. */
...
@@ -1648,7 +1658,10 @@ struct sctp_association {
...
@@ -1648,7 +1658,10 @@ struct sctp_association {
/* How many duplicated TSNs have we seen? */
/* How many duplicated TSNs have we seen? */
int
numduptsns
;
int
numduptsns
;
/* Number of seconds of idle time before an association is closed. */
/* Number of seconds of idle time before an association is closed.
* In the association context, this is really used as a boolean
* since the real timeout is stored in the timeouts array
*/
__u32
autoclose
;
__u32
autoclose
;
/* These are to support
/* These are to support
...
...
net/sctp/input.c
View file @
cf9e50a9
...
@@ -257,20 +257,26 @@ int sctp_rcv(struct sk_buff *skb)
...
@@ -257,20 +257,26 @@ int sctp_rcv(struct sk_buff *skb)
*/
*/
sctp_bh_lock_sock
(
sk
);
sctp_bh_lock_sock
(
sk
);
/* It is possible that the association could have moved to a different
* socket if it is peeled off. If so, update the sk.
*/
if
(
sk
!=
rcvr
->
sk
)
{
sctp_bh_lock_sock
(
rcvr
->
sk
);
sctp_bh_unlock_sock
(
sk
);
sk
=
rcvr
->
sk
;
}
if
(
sock_owned_by_user
(
sk
))
if
(
sock_owned_by_user
(
sk
))
sk_add_backlog
(
sk
,
skb
);
sk_add_backlog
(
sk
,
skb
);
else
else
sctp_backlog_rcv
(
sk
,
skb
);
sctp_backlog_rcv
(
sk
,
skb
);
/* Release the sock and
any reference counts we took in the
/* Release the sock and
the sock ref we took in the lookup calls.
*
lookup calls
.
*
The asoc/ep ref will be released in sctp_backlog_rcv
.
*/
*/
sctp_bh_unlock_sock
(
sk
);
sctp_bh_unlock_sock
(
sk
);
if
(
asoc
)
sctp_association_put
(
asoc
);
else
sctp_endpoint_put
(
ep
);
sock_put
(
sk
);
sock_put
(
sk
);
return
ret
;
return
ret
;
discard_it:
discard_it:
...
@@ -296,12 +302,50 @@ int sctp_rcv(struct sk_buff *skb)
...
@@ -296,12 +302,50 @@ int sctp_rcv(struct sk_buff *skb)
int
sctp_backlog_rcv
(
struct
sock
*
sk
,
struct
sk_buff
*
skb
)
int
sctp_backlog_rcv
(
struct
sock
*
sk
,
struct
sk_buff
*
skb
)
{
{
struct
sctp_chunk
*
chunk
=
SCTP_INPUT_CB
(
skb
)
->
chunk
;
struct
sctp_chunk
*
chunk
=
SCTP_INPUT_CB
(
skb
)
->
chunk
;
struct
sctp_inq
*
inqueue
=
&
chunk
->
rcvr
->
inqueue
;
struct
sctp_inq
*
inqueue
=
NULL
;
struct
sctp_ep_common
*
rcvr
=
NULL
;
sctp_inq_push
(
inqueue
,
chunk
);
rcvr
=
chunk
->
rcvr
;
BUG_TRAP
(
rcvr
->
sk
==
sk
);
if
(
rcvr
->
dead
)
{
sctp_chunk_free
(
chunk
);
}
else
{
inqueue
=
&
chunk
->
rcvr
->
inqueue
;
sctp_inq_push
(
inqueue
,
chunk
);
}
/* Release the asoc/ep ref we took in the lookup calls in sctp_rcv. */
if
(
SCTP_EP_TYPE_ASSOCIATION
==
rcvr
->
type
)
sctp_association_put
(
sctp_assoc
(
rcvr
));
else
sctp_endpoint_put
(
sctp_ep
(
rcvr
));
return
0
;
return
0
;
}
}
void
sctp_backlog_migrate
(
struct
sctp_association
*
assoc
,
struct
sock
*
oldsk
,
struct
sock
*
newsk
)
{
struct
sk_buff
*
skb
;
struct
sctp_chunk
*
chunk
;
skb
=
oldsk
->
sk_backlog
.
head
;
oldsk
->
sk_backlog
.
head
=
oldsk
->
sk_backlog
.
tail
=
NULL
;
while
(
skb
!=
NULL
)
{
struct
sk_buff
*
next
=
skb
->
next
;
chunk
=
SCTP_INPUT_CB
(
skb
)
->
chunk
;
skb
->
next
=
NULL
;
if
(
&
assoc
->
base
==
chunk
->
rcvr
)
sk_add_backlog
(
newsk
,
skb
);
else
sk_add_backlog
(
oldsk
,
skb
);
skb
=
next
;
}
}
/* Handle icmp frag needed error. */
/* Handle icmp frag needed error. */
void
sctp_icmp_frag_needed
(
struct
sock
*
sk
,
struct
sctp_association
*
asoc
,
void
sctp_icmp_frag_needed
(
struct
sock
*
sk
,
struct
sctp_association
*
asoc
,
struct
sctp_transport
*
t
,
__u32
pmtu
)
struct
sctp_transport
*
t
,
__u32
pmtu
)
...
@@ -544,10 +588,16 @@ int sctp_rcv_ootb(struct sk_buff *skb)
...
@@ -544,10 +588,16 @@ int sctp_rcv_ootb(struct sk_buff *skb)
sctp_errhdr_t
*
err
;
sctp_errhdr_t
*
err
;
ch
=
(
sctp_chunkhdr_t
*
)
skb
->
data
;
ch
=
(
sctp_chunkhdr_t
*
)
skb
->
data
;
ch_end
=
((
__u8
*
)
ch
)
+
WORD_ROUND
(
ntohs
(
ch
->
length
));
/* Scan through all the chunks in the packet. */
/* Scan through all the chunks in the packet. */
while
(
ch_end
>
(
__u8
*
)
ch
&&
ch_end
<
skb
->
tail
)
{
do
{
/* Break out if chunk length is less then minimal. */
if
(
ntohs
(
ch
->
length
)
<
sizeof
(
sctp_chunkhdr_t
))
break
;
ch_end
=
((
__u8
*
)
ch
)
+
WORD_ROUND
(
ntohs
(
ch
->
length
));
if
(
ch_end
>
skb
->
tail
)
break
;
/* RFC 8.4, 2) If the OOTB packet contains an ABORT chunk, the
/* RFC 8.4, 2) If the OOTB packet contains an ABORT chunk, the
* receiver MUST silently discard the OOTB packet and take no
* receiver MUST silently discard the OOTB packet and take no
...
@@ -578,8 +628,7 @@ int sctp_rcv_ootb(struct sk_buff *skb)
...
@@ -578,8 +628,7 @@ int sctp_rcv_ootb(struct sk_buff *skb)
}
}
ch
=
(
sctp_chunkhdr_t
*
)
ch_end
;
ch
=
(
sctp_chunkhdr_t
*
)
ch_end
;
ch_end
=
((
__u8
*
)
ch
)
+
WORD_ROUND
(
ntohs
(
ch
->
length
));
}
while
(
ch_end
<
skb
->
tail
);
}
return
0
;
return
0
;
...
...
net/sctp/inqueue.c
View file @
cf9e50a9
...
@@ -73,8 +73,10 @@ void sctp_inq_free(struct sctp_inq *queue)
...
@@ -73,8 +73,10 @@ void sctp_inq_free(struct sctp_inq *queue)
/* If there is a packet which is currently being worked on,
/* If there is a packet which is currently being worked on,
* free it as well.
* free it as well.
*/
*/
if
(
queue
->
in_progress
)
if
(
queue
->
in_progress
)
{
sctp_chunk_free
(
queue
->
in_progress
);
sctp_chunk_free
(
queue
->
in_progress
);
queue
->
in_progress
=
NULL
;
}
if
(
queue
->
malloced
)
{
if
(
queue
->
malloced
)
{
/* Dump the master memory segment. */
/* Dump the master memory segment. */
...
...
net/sctp/proc.c
View file @
cf9e50a9
...
@@ -176,7 +176,7 @@ static void sctp_seq_dump_remote_addrs(struct seq_file *seq, struct sctp_associa
...
@@ -176,7 +176,7 @@ static void sctp_seq_dump_remote_addrs(struct seq_file *seq, struct sctp_associa
static
void
*
sctp_eps_seq_start
(
struct
seq_file
*
seq
,
loff_t
*
pos
)
static
void
*
sctp_eps_seq_start
(
struct
seq_file
*
seq
,
loff_t
*
pos
)
{
{
if
(
*
pos
>
sctp_ep_hashsize
)
if
(
*
pos
>
=
sctp_ep_hashsize
)
return
NULL
;
return
NULL
;
if
(
*
pos
<
0
)
if
(
*
pos
<
0
)
...
@@ -185,8 +185,6 @@ static void * sctp_eps_seq_start(struct seq_file *seq, loff_t *pos)
...
@@ -185,8 +185,6 @@ static void * sctp_eps_seq_start(struct seq_file *seq, loff_t *pos)
if
(
*
pos
==
0
)
if
(
*
pos
==
0
)
seq_printf
(
seq
,
" ENDPT SOCK STY SST HBKT LPORT UID INODE LADDRS
\n
"
);
seq_printf
(
seq
,
" ENDPT SOCK STY SST HBKT LPORT UID INODE LADDRS
\n
"
);
++*
pos
;
return
(
void
*
)
pos
;
return
(
void
*
)
pos
;
}
}
...
@@ -198,11 +196,9 @@ static void sctp_eps_seq_stop(struct seq_file *seq, void *v)
...
@@ -198,11 +196,9 @@ static void sctp_eps_seq_stop(struct seq_file *seq, void *v)
static
void
*
sctp_eps_seq_next
(
struct
seq_file
*
seq
,
void
*
v
,
loff_t
*
pos
)
static
void
*
sctp_eps_seq_next
(
struct
seq_file
*
seq
,
void
*
v
,
loff_t
*
pos
)
{
{
if
(
*
pos
>
sctp_ep_hashsize
)
if
(
++*
pos
>=
sctp_ep_hashsize
)
return
NULL
;
return
NULL
;
++*
pos
;
return
pos
;
return
pos
;
}
}
...
@@ -214,19 +210,19 @@ static int sctp_eps_seq_show(struct seq_file *seq, void *v)
...
@@ -214,19 +210,19 @@ static int sctp_eps_seq_show(struct seq_file *seq, void *v)
struct
sctp_ep_common
*
epb
;
struct
sctp_ep_common
*
epb
;
struct
sctp_endpoint
*
ep
;
struct
sctp_endpoint
*
ep
;
struct
sock
*
sk
;
struct
sock
*
sk
;
int
hash
=
*
(
in
t
*
)
v
;
int
hash
=
*
(
loff_
t
*
)
v
;
if
(
hash
>
sctp_ep_hashsize
)
if
(
hash
>
=
sctp_ep_hashsize
)
return
-
ENOMEM
;
return
-
ENOMEM
;
head
=
&
sctp_ep_hashtable
[
hash
-
1
];
head
=
&
sctp_ep_hashtable
[
hash
];
sctp_local_bh_disable
();
sctp_local_bh_disable
();
read_lock
(
&
head
->
lock
);
read_lock
(
&
head
->
lock
);
for
(
epb
=
head
->
chain
;
epb
;
epb
=
epb
->
next
)
{
for
(
epb
=
head
->
chain
;
epb
;
epb
=
epb
->
next
)
{
ep
=
sctp_ep
(
epb
);
ep
=
sctp_ep
(
epb
);
sk
=
epb
->
sk
;
sk
=
epb
->
sk
;
seq_printf
(
seq
,
"%8p %8p %-3d %-3d %-4d %-5d %5d %5lu "
,
ep
,
sk
,
seq_printf
(
seq
,
"%8p %8p %-3d %-3d %-4d %-5d %5d %5lu "
,
ep
,
sk
,
sctp_sk
(
sk
)
->
type
,
sk
->
sk_state
,
hash
-
1
,
sctp_sk
(
sk
)
->
type
,
sk
->
sk_state
,
hash
,
epb
->
bind_addr
.
port
,
epb
->
bind_addr
.
port
,
sock_i_uid
(
sk
),
sock_i_ino
(
sk
));
sock_i_uid
(
sk
),
sock_i_ino
(
sk
));
...
@@ -283,7 +279,7 @@ void sctp_eps_proc_exit(void)
...
@@ -283,7 +279,7 @@ void sctp_eps_proc_exit(void)
static
void
*
sctp_assocs_seq_start
(
struct
seq_file
*
seq
,
loff_t
*
pos
)
static
void
*
sctp_assocs_seq_start
(
struct
seq_file
*
seq
,
loff_t
*
pos
)
{
{
if
(
*
pos
>
sctp_assoc_hashsize
)
if
(
*
pos
>
=
sctp_assoc_hashsize
)
return
NULL
;
return
NULL
;
if
(
*
pos
<
0
)
if
(
*
pos
<
0
)
...
@@ -293,8 +289,6 @@ static void * sctp_assocs_seq_start(struct seq_file *seq, loff_t *pos)
...
@@ -293,8 +289,6 @@ static void * sctp_assocs_seq_start(struct seq_file *seq, loff_t *pos)
seq_printf
(
seq
,
" ASSOC SOCK STY SST ST HBKT ASSOC-ID TX_QUEUE RX_QUEUE UID INODE LPORT "
seq_printf
(
seq
,
" ASSOC SOCK STY SST ST HBKT ASSOC-ID TX_QUEUE RX_QUEUE UID INODE LPORT "
"RPORT LADDRS <-> RADDRS
\n
"
);
"RPORT LADDRS <-> RADDRS
\n
"
);
++*
pos
;
return
(
void
*
)
pos
;
return
(
void
*
)
pos
;
}
}
...
@@ -306,11 +300,9 @@ static void sctp_assocs_seq_stop(struct seq_file *seq, void *v)
...
@@ -306,11 +300,9 @@ static void sctp_assocs_seq_stop(struct seq_file *seq, void *v)
static
void
*
sctp_assocs_seq_next
(
struct
seq_file
*
seq
,
void
*
v
,
loff_t
*
pos
)
static
void
*
sctp_assocs_seq_next
(
struct
seq_file
*
seq
,
void
*
v
,
loff_t
*
pos
)
{
{
if
(
*
pos
>
sctp_assoc_hashsize
)
if
(
++*
pos
>=
sctp_assoc_hashsize
)
return
NULL
;
return
NULL
;
++*
pos
;
return
pos
;
return
pos
;
}
}
...
@@ -321,12 +313,12 @@ static int sctp_assocs_seq_show(struct seq_file *seq, void *v)
...
@@ -321,12 +313,12 @@ static int sctp_assocs_seq_show(struct seq_file *seq, void *v)
struct
sctp_ep_common
*
epb
;
struct
sctp_ep_common
*
epb
;
struct
sctp_association
*
assoc
;
struct
sctp_association
*
assoc
;
struct
sock
*
sk
;
struct
sock
*
sk
;
int
hash
=
*
(
in
t
*
)
v
;
int
hash
=
*
(
loff_
t
*
)
v
;
if
(
hash
>
sctp_assoc_hashsize
)
if
(
hash
>
=
sctp_assoc_hashsize
)
return
-
ENOMEM
;
return
-
ENOMEM
;
head
=
&
sctp_assoc_hashtable
[
hash
-
1
];
head
=
&
sctp_assoc_hashtable
[
hash
];
sctp_local_bh_disable
();
sctp_local_bh_disable
();
read_lock
(
&
head
->
lock
);
read_lock
(
&
head
->
lock
);
for
(
epb
=
head
->
chain
;
epb
;
epb
=
epb
->
next
)
{
for
(
epb
=
head
->
chain
;
epb
;
epb
=
epb
->
next
)
{
...
@@ -335,7 +327,7 @@ static int sctp_assocs_seq_show(struct seq_file *seq, void *v)
...
@@ -335,7 +327,7 @@ static int sctp_assocs_seq_show(struct seq_file *seq, void *v)
seq_printf
(
seq
,
seq_printf
(
seq
,
"%8p %8p %-3d %-3d %-2d %-4d %4d %8d %8d %7d %5lu %-5d %5d "
,
"%8p %8p %-3d %-3d %-2d %-4d %4d %8d %8d %7d %5lu %-5d %5d "
,
assoc
,
sk
,
sctp_sk
(
sk
)
->
type
,
sk
->
sk_state
,
assoc
,
sk
,
sctp_sk
(
sk
)
->
type
,
sk
->
sk_state
,
assoc
->
state
,
hash
-
1
,
assoc
->
assoc_id
,
assoc
->
state
,
hash
,
assoc
->
assoc_id
,
(
sk
->
sk_rcvbuf
-
assoc
->
rwnd
),
(
sk
->
sk_rcvbuf
-
assoc
->
rwnd
),
assoc
->
sndbuf_used
,
assoc
->
sndbuf_used
,
sock_i_uid
(
sk
),
sock_i_ino
(
sk
),
sock_i_uid
(
sk
),
sock_i_ino
(
sk
),
...
...
net/sctp/sm_make_chunk.c
View file @
cf9e50a9
...
@@ -1275,7 +1275,12 @@ static sctp_cookie_param_t *sctp_pack_cookie(const struct sctp_endpoint *ep,
...
@@ -1275,7 +1275,12 @@ static sctp_cookie_param_t *sctp_pack_cookie(const struct sctp_endpoint *ep,
unsigned
int
keylen
;
unsigned
int
keylen
;
char
*
key
;
char
*
key
;
headersize
=
sizeof
(
sctp_paramhdr_t
)
+
SCTP_SECRET_SIZE
;
/* Header size is static data prior to the actual cookie, including
* any padding.
*/
headersize
=
sizeof
(
sctp_paramhdr_t
)
+
(
sizeof
(
struct
sctp_signed_cookie
)
-
sizeof
(
struct
sctp_cookie
));
bodysize
=
sizeof
(
struct
sctp_cookie
)
bodysize
=
sizeof
(
struct
sctp_cookie
)
+
ntohs
(
init_chunk
->
chunk_hdr
->
length
)
+
addrs_len
;
+
ntohs
(
init_chunk
->
chunk_hdr
->
length
)
+
addrs_len
;
...
@@ -1354,7 +1359,7 @@ struct sctp_association *sctp_unpack_cookie(
...
@@ -1354,7 +1359,7 @@ struct sctp_association *sctp_unpack_cookie(
struct
sctp_signed_cookie
*
cookie
;
struct
sctp_signed_cookie
*
cookie
;
struct
sctp_cookie
*
bear_cookie
;
struct
sctp_cookie
*
bear_cookie
;
int
headersize
,
bodysize
,
fixed_size
;
int
headersize
,
bodysize
,
fixed_size
;
__u8
digest
[
SCTP_SIGNATURE_SIZE
]
;
__u8
*
digest
=
ep
->
digest
;
struct
scatterlist
sg
;
struct
scatterlist
sg
;
unsigned
int
keylen
,
len
;
unsigned
int
keylen
,
len
;
char
*
key
;
char
*
key
;
...
@@ -1362,7 +1367,12 @@ struct sctp_association *sctp_unpack_cookie(
...
@@ -1362,7 +1367,12 @@ struct sctp_association *sctp_unpack_cookie(
struct
sk_buff
*
skb
=
chunk
->
skb
;
struct
sk_buff
*
skb
=
chunk
->
skb
;
struct
timeval
tv
;
struct
timeval
tv
;
headersize
=
sizeof
(
sctp_chunkhdr_t
)
+
SCTP_SECRET_SIZE
;
/* Header size is static data prior to the actual cookie, including
* any padding.
*/
headersize
=
sizeof
(
sctp_chunkhdr_t
)
+
(
sizeof
(
struct
sctp_signed_cookie
)
-
sizeof
(
struct
sctp_cookie
));
bodysize
=
ntohs
(
chunk
->
chunk_hdr
->
length
)
-
headersize
;
bodysize
=
ntohs
(
chunk
->
chunk_hdr
->
length
)
-
headersize
;
fixed_size
=
headersize
+
sizeof
(
struct
sctp_cookie
);
fixed_size
=
headersize
+
sizeof
(
struct
sctp_cookie
);
...
...
net/sctp/sm_sideeffect.c
View file @
cf9e50a9
...
@@ -1300,7 +1300,7 @@ static int sctp_cmd_interpreter(sctp_event_t event_type,
...
@@ -1300,7 +1300,7 @@ static int sctp_cmd_interpreter(sctp_event_t event_type,
"T1 INIT Timeout adjustment"
"T1 INIT Timeout adjustment"
" init_err_counter: %d"
" init_err_counter: %d"
" cycle: %d"
" cycle: %d"
" timeout: %d
\n
"
,
" timeout: %
l
d
\n
"
,
asoc
->
init_err_counter
,
asoc
->
init_err_counter
,
asoc
->
init_cycle
,
asoc
->
init_cycle
,
asoc
->
timeouts
[
SCTP_EVENT_TIMEOUT_T1_INIT
]);
asoc
->
timeouts
[
SCTP_EVENT_TIMEOUT_T1_INIT
]);
...
@@ -1328,7 +1328,7 @@ static int sctp_cmd_interpreter(sctp_event_t event_type,
...
@@ -1328,7 +1328,7 @@ static int sctp_cmd_interpreter(sctp_event_t event_type,
SCTP_DEBUG_PRINTK
(
SCTP_DEBUG_PRINTK
(
"T1 COOKIE Timeout adjustment"
"T1 COOKIE Timeout adjustment"
" init_err_counter: %d"
" init_err_counter: %d"
" timeout: %d
\n
"
,
" timeout: %
l
d
\n
"
,
asoc
->
init_err_counter
,
asoc
->
init_err_counter
,
asoc
->
timeouts
[
SCTP_EVENT_TIMEOUT_T1_COOKIE
]);
asoc
->
timeouts
[
SCTP_EVENT_TIMEOUT_T1_COOKIE
]);
...
...
net/sctp/sm_statefuns.c
View file @
cf9e50a9
...
@@ -3090,6 +3090,8 @@ sctp_disposition_t sctp_sf_ootb(const struct sctp_endpoint *ep,
...
@@ -3090,6 +3090,8 @@ sctp_disposition_t sctp_sf_ootb(const struct sctp_endpoint *ep,
break
;
break
;
ch_end
=
((
__u8
*
)
ch
)
+
WORD_ROUND
(
ntohs
(
ch
->
length
));
ch_end
=
((
__u8
*
)
ch
)
+
WORD_ROUND
(
ntohs
(
ch
->
length
));
if
(
ch_end
>
skb
->
tail
)
break
;
if
(
SCTP_CID_SHUTDOWN_ACK
==
ch
->
type
)
if
(
SCTP_CID_SHUTDOWN_ACK
==
ch
->
type
)
ootb_shut_ack
=
1
;
ootb_shut_ack
=
1
;
...
...
net/sctp/socket.c
View file @
cf9e50a9
...
@@ -2995,7 +2995,7 @@ SCTP_STATIC int sctp_init_sock(struct sock *sk)
...
@@ -2995,7 +2995,7 @@ SCTP_STATIC int sctp_init_sock(struct sock *sk)
sp
->
hbinterval
=
jiffies_to_msecs
(
sctp_hb_interval
);
sp
->
hbinterval
=
jiffies_to_msecs
(
sctp_hb_interval
);
sp
->
pathmaxrxt
=
sctp_max_retrans_path
;
sp
->
pathmaxrxt
=
sctp_max_retrans_path
;
sp
->
pathmtu
=
0
;
// allow default discovery
sp
->
pathmtu
=
0
;
// allow default discovery
sp
->
sackdelay
=
sctp_sack_timeout
;
sp
->
sackdelay
=
jiffies_to_msecs
(
sctp_sack_timeout
)
;
sp
->
param_flags
=
SPP_HB_ENABLE
|
sp
->
param_flags
=
SPP_HB_ENABLE
|
SPP_PMTUD_ENABLE
|
SPP_PMTUD_ENABLE
|
SPP_SACKDELAY_ENABLE
;
SPP_SACKDELAY_ENABLE
;
...
@@ -5602,8 +5602,12 @@ static void sctp_sock_migrate(struct sock *oldsk, struct sock *newsk,
...
@@ -5602,8 +5602,12 @@ static void sctp_sock_migrate(struct sock *oldsk, struct sock *newsk,
*/
*/
newsp
->
type
=
type
;
newsp
->
type
=
type
;
spin_lock_bh
(
&
oldsk
->
sk_lock
.
slock
);
/* Migrate the backlog from oldsk to newsk. */
sctp_backlog_migrate
(
assoc
,
oldsk
,
newsk
);
/* Migrate the association to the new socket. */
/* Migrate the association to the new socket. */
sctp_assoc_migrate
(
assoc
,
newsk
);
sctp_assoc_migrate
(
assoc
,
newsk
);
spin_unlock_bh
(
&
oldsk
->
sk_lock
.
slock
);
/* If the association on the newsk is already closed before accept()
/* If the association on the newsk is already closed before accept()
* is called, set RCV_SHUTDOWN flag.
* is called, set RCV_SHUTDOWN flag.
...
...
net/sctp/sysctl.c
View file @
cf9e50a9
...
@@ -159,12 +159,9 @@ static ctl_table sctp_table[] = {
...
@@ -159,12 +159,9 @@ static ctl_table sctp_table[] = {
.
ctl_name
=
NET_SCTP_PRESERVE_ENABLE
,
.
ctl_name
=
NET_SCTP_PRESERVE_ENABLE
,
.
procname
=
"cookie_preserve_enable"
,
.
procname
=
"cookie_preserve_enable"
,
.
data
=
&
sctp_cookie_preserve_enable
,
.
data
=
&
sctp_cookie_preserve_enable
,
.
maxlen
=
sizeof
(
long
),
.
maxlen
=
sizeof
(
int
),
.
mode
=
0644
,
.
mode
=
0644
,
.
proc_handler
=
&
proc_doulongvec_ms_jiffies_minmax
,
.
proc_handler
=
&
proc_dointvec
.
strategy
=
&
sctp_sysctl_jiffies_ms
,
.
extra1
=
&
rto_timer_min
,
.
extra2
=
&
rto_timer_max
},
},
{
{
.
ctl_name
=
NET_SCTP_RTO_ALPHA
,
.
ctl_name
=
NET_SCTP_RTO_ALPHA
,
...
...
net/sctp/transport.c
View file @
cf9e50a9
...
@@ -350,7 +350,7 @@ void sctp_transport_update_rto(struct sctp_transport *tp, __u32 rtt)
...
@@ -350,7 +350,7 @@ void sctp_transport_update_rto(struct sctp_transport *tp, __u32 rtt)
tp
->
rto_pending
=
0
;
tp
->
rto_pending
=
0
;
SCTP_DEBUG_PRINTK
(
"%s: transport: %p, rtt: %d, srtt: %d "
SCTP_DEBUG_PRINTK
(
"%s: transport: %p, rtt: %d, srtt: %d "
"rttvar: %d, rto: %d
\n
"
,
__FUNCTION__
,
"rttvar: %d, rto: %
l
d
\n
"
,
__FUNCTION__
,
tp
,
rtt
,
tp
->
srtt
,
tp
->
rttvar
,
tp
->
rto
);
tp
,
rtt
,
tp
->
srtt
,
tp
->
rttvar
,
tp
->
rto
);
}
}
...
...
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