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
76cb7f3a
Commit
76cb7f3a
authored
Jun 18, 2003
by
Jon Grimm
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[SCTP] More typedef removals.
sctp_cookie_t -> sctp_cookie, sctp_signed_cookie_t ->sctp_signed_cookie_t.
parent
bb520e84
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
216 additions
and
217 deletions
+216
-217
include/net/sctp/structs.h
include/net/sctp/structs.h
+205
-206
net/sctp/associola.c
net/sctp/associola.c
+2
-2
net/sctp/sm_make_chunk.c
net/sctp/sm_make_chunk.c
+6
-6
net/sctp/sm_statefuns.c
net/sctp/sm_statefuns.c
+3
-3
No files found.
include/net/sctp/structs.h
View file @
76cb7f3a
...
@@ -14,7 +14,7 @@
...
@@ -14,7 +14,7 @@
*
*
* The SCTP reference implementation is distributed in the hope that it
* The SCTP reference implementation is distributed in the hope that it
* will be useful, but WITHOUT ANY WARRANTY; without even the implied
* will be useful, but WITHOUT ANY WARRANTY; without even the implied
*
************************
*
************************
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
* See the GNU General Public License for more details.
*
*
...
@@ -31,8 +31,8 @@
...
@@ -31,8 +31,8 @@
* http://www.sf.net/projects/lksctp
* http://www.sf.net/projects/lksctp
*
*
* Written or modified by:
* Written or modified by:
* Randall Stewart
<randall@sctp.chicago.il.us>
* Randall Stewart
<randall@sctp.chicago.il.us>
* Ken Morneau
<kmorneau@cisco.com>
* Ken Morneau
<kmorneau@cisco.com>
* Qiaobing Xie <qxie1@email.mot.com>
* Qiaobing Xie <qxie1@email.mot.com>
* La Monte H.P. Yarroll <piggy@acm.org>
* La Monte H.P. Yarroll <piggy@acm.org>
* Karl Knutson <karl@athena.chicago.il.us>
* Karl Knutson <karl@athena.chicago.il.us>
...
@@ -44,7 +44,7 @@
...
@@ -44,7 +44,7 @@
* Dajiang Zhang <dajiang.zhang@nokia.com>
* Dajiang Zhang <dajiang.zhang@nokia.com>
* Ardelle Fan <ardelle.fan@intel.com>
* Ardelle Fan <ardelle.fan@intel.com>
* Ryan Layer <rmlayer@us.ibm.com>
* Ryan Layer <rmlayer@us.ibm.com>
* Anup Pemmaiah
<pemmaiah@cc.usu.edu>
* Anup Pemmaiah
<pemmaiah@cc.usu.edu>
*
*
* Any bugs reported given to us we will try to fix... any fixes shared will
* Any bugs reported given to us we will try to fix... any fixes shared will
* be incorporated into the next SCTP release.
* be incorporated into the next SCTP release.
...
@@ -56,12 +56,12 @@
...
@@ -56,12 +56,12 @@
#include <linux/time.h>
/* We get struct timespec. */
#include <linux/time.h>
/* We get struct timespec. */
#include <linux/socket.h>
/* linux/in.h needs this!! */
#include <linux/socket.h>
/* linux/in.h needs this!! */
#include <linux/in.h>
/* We get struct sockaddr_in. */
#include <linux/in.h>
/* We get struct sockaddr_in. */
#include <linux/in6.h>
/* We get struct in6_addr */
#include <linux/in6.h>
/* We get struct in6_addr */
#include <asm/param.h>
/* We get MAXHOSTNAMELEN. */
#include <asm/param.h>
/* We get MAXHOSTNAMELEN. */
#include <asm/atomic.h>
/* This gets us atomic counters. */
#include <asm/atomic.h>
/* This gets us atomic counters. */
#include <linux/skbuff.h>
/* We need sk_buff_head. */
#include <linux/skbuff.h>
/* We need sk_buff_head. */
#include <linux/workqueue.h>
/* We need tq_struct.
*/
#include <linux/workqueue.h>
/* We need tq_struct.
*/
#include <linux/sctp.h>
/* We need sctp* header structs. */
#include <linux/sctp.h>
/* We need sctp* header structs. */
/* A convenience structure for handling sockaddr structures.
/* A convenience structure for handling sockaddr structures.
* We should wean ourselves off this.
* We should wean ourselves off this.
...
@@ -95,11 +95,11 @@ struct sctp_ssnmap;
...
@@ -95,11 +95,11 @@ struct sctp_ssnmap;
/* Structures useful for managing bind/connect. */
/* Structures useful for managing bind/connect. */
struct
sctp_bind_bucket
{
struct
sctp_bind_bucket
{
unsigned
short
port
;
unsigned
short
port
;
unsigned
short
fastreuse
;
unsigned
short
fastreuse
;
struct
sctp_bind_bucket
*
next
;
struct
sctp_bind_bucket
*
next
;
struct
sctp_bind_bucket
**
pprev
;
struct
sctp_bind_bucket
**
pprev
;
struct
hlist_head
sk_list
;
struct
hlist_head
sk_list
;
};
};
struct
sctp_bind_hashbucket
{
struct
sctp_bind_hashbucket
{
...
@@ -120,11 +120,11 @@ extern struct sctp_globals {
...
@@ -120,11 +120,11 @@ extern struct sctp_globals {
*
*
* The following protocol parameters are RECOMMENDED:
* The following protocol parameters are RECOMMENDED:
*
*
* RTO.Initial
- 3
seconds
* RTO.Initial
- 3
seconds
* RTO.Min
- 1
second
* RTO.Min
- 1
second
* RTO.Max
- 60 seconds
* RTO.Max
- 60 seconds
* 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
;
__u32
rto_initial
;
__u32
rto_min
;
__u32
rto_min
;
...
@@ -139,24 +139,24 @@ extern struct sctp_globals {
...
@@ -139,24 +139,24 @@ extern struct sctp_globals {
/* Max.Burst - 4 */
/* Max.Burst - 4 */
int
max_burst
;
int
max_burst
;
/* Valid.Cookie.Life
- 60 seconds */
/* Valid.Cookie.Life
- 60 seconds */
int
valid_cookie_life
;
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
;
/* 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
*/
*/
int
max_retrans_association
;
int
max_retrans_association
;
int
max_retrans_path
;
int
max_retrans_path
;
int
max_retrans_init
;
int
max_retrans_init
;
/* HB.interval
- 30 seconds */
/* HB.interval
- 30 seconds */
int
hb_interval
;
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. */
__u16
max_instreams
;
__u16
max_instreams
;
...
@@ -175,7 +175,7 @@ extern struct sctp_globals {
...
@@ -175,7 +175,7 @@ extern struct sctp_globals {
int
assoc_hashsize
;
int
assoc_hashsize
;
struct
sctp_hashbucket
*
assoc_hashbucket
;
struct
sctp_hashbucket
*
assoc_hashbucket
;
/* This is the sctp port control hash.
*/
/* This is the sctp port control hash.
*/
int
port_hashsize
;
int
port_hashsize
;
int
port_rover
;
int
port_rover
;
spinlock_t
port_alloc_lock
;
/* Protects port_rover. */
spinlock_t
port_alloc_lock
;
/* Protects port_rover. */
...
@@ -225,12 +225,12 @@ struct sctp_af {
...
@@ -225,12 +225,12 @@ struct sctp_af {
int
(
*
sctp_xmit
)
(
struct
sk_buff
*
skb
,
int
(
*
sctp_xmit
)
(
struct
sk_buff
*
skb
,
struct
sctp_transport
*
,
struct
sctp_transport
*
,
int
ipfragok
);
int
ipfragok
);
int
(
*
setsockopt
)
(
struct
sock
*
sk
,
int
(
*
setsockopt
)
(
struct
sock
*
sk
,
int
level
,
int
level
,
int
optname
,
int
optname
,
char
*
optval
,
char
*
optval
,
int
optlen
);
int
optlen
);
int
(
*
getsockopt
)
(
struct
sock
*
sk
,
int
(
*
getsockopt
)
(
struct
sock
*
sk
,
int
level
,
int
level
,
int
optname
,
int
optname
,
char
*
optval
,
char
*
optval
,
...
@@ -238,37 +238,37 @@ struct sctp_af {
...
@@ -238,37 +238,37 @@ struct sctp_af {
struct
dst_entry
*
(
*
get_dst
)
(
struct
sctp_association
*
asoc
,
struct
dst_entry
*
(
*
get_dst
)
(
struct
sctp_association
*
asoc
,
union
sctp_addr
*
daddr
,
union
sctp_addr
*
daddr
,
union
sctp_addr
*
saddr
);
union
sctp_addr
*
saddr
);
void
(
*
get_saddr
)
(
struct
sctp_association
*
asoc
,
void
(
*
get_saddr
)
(
struct
sctp_association
*
asoc
,
struct
dst_entry
*
dst
,
struct
dst_entry
*
dst
,
union
sctp_addr
*
daddr
,
union
sctp_addr
*
daddr
,
union
sctp_addr
*
saddr
);
union
sctp_addr
*
saddr
);
void
(
*
copy_addrlist
)
(
struct
list_head
*
,
void
(
*
copy_addrlist
)
(
struct
list_head
*
,
struct
net_device
*
);
struct
net_device
*
);
void
(
*
dst_saddr
)
(
union
sctp_addr
*
saddr
,
void
(
*
dst_saddr
)
(
union
sctp_addr
*
saddr
,
struct
dst_entry
*
dst
,
struct
dst_entry
*
dst
,
unsigned
short
port
);
unsigned
short
port
);
int
(
*
cmp_addr
)
(
const
union
sctp_addr
*
addr1
,
int
(
*
cmp_addr
)
(
const
union
sctp_addr
*
addr1
,
const
union
sctp_addr
*
addr2
);
const
union
sctp_addr
*
addr2
);
void
(
*
addr_copy
)
(
union
sctp_addr
*
dst
,
void
(
*
addr_copy
)
(
union
sctp_addr
*
dst
,
union
sctp_addr
*
src
);
union
sctp_addr
*
src
);
void
(
*
from_skb
)
(
union
sctp_addr
*
,
void
(
*
from_skb
)
(
union
sctp_addr
*
,
struct
sk_buff
*
skb
,
struct
sk_buff
*
skb
,
int
saddr
);
int
saddr
);
void
(
*
from_sk
)
(
union
sctp_addr
*
,
void
(
*
from_sk
)
(
union
sctp_addr
*
,
struct
sock
*
sk
);
struct
sock
*
sk
);
void
(
*
to_sk_saddr
)
(
union
sctp_addr
*
,
void
(
*
to_sk_saddr
)
(
union
sctp_addr
*
,
struct
sock
*
sk
);
struct
sock
*
sk
);
void
(
*
to_sk_daddr
)
(
union
sctp_addr
*
,
void
(
*
to_sk_daddr
)
(
union
sctp_addr
*
,
struct
sock
*
sk
);
struct
sock
*
sk
);
int
(
*
addr_valid
)
(
union
sctp_addr
*
);
int
(
*
addr_valid
)
(
union
sctp_addr
*
);
sctp_scope_t
(
*
scope
)
(
union
sctp_addr
*
);
sctp_scope_t
(
*
scope
)
(
union
sctp_addr
*
);
void
(
*
inaddr_any
)
(
union
sctp_addr
*
,
unsigned
short
);
void
(
*
inaddr_any
)
(
union
sctp_addr
*
,
unsigned
short
);
int
(
*
is_any
)
(
const
union
sctp_addr
*
);
int
(
*
is_any
)
(
const
union
sctp_addr
*
);
int
(
*
available
)
(
const
union
sctp_addr
*
);
int
(
*
available
)
(
const
union
sctp_addr
*
);
int
(
*
skb_iif
)
(
const
struct
sk_buff
*
sk
);
int
(
*
skb_iif
)
(
const
struct
sk_buff
*
sk
);
int
(
*
is_ce
)
(
const
struct
sk_buff
*
sk
);
int
(
*
is_ce
)
(
const
struct
sk_buff
*
sk
);
void
(
*
seq_dump_addr
)(
struct
seq_file
*
seq
,
void
(
*
seq_dump_addr
)(
struct
seq_file
*
seq
,
union
sctp_addr
*
addr
);
union
sctp_addr
*
addr
);
__u16
net_header_len
;
__u16
net_header_len
;
int
sockaddr_len
;
int
sockaddr_len
;
sa_family_t
sa_family
;
sa_family_t
sa_family
;
...
@@ -349,23 +349,23 @@ struct sctp_opt {
...
@@ -349,23 +349,23 @@ struct sctp_opt {
*
*
*/
*/
typedef
struct
sctp_cookie
{
struct
sctp_cookie
{
/* My
: Tag expected in every inbound packet and sent
/* My
: Tag expected in every inbound packet and sent
* Verification: in the INIT or INIT ACK chunk.
* Verification: in the INIT or INIT ACK chunk.
* Tag
:
* Tag
:
*/
*/
__u32
my_vtag
;
__u32
my_vtag
;
/* Peer's : Tag expected in every outbound packet except
/* Peer's : Tag expected in every outbound packet except
* Verification: in the INIT chunk.
* Verification: in the INIT chunk.
* Tag
:
* Tag
:
*/
*/
__u32
peer_vtag
;
__u32
peer_vtag
;
/* The rest of these are not from the spec, but really need to
/* The rest of these are not from the spec, but really need to
* be in the cookie.
* be in the cookie.
*/
*/
/* My Tie Tag : Assist in discovering a restarting association. */
/* My Tie Tag : Assist in discovering a restarting association. */
__u32
my_ttag
;
__u32
my_ttag
;
...
@@ -373,8 +373,8 @@ typedef struct sctp_cookie {
...
@@ -373,8 +373,8 @@ typedef struct sctp_cookie {
/* Peer's Tie Tag: Assist in discovering a restarting association. */
/* Peer's Tie Tag: Assist in discovering a restarting association. */
__u32
peer_ttag
;
__u32
peer_ttag
;
/* When does this cookie expire? */
/* When does this cookie expire? */
struct
timeval
expiration
;
struct
timeval
expiration
;
/* Number of inbound/outbound streams which are set
/* Number of inbound/outbound streams which are set
* and negotiated during the INIT process.
* and negotiated during the INIT process.
...
@@ -382,7 +382,7 @@ typedef struct sctp_cookie {
...
@@ -382,7 +382,7 @@ typedef struct sctp_cookie {
__u16
sinit_num_ostreams
;
__u16
sinit_num_ostreams
;
__u16
sinit_max_instreams
;
__u16
sinit_max_instreams
;
/* This is the first sequence number I used. */
/* This is the first sequence number I used. */
__u32
initial_tsn
;
__u32
initial_tsn
;
/* This holds the originating address of the INIT packet. */
/* This holds the originating address of the INIT packet. */
...
@@ -395,23 +395,23 @@ typedef struct sctp_cookie {
...
@@ -395,23 +395,23 @@ typedef struct sctp_cookie {
* the association TCB is re-constructed from the cookie.
* the association TCB is re-constructed from the cookie.
*/
*/
__u32
raw_addr_list_len
;
__u32
raw_addr_list_len
;
s
ctp_init_chunk_t
peer_init
[
0
];
s
truct
sctp_init_chunk
peer_init
[
0
];
}
sctp_cookie_t
;
};
/* The format of our cookie that we send to our peer. */
/* The format of our cookie that we send to our peer. */
typedef
struct
sctp_signed_cookie
{
struct
sctp_signed_cookie
{
__u8
signature
[
SCTP_SECRET_SIZE
];
__u8
signature
[
SCTP_SECRET_SIZE
];
s
ctp_cookie_t
c
;
s
truct
sctp_cookie
c
;
}
sctp_signed_cookie_t
;
};
/* 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
* internally.
* internally.
*/
*/
typedef
union
{
typedef
union
{
s
ctp_ipv4addr_param_t
v4
;
s
truct
sctp_ipv4addr_param
v4
;
s
ctp_ipv6addr_param_t
v6
;
s
truct
sctp_ipv6addr_param
v6
;
}
sctp_addr_param_t
;
}
sctp_addr_param_t
;
/* A convenience type to allow walking through the various
/* A convenience type to allow walking through the various
...
@@ -419,14 +419,14 @@ typedef union {
...
@@ -419,14 +419,14 @@ typedef union {
*/
*/
union
sctp_params
{
union
sctp_params
{
void
*
v
;
void
*
v
;
s
ctp_paramhdr_t
*
p
;
s
truct
sctp_paramhdr
*
p
;
s
ctp_cookie_preserve_param_t
*
life
;
s
truct
sctp_cookie_preserve_param
*
life
;
s
ctp_hostname_param_t
*
dns
;
s
truct
sctp_hostname_param
*
dns
;
s
ctp_cookie_param_t
*
cookie
;
s
truct
sctp_cookie_param
*
cookie
;
s
ctp_supported_addrs_param_t
*
sat
;
s
truct
sctp_supported_addrs_param
*
sat
;
s
ctp_ipv4addr_param_t
*
v4
;
s
truct
sctp_ipv4addr_param
*
v4
;
s
ctp_ipv6addr_param_t
*
v6
;
s
truct
sctp_ipv6addr_param
*
v6
;
s
ctp_addr_param_t
*
addr
;
s
truct
sctp_addr_param
*
addr
;
};
};
/* RFC 2960. Section 3.3.5 Heartbeat.
/* RFC 2960. Section 3.3.5 Heartbeat.
...
@@ -437,7 +437,7 @@ union sctp_params {
...
@@ -437,7 +437,7 @@ union sctp_params {
* HEARTBEAT is sent (see Section 8.3).
* HEARTBEAT is sent (see Section 8.3).
*/
*/
typedef
struct
sctp_sender_hb_info
{
typedef
struct
sctp_sender_hb_info
{
s
ctp_paramhdr_t
param_hdr
;
s
truct
sctp_paramhdr
param_hdr
;
union
sctp_addr
daddr
;
union
sctp_addr
daddr
;
unsigned
long
sent_at
;
unsigned
long
sent_at
;
}
sctp_sender_hb_info_t
__attribute__
((
packed
));
}
sctp_sender_hb_info_t
__attribute__
((
packed
));
...
@@ -478,7 +478,7 @@ static inline __u16 sctp_ssn_peek(struct sctp_stream *stream, __u16 id)
...
@@ -478,7 +478,7 @@ static inline __u16 sctp_ssn_peek(struct sctp_stream *stream, __u16 id)
return
stream
->
ssn
[
id
];
return
stream
->
ssn
[
id
];
}
}
/* Return the next SSN number for this stream.
*/
/* Return the next SSN number for this stream.
*/
static
inline
__u16
sctp_ssn_next
(
struct
sctp_stream
*
stream
,
__u16
id
)
static
inline
__u16
sctp_ssn_next
(
struct
sctp_stream
*
stream
,
__u16
id
)
{
{
return
stream
->
ssn
[
id
]
++
;
return
stream
->
ssn
[
id
]
++
;
...
@@ -557,23 +557,22 @@ struct sctp_chunk {
...
@@ -557,23 +557,22 @@ struct sctp_chunk {
union
sctp_params
param_hdr
;
union
sctp_params
param_hdr
;
union
{
union
{
__u8
*
v
;
__u8
*
v
;
s
ctp_datahdr_t
*
data_hdr
;
s
truct
sctp_datahdr
*
data_hdr
;
s
ctp_inithdr_t
*
init_hdr
;
s
truct
sctp_inithdr
*
init_hdr
;
s
ctp_sackhdr_t
*
sack_hdr
;
s
truct
sctp_sackhdr
*
sack_hdr
;
s
ctp_heartbeathdr_t
*
hb_hdr
;
s
truct
sctp_heartbeathdr
*
hb_hdr
;
s
ctp_sender_hb_info_t
*
hbs_hdr
;
s
truct
sctp_sender_hb_info
*
hbs_hdr
;
s
ctp_shutdownhdr_t
*
shutdown_hdr
;
s
truct
sctp_shutdownhdr
*
shutdown_hdr
;
s
ctp_signed_cookie_t
*
cookie_hdr
;
s
truct
sctp_signed_cookie
*
cookie_hdr
;
s
ctp_ecnehdr_t
*
ecne_hdr
;
s
truct
sctp_ecnehdr
*
ecne_hdr
;
s
ctp_cwrhdr_t
*
ecn_cwr_hdr
;
s
truct
sctp_cwrhdr
*
ecn_cwr_hdr
;
s
ctp_errhdr_t
*
err_hdr
;
s
truct
sctp_errhdr
*
err_hdr
;
}
subh
;
}
subh
;
__u8
*
chunk_end
;
__u8
*
chunk_end
;
sctp_chunkhdr_t
*
chunk_hdr
;
struct
sctp_chunkhdr
*
chunk_hdr
;
struct
sctphdr
*
sctp_hdr
;
sctp_sctphdr_t
*
sctp_hdr
;
/* This needs to be recoverable for SCTP_SEND_FAILED events. */
/* This needs to be recoverable for SCTP_SEND_FAILED events. */
struct
sctp_sndrcvinfo
sinfo
;
struct
sctp_sndrcvinfo
sinfo
;
...
@@ -597,7 +596,7 @@ struct sctp_chunk {
...
@@ -597,7 +596,7 @@ struct sctp_chunk {
/* For an inbound chunk, this tells us where it came from.
/* For an inbound chunk, this tells us where it came from.
* For an outbound chunk, it tells us where we'd like it to
* For an outbound chunk, it tells us where we'd like it to
* go.
It is NULL if we have no preference.
* go.
It is NULL if we have no preference.
*/
*/
struct
sctp_transport
*
transport
;
struct
sctp_transport
*
transport
;
...
@@ -687,22 +686,22 @@ typedef int (sctp_outq_thandler_t)(struct sctp_outq *, void *);
...
@@ -687,22 +686,22 @@ typedef int (sctp_outq_thandler_t)(struct sctp_outq *, void *);
typedef
int
(
sctp_outq_ehandler_t
)(
struct
sctp_outq
*
);
typedef
int
(
sctp_outq_ehandler_t
)(
struct
sctp_outq
*
);
typedef
struct
sctp_packet
*
(
sctp_outq_ohandler_init_t
)
typedef
struct
sctp_packet
*
(
sctp_outq_ohandler_init_t
)
(
struct
sctp_packet
*
,
(
struct
sctp_packet
*
,
struct
sctp_transport
*
,
struct
sctp_transport
*
,
__u16
sport
,
__u16
sport
,
__u16
dport
);
__u16
dport
);
typedef
struct
sctp_packet
*
(
sctp_outq_ohandler_config_t
)
typedef
struct
sctp_packet
*
(
sctp_outq_ohandler_config_t
)
(
struct
sctp_packet
*
,
(
struct
sctp_packet
*
,
__u32
vtag
,
__u32
vtag
,
int
ecn_capable
,
int
ecn_capable
,
sctp_packet_phandler_t
*
get_prepend_chunk
);
sctp_packet_phandler_t
*
get_prepend_chunk
);
typedef
sctp_xmit_t
(
sctp_outq_ohandler_t
)(
struct
sctp_packet
*
,
typedef
sctp_xmit_t
(
sctp_outq_ohandler_t
)(
struct
sctp_packet
*
,
struct
sctp_chunk
*
);
struct
sctp_chunk
*
);
typedef
int
(
sctp_outq_ohandler_force_t
)(
struct
sctp_packet
*
);
typedef
int
(
sctp_outq_ohandler_force_t
)(
struct
sctp_packet
*
);
sctp_outq_ohandler_init_t
sctp_packet_init
;
sctp_outq_ohandler_init_t
sctp_packet_init
;
sctp_outq_ohandler_config_t
sctp_packet_config
;
sctp_outq_ohandler_config_t
sctp_packet_config
;
sctp_outq_ohandler_t
sctp_packet_append_chunk
;
sctp_outq_ohandler_t
sctp_packet_append_chunk
;
sctp_outq_ohandler_t
sctp_packet_transmit_chunk
;
sctp_outq_ohandler_t
sctp_packet_transmit_chunk
;
sctp_outq_ohandler_force_t
sctp_packet_transmit
;
sctp_outq_ohandler_force_t
sctp_packet_transmit
;
void
sctp_packet_free
(
struct
sctp_packet
*
);
void
sctp_packet_free
(
struct
sctp_packet
*
);
...
@@ -712,19 +711,19 @@ void sctp_packet_free(struct sctp_packet *);
...
@@ -712,19 +711,19 @@ void sctp_packet_free(struct sctp_packet *);
*
*
* RFC2960 Section 1.4 Key Terms
* RFC2960 Section 1.4 Key Terms
*
*
* o
Transport address: A Transport Address is traditionally defined
* o
Transport address: A Transport Address is traditionally defined
*
by Network Layer address, Transport Layer protocol and Transport
*
by Network Layer address, Transport Layer protocol and Transport
*
Layer port number. In the case of SCTP running over IP, a
*
Layer port number. In the case of SCTP running over IP, a
*
transport address is defined by the combination of an IP address
*
transport address is defined by the combination of an IP address
*
and an SCTP port number (where SCTP is the Transport protocol).
*
and an SCTP port number (where SCTP is the Transport protocol).
*
*
* RFC2960 Section 7.1 SCTP Differences from TCP Congestion control
* RFC2960 Section 7.1 SCTP Differences from TCP Congestion control
*
*
* o
The sender keeps a separate congestion control parameter set for
* o
The sender keeps a separate congestion control parameter set for
*
each of the destination addresses it can send to (not each
*
each of the destination addresses it can send to (not each
*
source-destination pair but for each destination). The parameters
*
source-destination pair but for each destination). The parameters
*
should decay if the address is not used for a long enough time
*
should decay if the address is not used for a long enough time
*
period.
*
period.
*
*
*/
*/
struct
sctp_transport
{
struct
sctp_transport
{
...
@@ -733,12 +732,12 @@ struct sctp_transport {
...
@@ -733,12 +732,12 @@ struct sctp_transport {
/* Reference counting. */
/* Reference counting. */
atomic_t
refcnt
;
atomic_t
refcnt
;
int
dead
;
int
dead
;
/* This is the peer's IP address and port. */
/* This is the peer's IP address and port. */
union
sctp_addr
ipaddr
;
union
sctp_addr
ipaddr
;
/* These are the functions we call to handle LLP stuff.
*/
/* These are the functions we call to handle LLP stuff.
*/
struct
sctp_af
*
af_specific
;
struct
sctp_af
*
af_specific
;
/* Which association do we belong to? */
/* Which association do we belong to? */
...
@@ -752,33 +751,33 @@ struct sctp_transport {
...
@@ -752,33 +751,33 @@ struct sctp_transport {
* address list derived from the INIT or INIT ACK chunk, a
* address list derived from the INIT or INIT ACK chunk, a
* number of data elements needs to be maintained including:
* number of data elements needs to be maintained including:
*/
*/
__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
;
__u32
rto
;
/* RTTVAR : The current RTT variation. */
/* RTTVAR : The current RTT variation. */
__u32
rttvar
;
__u32
rttvar
;
/* SRTT
: The current smoothed round trip time.
*/
/* SRTT
: The current smoothed round trip time.
*/
__u32
srtt
;
__u32
srtt
;
/* RTO-Pending : A flag used to track if one of the DATA
/* RTO-Pending : A flag used to track if one of the DATA
*
chunks sent to this address is currently being
*
chunks sent to this address is currently being
*
used to compute a RTT. If this flag is 0,
*
used to compute a RTT. If this flag is 0,
*
the next DATA chunk sent to this destination
*
the next DATA chunk sent to this destination
*
should be used to compute a RTT and this flag
*
should be used to compute a RTT and this flag
*
should be set. Every time the RTT
*
should be set. Every time the RTT
*
calculation completes (i.e. the DATA chunk
*
calculation completes (i.e. the DATA chunk
*
is SACK'd) clear this flag.
*
is SACK'd) clear this flag.
*/
*/
int
rto_pending
;
int
rto_pending
;
/*
/*
* These are the congestion stats.
* These are the congestion stats.
*/
*/
/* cwnd
: The current congestion window.
*/
/* cwnd
: The current congestion window.
*/
__u32
cwnd
;
/* This is the actual cwnd. */
__u32
cwnd
;
/* This is the actual cwnd. */
/* ssthresh : The current slow start threshold value. */
/* ssthresh : The current slow start threshold value. */
__u32
ssthresh
;
__u32
ssthresh
;
...
@@ -791,7 +790,7 @@ struct sctp_transport {
...
@@ -791,7 +790,7 @@ struct sctp_transport {
/* Data that has been sent, but not acknowledged. */
/* Data that has been sent, but not acknowledged. */
__u32
flight_size
;
__u32
flight_size
;
/* PMTU
: The current known path MTU. */
/* PMTU
: The current known path MTU. */
__u32
pmtu
;
__u32
pmtu
;
/* Destination */
/* Destination */
...
@@ -821,23 +820,23 @@ struct sctp_transport {
...
@@ -821,23 +820,23 @@ struct sctp_transport {
unsigned
long
last_time_ecne_reduced
;
unsigned
long
last_time_ecne_reduced
;
/* active : The current active state of this destination,
/* active : The current active state of this destination,
*
: i.e. DOWN, UP, etc.
*
: i.e. DOWN, UP, etc.
*/
*/
int
active
;
int
active
;
/* hb_allowed : The current heartbeat state of this destination,
/* hb_allowed : The current heartbeat state of this destination,
*
: i.e. ALLOW-HB, NO-HEARTBEAT, etc.
*
: i.e. ALLOW-HB, NO-HEARTBEAT, etc.
*/
*/
int
hb_allowed
;
int
hb_allowed
;
/* These are the error stats for this destination. */
/* These are the error stats for this destination. */
/* Error count : The current error count for this destination.
*/
/* Error count : The current error count for this destination.
*/
unsigned
short
error_count
;
unsigned
short
error_count
;
/* Error : Current error threshold for this destination
/* Error : Current error threshold for this destination
* Threshold : i.e. what value marks the destination down if
* Threshold : i.e. what value marks the destination down if
*
: errorCount reaches this value.
*
: errorCount reaches this value.
*/
*/
unsigned
short
error_threshold
;
unsigned
short
error_threshold
;
...
@@ -847,7 +846,7 @@ struct sctp_transport {
...
@@ -847,7 +846,7 @@ struct sctp_transport {
*/
*/
int
max_retrans
;
int
max_retrans
;
/* Per
: A timer used by each destination.
/* Per
: A timer used by each destination.
* Destination :
* Destination :
* Timer :
* Timer :
*
*
...
@@ -876,10 +875,10 @@ struct sctp_transport {
...
@@ -876,10 +875,10 @@ struct sctp_transport {
/* State information saved for SFR_CACC algorithm. The key
/* State information saved for SFR_CACC algorithm. The key
* idea in SFR_CACC is to maintain state at the sender on a
* idea in SFR_CACC is to maintain state at the sender on a
* per-destination basis when a changeover happens.
* per-destination basis when a changeover happens.
*
char changeover_active;
* char changeover_active;
*
char cycling_changeover;
* char cycling_changeover;
*
__u32 next_tsn_at_change;
* __u32 next_tsn_at_change;
*
char cacc_saw_newack;
* char cacc_saw_newack;
*/
*/
struct
{
struct
{
/* An unsigned integer, which stores the next TSN to be
/* An unsigned integer, which stores the next TSN to be
...
@@ -940,7 +939,7 @@ struct sctp_inq {
...
@@ -940,7 +939,7 @@ struct sctp_inq {
*/
*/
struct
work_struct
immediate
;
struct
work_struct
immediate
;
int
malloced
;
/* Is this structure kfree()able?
*/
int
malloced
;
/* Is this structure kfree()able?
*/
};
};
struct
sctp_inq
*
sctp_inq_new
(
void
);
struct
sctp_inq
*
sctp_inq_new
(
void
);
...
@@ -957,7 +956,7 @@ void sctp_inq_set_th_handler(struct sctp_inq *, void (*)(void *), void *);
...
@@ -957,7 +956,7 @@ void sctp_inq_set_th_handler(struct sctp_inq *, void (*)(void *), void *);
* This structure covers sections 6.3, 6.4, 6.7, 6.8, 6.10, 7., 8.1,
* This structure covers sections 6.3, 6.4, 6.7, 6.8, 6.10, 7., 8.1,
* and 8.2 of the v13 draft.
* and 8.2 of the v13 draft.
*
*
* It handles retransmissions.
The connection to the timeout portion
* It handles retransmissions.
The connection to the timeout portion
* of the state machine is through sctp_..._timeout() and timeout_handler.
* of the state machine is through sctp_..._timeout() and timeout_handler.
*
*
* If you feed it SACKs, it will eat them.
* If you feed it SACKs, it will eat them.
...
@@ -1003,7 +1002,7 @@ struct sctp_outq {
...
@@ -1003,7 +1002,7 @@ struct sctp_outq {
sctp_outq_ohandler_t
*
build_output
;
sctp_outq_ohandler_t
*
build_output
;
sctp_outq_ohandler_force_t
*
force_output
;
sctp_outq_ohandler_force_t
*
force_output
;
/* How many unackd bytes do we have in-flight?
*/
/* How many unackd bytes do we have in-flight?
*/
__u32
outstanding_bytes
;
__u32
outstanding_bytes
;
/* Corked? */
/* Corked? */
...
@@ -1022,7 +1021,7 @@ void sctp_outq_teardown(struct sctp_outq *);
...
@@ -1022,7 +1021,7 @@ void sctp_outq_teardown(struct sctp_outq *);
void
sctp_outq_free
(
struct
sctp_outq
*
);
void
sctp_outq_free
(
struct
sctp_outq
*
);
int
sctp_outq_tail
(
struct
sctp_outq
*
,
struct
sctp_chunk
*
chunk
);
int
sctp_outq_tail
(
struct
sctp_outq
*
,
struct
sctp_chunk
*
chunk
);
int
sctp_outq_flush
(
struct
sctp_outq
*
,
int
);
int
sctp_outq_flush
(
struct
sctp_outq
*
,
int
);
int
sctp_outq_sack
(
struct
sctp_outq
*
,
s
ctp_sackhdr_t
*
);
int
sctp_outq_sack
(
struct
sctp_outq
*
,
s
truct
sctp_sackhdr
*
);
int
sctp_outq_is_empty
(
const
struct
sctp_outq
*
);
int
sctp_outq_is_empty
(
const
struct
sctp_outq
*
);
int
sctp_outq_set_output_handlers
(
struct
sctp_outq
*
,
int
sctp_outq_set_output_handlers
(
struct
sctp_outq
*
,
sctp_outq_ohandler_init_t
init
,
sctp_outq_ohandler_init_t
init
,
...
@@ -1047,8 +1046,8 @@ struct sctp_bind_addr {
...
@@ -1047,8 +1046,8 @@ struct sctp_bind_addr {
/* RFC 2960 12.1 Parameters necessary for the SCTP instance
/* RFC 2960 12.1 Parameters necessary for the SCTP instance
*
*
* SCTP Port:
The local SCTP port number the endpoint is
* SCTP Port:
The local SCTP port number the endpoint is
*
bound to.
* bound to.
*/
*/
__u16
port
;
__u16
port
;
...
@@ -1060,7 +1059,7 @@ struct sctp_bind_addr {
...
@@ -1060,7 +1059,7 @@ struct sctp_bind_addr {
*/
*/
struct
list_head
address_list
;
struct
list_head
address_list
;
int
malloced
;
/* Are we kfree()able? */
int
malloced
;
/* Are we kfree()able? */
};
};
struct
sctp_bind_addr
*
sctp_bind_addr_new
(
int
gfp_mask
);
struct
sctp_bind_addr
*
sctp_bind_addr_new
(
int
gfp_mask
);
...
@@ -1097,13 +1096,13 @@ typedef enum {
...
@@ -1097,13 +1096,13 @@ typedef enum {
* local endpoint.
* local endpoint.
* This common structure is useful for several purposes:
* This common structure is useful for several purposes:
* 1) Common interface for lookup routines.
* 1) Common interface for lookup routines.
*
a) Subfunctions work for either endpoint or association
*
a) Subfunctions work for either endpoint or association
*
b) Single interface to lookup allows hiding the lookup lock rather
*
b) Single interface to lookup allows hiding the lookup lock rather
*
than acquiring it externally.
*
than acquiring it externally.
* 2) Common interface for the inbound chunk handling/state machine.
* 2) Common interface for the inbound chunk handling/state machine.
* 3) Common object handling routines for reference counting, etc.
* 3) Common object handling routines for reference counting, etc.
* 4) Disentangle association lookup from endpoint lookup, where we
* 4) Disentangle association lookup from endpoint lookup, where we
*
do not have to find our endpoint to find our association.
*
do not have to find our endpoint to find our association.
*
*
*/
*/
...
@@ -1122,14 +1121,14 @@ struct sctp_ep_common {
...
@@ -1122,14 +1121,14 @@ struct sctp_ep_common {
* malloced - Do we need to kfree this object?
* malloced - Do we need to kfree this object?
*/
*/
atomic_t
refcnt
;
atomic_t
refcnt
;
char
dead
;
char
dead
;
char
malloced
;
char
malloced
;
/* What socket does this endpoint belong to? */
/* What socket does this endpoint belong to? */
struct
sock
*
sk
;
struct
sock
*
sk
;
/* This is where we receive inbound chunks. */
/* This is where we receive inbound chunks. */
struct
sctp_inq
inqueue
;
struct
sctp_inq
inqueue
;
/* This substructure includes the defining parameters of the
/* This substructure includes the defining parameters of the
* endpoint:
* endpoint:
...
@@ -1167,22 +1166,22 @@ struct sctp_endpoint {
...
@@ -1167,22 +1166,22 @@ struct sctp_endpoint {
struct
sctp_ep_common
base
;
struct
sctp_ep_common
base
;
/* Associations: A list of current associations and mappings
/* Associations: A list of current associations and mappings
*
to the data consumers for each association. This
*
to the data consumers for each association. This
*
may be in the form of a hash table or other
*
may be in the form of a hash table or other
*
implementation dependent structure. The data
*
implementation dependent structure. The data
*
consumers may be process identification
*
consumers may be process identification
*
information such as file descriptors, named pipe
*
information such as file descriptors, named pipe
*
pointer, or table pointers dependent on how SCTP
*
pointer, or table pointers dependent on how SCTP
*
is implemented.
*
is implemented.
*/
*/
/* This is really a list of struct sctp_association entries. */
/* This is really a list of struct sctp_association entries. */
struct
list_head
asocs
;
struct
list_head
asocs
;
/* Secret Key: A secret key used by this endpoint to compute
/* Secret Key: A secret key used by this endpoint to compute
*
the MAC.
This SHOULD be a cryptographic quality
*
the MAC.
This SHOULD be a cryptographic quality
*
random number with a sufficient length.
*
random number with a sufficient length.
* Discussion in [RFC1750] can be helpful in
* Discussion in [RFC1750] can be helpful in
*
selection of the key.
* selection of the key.
*/
*/
__u8
secret_key
[
SCTP_HOW_MANY_SECRETS
][
SCTP_SECRET_SIZE
];
__u8
secret_key
[
SCTP_HOW_MANY_SECRETS
][
SCTP_SECRET_SIZE
];
int
current_key
;
int
current_key
;
...
@@ -1192,7 +1191,7 @@ struct sctp_endpoint {
...
@@ -1192,7 +1191,7 @@ struct sctp_endpoint {
/* Default timeouts. */
/* Default timeouts. */
int
timeouts
[
SCTP_NUM_TIMEOUT_TYPES
];
int
timeouts
[
SCTP_NUM_TIMEOUT_TYPES
];
/* Various thresholds.
*/
/* Various thresholds.
*/
/* Name for debugging output... */
/* Name for debugging output... */
char
*
debug_name
;
char
*
debug_name
;
...
@@ -1269,11 +1268,11 @@ struct sctp_association {
...
@@ -1269,11 +1268,11 @@ struct sctp_association {
*/
*/
__u32
eyecatcher
;
__u32
eyecatcher
;
/* This is our parent endpoint.
*/
/* This is our parent endpoint.
*/
struct
sctp_endpoint
*
ep
;
struct
sctp_endpoint
*
ep
;
/* These are those association elements needed in the cookie. */
/* These are those association elements needed in the cookie. */
s
ctp_cookie_t
c
;
s
truct
sctp_cookie
c
;
/* This is all information about our peer. */
/* This is all information about our peer. */
struct
{
struct
{
...
@@ -1285,11 +1284,11 @@ struct sctp_association {
...
@@ -1285,11 +1284,11 @@ struct sctp_association {
/* transport_addr_list
/* transport_addr_list
*
*
* Peer
: A list of SCTP transport addresses that the
* Peer
: A list of SCTP transport addresses that the
* Transport : peer is bound to. This information is derived
* Transport : peer is bound to. This information is derived
* Address : from the INIT or INIT ACK and is used to
* Address : from the INIT or INIT ACK and is used to
* List
: associate an inbound packet with a given
* List
: associate an inbound packet with a given
*
: association. Normally this information is
*
: association. Normally this information is
* : hashed or keyed for quick lookup and access
* : hashed or keyed for quick lookup and access
* : of the TCB.
* : of the TCB.
*
*
...
@@ -1305,8 +1304,8 @@ struct sctp_association {
...
@@ -1305,8 +1304,8 @@ struct sctp_association {
/* primary_path
/* primary_path
*
*
* Primary : This is the current primary destination
* Primary : This is the current primary destination
* Path
: transport address of the peer endpoint. It
* Path
: transport address of the peer endpoint. It
*
: may also specify a source transport address
*
: may also specify a source transport address
* : on this endpoint.
* : on this endpoint.
*
*
* All of these paths live on transport_addr_list.
* All of these paths live on transport_addr_list.
...
@@ -1345,25 +1344,25 @@ struct sctp_association {
...
@@ -1345,25 +1344,25 @@ struct sctp_association {
/* Pointer to last transport I have sent on. */
/* Pointer to last transport I have sent on. */
struct
sctp_transport
*
last_sent_to
;
struct
sctp_transport
*
last_sent_to
;
/* This is the last transport I have received DATA on.
*/
/* This is the last transport I have received DATA on.
*/
struct
sctp_transport
*
last_data_from
;
struct
sctp_transport
*
last_data_from
;
/*
/*
* Mapping An array of bits or bytes indicating which out of
* Mapping An array of bits or bytes indicating which out of
* Array order TSN's have been received (relative to the
* Array order TSN's have been received (relative to the
*
Last Rcvd TSN). If no gaps exist, i.e. no out of
*
Last Rcvd TSN). If no gaps exist, i.e. no out of
*
order packets have been received, this array
*
order packets have been received, this array
*
will be set to all zero. This structure may be
*
will be set to all zero. This structure may be
*
in the form of a circular buffer or bit array.
*
in the form of a circular buffer or bit array.
*
*
* Last Rcvd : This is the last TSN received in
* Last Rcvd : This is the last TSN received in
* TSN : sequence. This value is set initially by
* TSN : sequence. This value is set initially by
*
: taking the peer's Initial TSN, received in
*
: taking the peer's Initial TSN, received in
*
: the INIT or INIT ACK chunk, and subtracting
*
: the INIT or INIT ACK chunk, and subtracting
*
: one from it.
*
: one from it.
*
*
* Throughout most of the specification this is called the
* Throughout most of the specification this is called the
* "Cumulative TSN ACK Point".
In this case, we
* "Cumulative TSN ACK Point".
In this case, we
* ignore the advice in 12.2 in favour of the term
* ignore the advice in 12.2 in favour of the term
* used in the bulk of the text. This value is hidden
* used in the bulk of the text. This value is hidden
* in tsn_map--we get it by calling sctp_tsnmap_get_ctsn().
* in tsn_map--we get it by calling sctp_tsnmap_get_ctsn().
...
@@ -1372,13 +1371,13 @@ struct sctp_association {
...
@@ -1372,13 +1371,13 @@ struct sctp_association {
__u8
_map
[
sctp_tsnmap_storage_size
(
SCTP_TSN_MAP_SIZE
)];
__u8
_map
[
sctp_tsnmap_storage_size
(
SCTP_TSN_MAP_SIZE
)];
/* Do we need to sack the peer? */
/* Do we need to sack the peer? */
__u8
sack_needed
;
__u8
sack_needed
;
/* These are capabilities which our peer advertised. */
/* These are capabilities which our peer advertised. */
__u8
ecn_capable
;
/* Can peer do ECN? */
__u8
ecn_capable
;
/* Can peer do ECN? */
__u8
ipv4_address
;
/* Peer understands IPv4 addresses? */
__u8
ipv4_address
;
/* Peer understands IPv4 addresses? */
__u8
ipv6_address
;
/* Peer understands IPv6 addresses? */
__u8
ipv6_address
;
/* Peer understands IPv6 addresses? */
__u8
hostname_address
;
/* Peer understands DNS addresses? */
__u8
hostname_address
;
/* Peer understands DNS addresses? */
s
ctp_inithdr_t
i
;
s
truct
sctp_inithdr
i
;
int
cookie_len
;
int
cookie_len
;
void
*
cookie
;
void
*
cookie
;
...
@@ -1389,16 +1388,16 @@ struct sctp_association {
...
@@ -1389,16 +1388,16 @@ struct sctp_association {
/* State : A state variable indicating what state the
/* State : A state variable indicating what state the
* : association is in, i.e. COOKIE-WAIT,
* : association is in, i.e. COOKIE-WAIT,
*
: COOKIE-ECHOED, ESTABLISHED, SHUTDOWN-PENDING,
*
: COOKIE-ECHOED, ESTABLISHED, SHUTDOWN-PENDING,
*
: SHUTDOWN-SENT, SHUTDOWN-RECEIVED, SHUTDOWN-ACK-SENT.
*
: SHUTDOWN-SENT, SHUTDOWN-RECEIVED, SHUTDOWN-ACK-SENT.
*
*
*
Note: No "CLOSED" state is illustrated since if a
*
Note: No "CLOSED" state is illustrated since if a
*
association is "CLOSED" its TCB SHOULD be removed.
*
association is "CLOSED" its TCB SHOULD be removed.
*
*
*
In this implementation we DO have a CLOSED
* In this implementation we DO have a CLOSED
* state which is used during initiation and shutdown.
* state which is used during initiation and shutdown.
*
*
*
State takes values from SCTP_STATE_*.
* State takes values from SCTP_STATE_*.
*/
*/
sctp_state_t
state
;
sctp_state_t
state
;
...
@@ -1446,19 +1445,19 @@ struct sctp_association {
...
@@ -1446,19 +1445,19 @@ struct sctp_association {
struct
sctp_transport
*
shutdown_last_sent_to
;
struct
sctp_transport
*
shutdown_last_sent_to
;
/* Next TSN : The next TSN number to be assigned to a new
/* Next TSN : The next TSN number to be assigned to a new
*
: DATA chunk. This is sent in the INIT or INIT
*
: DATA chunk. This is sent in the INIT or INIT
*
: ACK chunk to the peer and incremented each
*
: ACK chunk to the peer and incremented each
*
: time a DATA chunk is assigned a TSN
*
: time a DATA chunk is assigned a TSN
*
: (normally just prior to transmit or during
*
: (normally just prior to transmit or during
* : fragmentation).
* : fragmentation).
*/
*/
__u32
next_tsn
;
__u32
next_tsn
;
/*
/*
* Last Rcvd : This is the last TSN received in sequence. This value
* Last Rcvd : This is the last TSN received in sequence. This value
* TSN
: is set initially by taking the peer's Initial TSN,
* TSN
: is set initially by taking the peer's Initial TSN,
*
: received in the INIT or INIT ACK chunk, and
*
: received in the INIT or INIT ACK chunk, and
*
: subtracting one from it.
*
: subtracting one from it.
*
*
* Most of RFC 2960 refers to this as the Cumulative TSN Ack Point.
* Most of RFC 2960 refers to this as the Cumulative TSN Ack Point.
*/
*/
...
@@ -1498,7 +1497,7 @@ struct sctp_association {
...
@@ -1498,7 +1497,7 @@ struct sctp_association {
wait_queue_head_t
wait
;
wait_queue_head_t
wait
;
/* Association : The smallest PMTU discovered for all of the
/* Association : The smallest PMTU discovered for all of the
* PMTU
: peer's transport addresses.
* PMTU
: peer's transport addresses.
*/
*/
__u32
pmtu
;
__u32
pmtu
;
...
@@ -1506,14 +1505,14 @@ struct sctp_association {
...
@@ -1506,14 +1505,14 @@ struct sctp_association {
__u32
frag_point
;
__u32
frag_point
;
/* Ack State : This flag indicates if the next received
/* Ack State : This flag indicates if the next received
*
: packet is to be responded to with a
*
: packet is to be responded to with a
*
: SACK. This is initializedto 0.
When a packet
*
: SACK. This is initializedto 0.
When a packet
*
: is received it is incremented. If this value
*
: is received it is incremented. If this value
*
: reaches 2 or more, a SACK is sent and the
*
: reaches 2 or more, a SACK is sent and the
*
: value is reset to 0. Note: This is used only
*
: value is reset to 0. Note: This is used only
*
: when no DATA chunks are received out of
*
: when no DATA chunks are received out of
* : order.
When DATA chunks are out of order,
* : order.
When DATA chunks are out of order,
*
: SACK's are not delayed (see Section 6).
*
: SACK's are not delayed (see Section 6).
*/
*/
/* Do we need to send an ack?
/* Do we need to send an ack?
* When counters[SctpCounterAckState] is above 1 we do!
* When counters[SctpCounterAckState] is above 1 we do!
...
@@ -1527,7 +1526,7 @@ struct sctp_association {
...
@@ -1527,7 +1526,7 @@ struct sctp_association {
__u32
default_context
;
__u32
default_context
;
__u32
default_timetolive
;
__u32
default_timetolive
;
/* This tracks outbound ssn for a given stream.
*/
/* This tracks outbound ssn for a given stream.
*/
struct
sctp_ssnmap
*
ssnmap
;
struct
sctp_ssnmap
*
ssnmap
;
/* All outbound chunks go through this structure. */
/* All outbound chunks go through this structure. */
...
@@ -1541,7 +1540,7 @@ struct sctp_association {
...
@@ -1541,7 +1540,7 @@ struct sctp_association {
/* Last TSN that caused an ECNE Chunk to be sent. */
/* Last TSN that caused an ECNE Chunk to be sent. */
__u32
last_ecne_tsn
;
__u32
last_ecne_tsn
;
/* Last TSN that caused a CWR Chunk to be sent.
*/
/* Last TSN that caused a CWR Chunk to be sent.
*/
__u32
last_cwr_tsn
;
__u32
last_cwr_tsn
;
/* How many duplicated TSNs have we seen? */
/* How many duplicated TSNs have we seen? */
...
@@ -1601,7 +1600,7 @@ struct sctp_association {
...
@@ -1601,7 +1600,7 @@ struct sctp_association {
*
*
* In defining the ASCONF Chunk transfer procedures, it is
* In defining the ASCONF Chunk transfer procedures, it is
* essential that these transfers MUST NOT cause congestion
* essential that these transfers MUST NOT cause congestion
* within the network.
To achieve this, we place these
* within the network.
To achieve this, we place these
* restrictions on the transfer of ASCONF Chunks:
* restrictions on the transfer of ASCONF Chunks:
*
*
* R1) One and only one ASCONF Chunk MAY be in transit and
* R1) One and only one ASCONF Chunk MAY be in transit and
...
@@ -1615,8 +1614,8 @@ struct sctp_association {
...
@@ -1615,8 +1614,8 @@ struct sctp_association {
*
*
*
*
* [I really think this is EXACTLY the sort of intelligence
* [I really think this is EXACTLY the sort of intelligence
* which already resides in sctp_outq.
Please move this
* which already resides in sctp_outq.
Please move this
* queue and its supporting logic down there.
--piggy]
* queue and its supporting logic down there.
--piggy]
*/
*/
struct
sk_buff_head
addip_chunks
;
struct
sk_buff_head
addip_chunks
;
...
@@ -1669,7 +1668,7 @@ static inline struct sctp_association *sctp_assoc(struct sctp_ep_common *base)
...
@@ -1669,7 +1668,7 @@ static inline struct sctp_association *sctp_assoc(struct sctp_ep_common *base)
return
asoc
;
return
asoc
;
}
}
/* These are function signatures for manipulating associations.
*/
/* These are function signatures for manipulating associations.
*/
struct
sctp_association
*
struct
sctp_association
*
...
@@ -1712,10 +1711,10 @@ void sctp_assoc_set_primary(struct sctp_association *,
...
@@ -1712,10 +1711,10 @@ void sctp_assoc_set_primary(struct sctp_association *,
struct
sctp_transport
*
);
struct
sctp_transport
*
);
int
sctp_assoc_set_bind_addr_from_ep
(
struct
sctp_association
*
,
int
);
int
sctp_assoc_set_bind_addr_from_ep
(
struct
sctp_association
*
,
int
);
int
sctp_assoc_set_bind_addr_from_cookie
(
struct
sctp_association
*
,
int
sctp_assoc_set_bind_addr_from_cookie
(
struct
sctp_association
*
,
s
ctp_cookie_t
*
,
int
gfp
);
s
truct
sctp_cookie
*
,
int
gfp
);
int
sctp_cmp_addr_exact
(
const
union
sctp_addr
*
ss1
,
int
sctp_cmp_addr_exact
(
const
union
sctp_addr
*
ss1
,
const
union
sctp_addr
*
ss2
);
const
union
sctp_addr
*
ss2
);
struct
sctp_chunk
*
sctp_get_ecne_prepend
(
struct
sctp_association
*
asoc
);
struct
sctp_chunk
*
sctp_get_ecne_prepend
(
struct
sctp_association
*
asoc
);
struct
sctp_chunk
*
sctp_get_no_prepend
(
struct
sctp_association
*
asoc
);
struct
sctp_chunk
*
sctp_get_no_prepend
(
struct
sctp_association
*
asoc
);
...
...
net/sctp/associola.c
View file @
76cb7f3a
...
@@ -1147,11 +1147,11 @@ int sctp_assoc_set_bind_addr_from_ep(struct sctp_association *asoc, int gfp)
...
@@ -1147,11 +1147,11 @@ int sctp_assoc_set_bind_addr_from_ep(struct sctp_association *asoc, int gfp)
/* Build the association's bind address list from the cookie. */
/* Build the association's bind address list from the cookie. */
int
sctp_assoc_set_bind_addr_from_cookie
(
struct
sctp_association
*
asoc
,
int
sctp_assoc_set_bind_addr_from_cookie
(
struct
sctp_association
*
asoc
,
s
ctp_cookie_t
*
cookie
,
int
gfp
)
s
truct
sctp_cookie
*
cookie
,
int
gfp
)
{
{
int
var_size2
=
ntohs
(
cookie
->
peer_init
->
chunk_hdr
.
length
);
int
var_size2
=
ntohs
(
cookie
->
peer_init
->
chunk_hdr
.
length
);
int
var_size3
=
cookie
->
raw_addr_list_len
;
int
var_size3
=
cookie
->
raw_addr_list_len
;
__u8
*
raw
=
(
__u8
*
)
cookie
+
sizeof
(
s
ctp_cookie_t
)
+
var_size2
;
__u8
*
raw
=
(
__u8
*
)
cookie
+
sizeof
(
s
truct
sctp_cookie
)
+
var_size2
;
return
sctp_raw_to_bind_addrs
(
&
asoc
->
base
.
bind_addr
,
raw
,
var_size3
,
return
sctp_raw_to_bind_addrs
(
&
asoc
->
base
.
bind_addr
,
raw
,
var_size3
,
asoc
->
ep
->
base
.
bind_addr
.
port
,
gfp
);
asoc
->
ep
->
base
.
bind_addr
.
port
,
gfp
);
...
...
net/sctp/sm_make_chunk.c
View file @
76cb7f3a
...
@@ -1275,14 +1275,14 @@ sctp_cookie_param_t *sctp_pack_cookie(const struct sctp_endpoint *ep,
...
@@ -1275,14 +1275,14 @@ sctp_cookie_param_t *sctp_pack_cookie(const struct sctp_endpoint *ep,
const
__u8
*
raw_addrs
,
int
addrs_len
)
const
__u8
*
raw_addrs
,
int
addrs_len
)
{
{
sctp_cookie_param_t
*
retval
;
sctp_cookie_param_t
*
retval
;
s
ctp_signed_cookie_t
*
cookie
;
s
truct
sctp_signed_cookie
*
cookie
;
struct
scatterlist
sg
;
struct
scatterlist
sg
;
int
headersize
,
bodysize
;
int
headersize
,
bodysize
;
unsigned
int
keylen
;
unsigned
int
keylen
;
char
*
key
;
char
*
key
;
headersize
=
sizeof
(
sctp_paramhdr_t
)
+
SCTP_SECRET_SIZE
;
headersize
=
sizeof
(
sctp_paramhdr_t
)
+
SCTP_SECRET_SIZE
;
bodysize
=
sizeof
(
s
ctp_cookie_t
)
bodysize
=
sizeof
(
s
truct
sctp_cookie
)
+
ntohs
(
init_chunk
->
chunk_hdr
->
length
)
+
addrs_len
;
+
ntohs
(
init_chunk
->
chunk_hdr
->
length
)
+
addrs_len
;
/* Pad out the cookie to a multiple to make the signature
/* Pad out the cookie to a multiple to make the signature
...
@@ -1304,7 +1304,7 @@ sctp_cookie_param_t *sctp_pack_cookie(const struct sctp_endpoint *ep,
...
@@ -1304,7 +1304,7 @@ sctp_cookie_param_t *sctp_pack_cookie(const struct sctp_endpoint *ep,
* out on the network.
* out on the network.
*/
*/
memset
(
retval
,
0x00
,
*
cookie_len
);
memset
(
retval
,
0x00
,
*
cookie_len
);
cookie
=
(
s
ctp_signed_cookie_t
*
)
retval
->
body
;
cookie
=
(
s
truct
sctp_signed_cookie
*
)
retval
->
body
;
/* Set up the parameter header. */
/* Set up the parameter header. */
retval
->
p
.
type
=
SCTP_PARAM_STATE_COOKIE
;
retval
->
p
.
type
=
SCTP_PARAM_STATE_COOKIE
;
...
@@ -1351,8 +1351,8 @@ struct sctp_association *sctp_unpack_cookie(
...
@@ -1351,8 +1351,8 @@ struct sctp_association *sctp_unpack_cookie(
int
*
error
,
struct
sctp_chunk
**
errp
)
int
*
error
,
struct
sctp_chunk
**
errp
)
{
{
struct
sctp_association
*
retval
=
NULL
;
struct
sctp_association
*
retval
=
NULL
;
s
ctp_signed_cookie_t
*
cookie
;
s
truct
sctp_signed_cookie
*
cookie
;
s
ctp_cookie_t
*
bear_cookie
;
s
truct
sctp_cookie
*
bear_cookie
;
int
headersize
,
bodysize
,
fixed_size
;
int
headersize
,
bodysize
,
fixed_size
;
__u8
digest
[
SCTP_SIGNATURE_SIZE
];
__u8
digest
[
SCTP_SIGNATURE_SIZE
];
struct
scatterlist
sg
;
struct
scatterlist
sg
;
...
@@ -1363,7 +1363,7 @@ struct sctp_association *sctp_unpack_cookie(
...
@@ -1363,7 +1363,7 @@ struct sctp_association *sctp_unpack_cookie(
headersize
=
sizeof
(
sctp_chunkhdr_t
)
+
SCTP_SECRET_SIZE
;
headersize
=
sizeof
(
sctp_chunkhdr_t
)
+
SCTP_SECRET_SIZE
;
bodysize
=
ntohs
(
chunk
->
chunk_hdr
->
length
)
-
headersize
;
bodysize
=
ntohs
(
chunk
->
chunk_hdr
->
length
)
-
headersize
;
fixed_size
=
headersize
+
sizeof
(
s
ctp_cookie_t
);
fixed_size
=
headersize
+
sizeof
(
s
truct
sctp_cookie
);
/* Verify that the chunk looks like it even has a cookie.
/* Verify that the chunk looks like it even has a cookie.
* There must be enough room for our cookie and our peer's
* There must be enough room for our cookie and our peer's
...
...
net/sctp/sm_statefuns.c
View file @
76cb7f3a
...
@@ -538,7 +538,7 @@ sctp_disposition_t sctp_sf_do_5_1D_ce(const struct sctp_endpoint *ep,
...
@@ -538,7 +538,7 @@ sctp_disposition_t sctp_sf_do_5_1D_ce(const struct sctp_endpoint *ep,
* are in good shape.
* are in good shape.
*/
*/
chunk
->
subh
.
cookie_hdr
=
chunk
->
subh
.
cookie_hdr
=
(
s
ctp_signed_cookie_t
*
)
chunk
->
skb
->
data
;
(
s
truct
sctp_signed_cookie
*
)
chunk
->
skb
->
data
;
skb_pull
(
chunk
->
skb
,
skb_pull
(
chunk
->
skb
,
ntohs
(
chunk
->
chunk_hdr
->
length
)
-
sizeof
(
sctp_chunkhdr_t
));
ntohs
(
chunk
->
chunk_hdr
->
length
)
-
sizeof
(
sctp_chunkhdr_t
));
...
@@ -1619,7 +1619,7 @@ sctp_disposition_t sctp_sf_do_5_2_4_dupcook(const struct sctp_endpoint *ep,
...
@@ -1619,7 +1619,7 @@ sctp_disposition_t sctp_sf_do_5_2_4_dupcook(const struct sctp_endpoint *ep,
/* "Decode" the chunk. We have no optional parameters so we
/* "Decode" the chunk. We have no optional parameters so we
* are in good shape.
* are in good shape.
*/
*/
chunk
->
subh
.
cookie_hdr
=
(
s
ctp_signed_cookie_t
*
)
chunk
->
skb
->
data
;
chunk
->
subh
.
cookie_hdr
=
(
s
truct
sctp_signed_cookie
*
)
chunk
->
skb
->
data
;
skb_pull
(
chunk
->
skb
,
ntohs
(
chunk
->
chunk_hdr
->
length
)
-
skb_pull
(
chunk
->
skb
,
ntohs
(
chunk
->
chunk_hdr
->
length
)
-
sizeof
(
sctp_chunkhdr_t
));
sizeof
(
sctp_chunkhdr_t
));
...
@@ -4568,7 +4568,7 @@ void sctp_send_stale_cookie_err(const struct sctp_endpoint *ep,
...
@@ -4568,7 +4568,7 @@ void sctp_send_stale_cookie_err(const struct sctp_endpoint *ep,
if
(
err_chunk
)
{
if
(
err_chunk
)
{
packet
=
sctp_ootb_pkt_new
(
asoc
,
chunk
);
packet
=
sctp_ootb_pkt_new
(
asoc
,
chunk
);
if
(
packet
)
{
if
(
packet
)
{
s
ctp_signed_cookie_t
*
cookie
;
s
truct
sctp_signed_cookie
*
cookie
;
/* Override the OOTB vtag from the cookie. */
/* Override the OOTB vtag from the cookie. */
cookie
=
chunk
->
subh
.
cookie_hdr
;
cookie
=
chunk
->
subh
.
cookie_hdr
;
...
...
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