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
b6d53725
Commit
b6d53725
authored
Jun 19, 2003
by
Jon Grimm
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[SCTP] More typedef & name cleanup.
parent
76cb7f3a
Changes
13
Show whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
80 additions
and
169 deletions
+80
-169
include/net/sctp/sm.h
include/net/sctp/sm.h
+15
-25
include/net/sctp/structs.h
include/net/sctp/structs.h
+5
-8
net/sctp/associola.c
net/sctp/associola.c
+0
-1
net/sctp/bind_addr.c
net/sctp/bind_addr.c
+20
-20
net/sctp/endpointola.c
net/sctp/endpointola.c
+2
-2
net/sctp/ipv6.c
net/sctp/ipv6.c
+4
-4
net/sctp/proc.c
net/sctp/proc.c
+2
-2
net/sctp/protocol.c
net/sctp/protocol.c
+9
-9
net/sctp/sm_make_chunk.c
net/sctp/sm_make_chunk.c
+2
-2
net/sctp/sm_sideeffect.c
net/sctp/sm_sideeffect.c
+3
-3
net/sctp/sm_statefuns.c
net/sctp/sm_statefuns.c
+5
-81
net/sctp/sm_statetable.c
net/sctp/sm_statetable.c
+11
-10
net/sctp/socket.c
net/sctp/socket.c
+2
-2
No files found.
include/net/sctp/sm.h
View file @
b6d53725
...
@@ -84,7 +84,7 @@ typedef sctp_disposition_t (sctp_state_fn_t) (const struct sctp_endpoint *,
...
@@ -84,7 +84,7 @@ typedef sctp_disposition_t (sctp_state_fn_t) (const struct sctp_endpoint *,
typedef
void
(
sctp_timer_event_t
)
(
unsigned
long
);
typedef
void
(
sctp_timer_event_t
)
(
unsigned
long
);
typedef
struct
{
typedef
struct
{
sctp_state_fn_t
*
fn
;
sctp_state_fn_t
*
fn
;
char
*
name
;
c
onst
c
har
*
name
;
}
sctp_sm_table_entry_t
;
}
sctp_sm_table_entry_t
;
/* A naming convention of "sctp_sf_xxx" applies to all the state functions
/* A naming convention of "sctp_sf_xxx" applies to all the state functions
...
@@ -176,9 +176,6 @@ sctp_state_fn_t sctp_sf_do_9_2_reshutack;
...
@@ -176,9 +176,6 @@ sctp_state_fn_t sctp_sf_do_9_2_reshutack;
sctp_state_fn_t
sctp_sf_do_9_2_reshut
;
sctp_state_fn_t
sctp_sf_do_9_2_reshut
;
sctp_state_fn_t
sctp_sf_do_9_2_shutack
;
sctp_state_fn_t
sctp_sf_do_9_2_shutack
;
sctp_state_fn_t
lucky
;
sctp_state_fn_t
other_stupid
;
/* Prototypes for timeout event state functions. Not in use. */
/* Prototypes for timeout event state functions. Not in use. */
sctp_state_fn_t
sctp_do_4_2_reinit
;
sctp_state_fn_t
sctp_do_4_2_reinit
;
sctp_state_fn_t
sctp_do_4_3_reecho
;
sctp_state_fn_t
sctp_do_4_3_reecho
;
...
@@ -193,9 +190,9 @@ sctp_state_fn_t sctp_addip_do_asconf_ack;
...
@@ -193,9 +190,9 @@ sctp_state_fn_t sctp_addip_do_asconf_ack;
/* Prototypes for utility support functions. */
/* Prototypes for utility support functions. */
__u8
sctp_get_chunk_type
(
struct
sctp_chunk
*
chunk
);
__u8
sctp_get_chunk_type
(
struct
sctp_chunk
*
chunk
);
sctp_sm_table_entry_t
*
sctp_sm_lookup_event
(
sctp_event_t
event_type
,
const
sctp_sm_table_entry_t
*
sctp_sm_lookup_event
(
sctp_event_t
,
sctp_state_t
state
,
sctp_state_t
,
sctp_subtype_t
event_subtype
);
sctp_subtype_t
);
int
sctp_chunk_iif
(
const
struct
sctp_chunk
*
);
int
sctp_chunk_iif
(
const
struct
sctp_chunk
*
);
struct
sctp_association
*
sctp_make_temp_asoc
(
const
struct
sctp_endpoint
*
,
struct
sctp_association
*
sctp_make_temp_asoc
(
const
struct
sctp_endpoint
*
,
struct
sctp_chunk
*
,
struct
sctp_chunk
*
,
...
@@ -284,20 +281,13 @@ int sctp_side_effects(sctp_event_t event_type, sctp_subtype_t subtype,
...
@@ -284,20 +281,13 @@ int sctp_side_effects(sctp_event_t event_type, sctp_subtype_t subtype,
int
gfp
);
int
gfp
);
/* 2nd level prototypes */
/* 2nd level prototypes */
int
int
sctp_cmd_interpreter
(
sctp_event_t
,
sctp_subtype_t
,
sctp_state_t
,
sctp_cmd_interpreter
(
sctp_event_t
event_type
,
sctp_subtype_t
subtype
,
struct
sctp_endpoint
*
,
struct
sctp_association
*
,
sctp_state_t
state
,
void
*
event_arg
,
sctp_disposition_t
,
struct
sctp_endpoint
*
ep
,
sctp_cmd_seq_t
*
retval
,
int
gfp
);
struct
sctp_association
*
asoc
,
void
*
event_arg
,
sctp_disposition_t
status
,
sctp_cmd_seq_t
*
retval
,
int
gfp
);
int
sctp_gen_sack
(
struct
sctp_association
*
,
int
force
,
sctp_cmd_seq_t
*
);
int
sctp_gen_sack
(
struct
sctp_association
*
,
int
force
,
sctp_cmd_seq_t
*
);
void
sctp_do_TSNdup
(
struct
sctp_association
*
,
struct
sctp_chunk
*
,
long
gap
);
void
sctp_generate_t3_rtx_event
(
unsigned
long
peer
);
void
sctp_generate_t3_rtx_event
(
unsigned
long
peer
);
void
sctp_generate_heartbeat_event
(
unsigned
long
peer
);
void
sctp_generate_heartbeat_event
(
unsigned
long
peer
);
...
@@ -311,7 +301,7 @@ struct sctp_packet *sctp_ootb_pkt_new(const struct sctp_association *,
...
@@ -311,7 +301,7 @@ struct sctp_packet *sctp_ootb_pkt_new(const struct sctp_association *,
const
struct
sctp_chunk
*
);
const
struct
sctp_chunk
*
);
void
sctp_ootb_pkt_free
(
struct
sctp_packet
*
);
void
sctp_ootb_pkt_free
(
struct
sctp_packet
*
);
s
ctp_cookie_param_t
*
s
truct
sctp_cookie_param
*
sctp_pack_cookie
(
const
struct
sctp_endpoint
*
,
const
struct
sctp_association
*
,
sctp_pack_cookie
(
const
struct
sctp_endpoint
*
,
const
struct
sctp_association
*
,
const
struct
sctp_chunk
*
,
int
*
cookie_len
,
const
struct
sctp_chunk
*
,
int
*
cookie_len
,
const
__u8
*
,
int
addrs_len
);
const
__u8
*
,
int
addrs_len
);
...
@@ -332,18 +322,18 @@ __u32 sctp_generate_tag(const struct sctp_endpoint *);
...
@@ -332,18 +322,18 @@ __u32 sctp_generate_tag(const struct sctp_endpoint *);
__u32
sctp_generate_tsn
(
const
struct
sctp_endpoint
*
);
__u32
sctp_generate_tsn
(
const
struct
sctp_endpoint
*
);
/* 4th level prototypes */
/* 4th level prototypes */
void
sctp_param2sockaddr
(
union
sctp_addr
*
addr
,
sctp_addr_param_t
*
,
void
sctp_param2sockaddr
(
union
sctp_addr
*
addr
,
union
sctp_addr_param
*
,
__u16
port
,
int
iif
);
__u16
port
,
int
iif
);
int
sctp_addr2sockaddr
(
const
union
sctp_params
,
union
sctp_addr
*
);
int
sctp_addr2sockaddr
(
const
union
sctp_params
,
union
sctp_addr
*
);
int
sockaddr2sctp_addr
(
const
union
sctp_addr
*
,
sctp_addr_param_t
*
);
int
sockaddr2sctp_addr
(
const
union
sctp_addr
*
,
union
sctp_addr_param
*
);
/* Extern declarations for major data structures. */
/* Extern declarations for major data structures. */
sctp_sm_table_entry_t
*
sctp_chunk_event_lookup
(
sctp_cid_t
,
sctp_state_t
);
const
sctp_sm_table_entry_t
*
sctp_chunk_event_lookup
(
sctp_cid_t
,
sctp_state_t
);
extern
sctp_sm_table_entry_t
extern
const
sctp_sm_table_entry_t
primitive_event_table
[
SCTP_NUM_PRIMITIVE_TYPES
][
SCTP_STATE_NUM_STATES
];
primitive_event_table
[
SCTP_NUM_PRIMITIVE_TYPES
][
SCTP_STATE_NUM_STATES
];
extern
sctp_sm_table_entry_t
extern
const
sctp_sm_table_entry_t
other_event_table
[
SCTP_NUM_OTHER_TYPES
][
SCTP_STATE_NUM_STATES
];
other_event_table
[
SCTP_NUM_OTHER_TYPES
][
SCTP_STATE_NUM_STATES
];
extern
sctp_sm_table_entry_t
extern
const
sctp_sm_table_entry_t
timeout_event_table
[
SCTP_NUM_TIMEOUT_TYPES
][
SCTP_STATE_NUM_STATES
];
timeout_event_table
[
SCTP_NUM_TIMEOUT_TYPES
][
SCTP_STATE_NUM_STATES
];
extern
sctp_timer_event_t
*
sctp_timer_events
[
SCTP_NUM_TIMEOUT_TYPES
];
extern
sctp_timer_event_t
*
sctp_timer_events
[
SCTP_NUM_TIMEOUT_TYPES
];
...
...
include/net/sctp/structs.h
View file @
b6d53725
...
@@ -185,7 +185,7 @@ extern struct sctp_globals {
...
@@ -185,7 +185,7 @@ extern struct sctp_globals {
* We actively maintain this complete list of interfaces on
* We actively maintain this complete list of interfaces on
* the system by catching routing events.
* the system by catching routing events.
*
*
* It is a list of s
truct sockaddr_storage_list
.
* It is a list of s
ctp_sockaddr_entry
.
*/
*/
struct
list_head
local_addr_list
;
struct
list_head
local_addr_list
;
spinlock_t
local_addr_lock
;
spinlock_t
local_addr_lock
;
...
@@ -409,10 +409,10 @@ struct sctp_signed_cookie {
...
@@ -409,10 +409,10 @@ struct sctp_signed_cookie {
* params for the maximum size and pass such structures around
* params for the maximum size and pass such structures around
* internally.
* internally.
*/
*/
typedef
union
{
union
sctp_addr_param
{
struct
sctp_ipv4addr_param
v4
;
struct
sctp_ipv4addr_param
v4
;
struct
sctp_ipv6addr_param
v6
;
struct
sctp_ipv6addr_param
v6
;
}
sctp_addr_param_t
;
};
/* A convenience type to allow walking through the various
/* A convenience type to allow walking through the various
* parameters and avoid casting all over the place.
* parameters and avoid casting all over the place.
...
@@ -426,7 +426,7 @@ union sctp_params {
...
@@ -426,7 +426,7 @@ union sctp_params {
struct
sctp_supported_addrs_param
*
sat
;
struct
sctp_supported_addrs_param
*
sat
;
struct
sctp_ipv4addr_param
*
v4
;
struct
sctp_ipv4addr_param
*
v4
;
struct
sctp_ipv6addr_param
*
v6
;
struct
sctp_ipv6addr_param
*
v6
;
struct
sctp_addr_param
*
addr
;
union
sctp_addr_param
*
addr
;
};
};
/* RFC 2960. Section 3.3.5 Heartbeat.
/* RFC 2960. Section 3.3.5 Heartbeat.
...
@@ -633,7 +633,7 @@ const union sctp_addr *sctp_source(const struct sctp_chunk *chunk);
...
@@ -633,7 +633,7 @@ const union sctp_addr *sctp_source(const struct sctp_chunk *chunk);
* sin_port -- ordinary port number
* sin_port -- ordinary port number
* sin_addr -- cast to either (struct in_addr) or (struct in6_addr)
* sin_addr -- cast to either (struct in_addr) or (struct in6_addr)
*/
*/
struct
s
ockaddr_storage_list
{
struct
s
ctp_sockaddr_entry
{
struct
list_head
list
;
struct
list_head
list
;
union
sctp_addr
a
;
union
sctp_addr
a
;
};
};
...
@@ -1401,9 +1401,6 @@ struct sctp_association {
...
@@ -1401,9 +1401,6 @@ struct sctp_association {
*/
*/
sctp_state_t
state
;
sctp_state_t
state
;
/* When did we enter this state? */
int
state_timestamp
;
/* The cookie life I award for any cookie. */
/* The cookie life I award for any cookie. */
struct
timeval
cookie_life
;
struct
timeval
cookie_life
;
...
...
net/sctp/associola.c
View file @
b6d53725
...
@@ -126,7 +126,6 @@ struct sctp_association *sctp_association_init(struct sctp_association *asoc,
...
@@ -126,7 +126,6 @@ struct sctp_association *sctp_association_init(struct sctp_association *asoc,
asoc
->
base
.
addr_lock
=
RW_LOCK_UNLOCKED
;
asoc
->
base
.
addr_lock
=
RW_LOCK_UNLOCKED
;
asoc
->
state
=
SCTP_STATE_CLOSED
;
asoc
->
state
=
SCTP_STATE_CLOSED
;
asoc
->
state_timestamp
=
jiffies
;
/* Set these values from the socket values, a conversion between
/* Set these values from the socket values, a conversion between
* millsecons to seconds/microseconds must also be done.
* millsecons to seconds/microseconds must also be done.
...
...
net/sctp/bind_addr.c
View file @
b6d53725
...
@@ -65,7 +65,7 @@ int sctp_bind_addr_copy(struct sctp_bind_addr *dest,
...
@@ -65,7 +65,7 @@ int sctp_bind_addr_copy(struct sctp_bind_addr *dest,
const
struct
sctp_bind_addr
*
src
,
const
struct
sctp_bind_addr
*
src
,
sctp_scope_t
scope
,
int
gfp
,
int
flags
)
sctp_scope_t
scope
,
int
gfp
,
int
flags
)
{
{
struct
s
ockaddr_storage_list
*
addr
;
struct
s
ctp_sockaddr_entry
*
addr
;
struct
list_head
*
pos
;
struct
list_head
*
pos
;
int
error
=
0
;
int
error
=
0
;
...
@@ -74,7 +74,7 @@ int sctp_bind_addr_copy(struct sctp_bind_addr *dest,
...
@@ -74,7 +74,7 @@ int sctp_bind_addr_copy(struct sctp_bind_addr *dest,
/* Extract the addresses which are relevant for this scope. */
/* Extract the addresses which are relevant for this scope. */
list_for_each
(
pos
,
&
src
->
address_list
)
{
list_for_each
(
pos
,
&
src
->
address_list
)
{
addr
=
list_entry
(
pos
,
struct
s
ockaddr_storage_list
,
list
);
addr
=
list_entry
(
pos
,
struct
s
ctp_sockaddr_entry
,
list
);
error
=
sctp_copy_one_addr
(
dest
,
&
addr
->
a
,
scope
,
error
=
sctp_copy_one_addr
(
dest
,
&
addr
->
a
,
scope
,
gfp
,
flags
);
gfp
,
flags
);
if
(
error
<
0
)
if
(
error
<
0
)
...
@@ -87,7 +87,7 @@ int sctp_bind_addr_copy(struct sctp_bind_addr *dest,
...
@@ -87,7 +87,7 @@ int sctp_bind_addr_copy(struct sctp_bind_addr *dest,
*/
*/
if
(
list_empty
(
&
dest
->
address_list
)
&&
(
SCTP_SCOPE_GLOBAL
==
scope
))
{
if
(
list_empty
(
&
dest
->
address_list
)
&&
(
SCTP_SCOPE_GLOBAL
==
scope
))
{
list_for_each
(
pos
,
&
src
->
address_list
)
{
list_for_each
(
pos
,
&
src
->
address_list
)
{
addr
=
list_entry
(
pos
,
struct
s
ockaddr_storage_list
,
addr
=
list_entry
(
pos
,
struct
s
ctp_sockaddr_entry
,
list
);
list
);
error
=
sctp_copy_one_addr
(
dest
,
&
addr
->
a
,
error
=
sctp_copy_one_addr
(
dest
,
&
addr
->
a
,
SCTP_SCOPE_LINK
,
gfp
,
SCTP_SCOPE_LINK
,
gfp
,
...
@@ -135,12 +135,12 @@ void sctp_bind_addr_init(struct sctp_bind_addr *bp, __u16 port)
...
@@ -135,12 +135,12 @@ void sctp_bind_addr_init(struct sctp_bind_addr *bp, __u16 port)
/* Dispose of the address list. */
/* Dispose of the address list. */
static
void
sctp_bind_addr_clean
(
struct
sctp_bind_addr
*
bp
)
static
void
sctp_bind_addr_clean
(
struct
sctp_bind_addr
*
bp
)
{
{
struct
s
ockaddr_storage_list
*
addr
;
struct
s
ctp_sockaddr_entry
*
addr
;
struct
list_head
*
pos
,
*
temp
;
struct
list_head
*
pos
,
*
temp
;
/* Empty the bind address list. */
/* Empty the bind address list. */
list_for_each_safe
(
pos
,
temp
,
&
bp
->
address_list
)
{
list_for_each_safe
(
pos
,
temp
,
&
bp
->
address_list
)
{
addr
=
list_entry
(
pos
,
struct
s
ockaddr_storage_list
,
list
);
addr
=
list_entry
(
pos
,
struct
s
ctp_sockaddr_entry
,
list
);
list_del
(
pos
);
list_del
(
pos
);
kfree
(
addr
);
kfree
(
addr
);
SCTP_DBG_OBJCNT_DEC
(
addr
);
SCTP_DBG_OBJCNT_DEC
(
addr
);
...
@@ -163,10 +163,10 @@ void sctp_bind_addr_free(struct sctp_bind_addr *bp)
...
@@ -163,10 +163,10 @@ void sctp_bind_addr_free(struct sctp_bind_addr *bp)
int
sctp_add_bind_addr
(
struct
sctp_bind_addr
*
bp
,
union
sctp_addr
*
new
,
int
sctp_add_bind_addr
(
struct
sctp_bind_addr
*
bp
,
union
sctp_addr
*
new
,
int
gfp
)
int
gfp
)
{
{
struct
s
ockaddr_storage_list
*
addr
;
struct
s
ctp_sockaddr_entry
*
addr
;
/* Add the address to the bind address list. */
/* Add the address to the bind address list. */
addr
=
t_new
(
struct
s
ockaddr_storage_list
,
gfp
);
addr
=
t_new
(
struct
s
ctp_sockaddr_entry
,
gfp
);
if
(
!
addr
)
if
(
!
addr
)
return
-
ENOMEM
;
return
-
ENOMEM
;
...
@@ -191,10 +191,10 @@ int sctp_add_bind_addr(struct sctp_bind_addr *bp, union sctp_addr *new,
...
@@ -191,10 +191,10 @@ int sctp_add_bind_addr(struct sctp_bind_addr *bp, union sctp_addr *new,
int
sctp_del_bind_addr
(
struct
sctp_bind_addr
*
bp
,
union
sctp_addr
*
del_addr
)
int
sctp_del_bind_addr
(
struct
sctp_bind_addr
*
bp
,
union
sctp_addr
*
del_addr
)
{
{
struct
list_head
*
pos
,
*
temp
;
struct
list_head
*
pos
,
*
temp
;
struct
s
ockaddr_storage_list
*
addr
;
struct
s
ctp_sockaddr_entry
*
addr
;
list_for_each_safe
(
pos
,
temp
,
&
bp
->
address_list
)
{
list_for_each_safe
(
pos
,
temp
,
&
bp
->
address_list
)
{
addr
=
list_entry
(
pos
,
struct
s
ockaddr_storage_list
,
list
);
addr
=
list_entry
(
pos
,
struct
s
ctp_sockaddr_entry
,
list
);
if
(
sctp_cmp_addr_exact
(
&
addr
->
a
,
del_addr
))
{
if
(
sctp_cmp_addr_exact
(
&
addr
->
a
,
del_addr
))
{
/* Found the exact match. */
/* Found the exact match. */
list_del
(
pos
);
list_del
(
pos
);
...
@@ -219,22 +219,22 @@ union sctp_params sctp_bind_addrs_to_raw(const struct sctp_bind_addr *bp,
...
@@ -219,22 +219,22 @@ union sctp_params sctp_bind_addrs_to_raw(const struct sctp_bind_addr *bp,
union
sctp_params
addrparms
;
union
sctp_params
addrparms
;
union
sctp_params
retval
;
union
sctp_params
retval
;
int
addrparms_len
;
int
addrparms_len
;
sctp_addr_param_t
rawaddr
;
union
sctp_addr_param
rawaddr
;
int
len
;
int
len
;
struct
s
ockaddr_storage_list
*
addr
;
struct
s
ctp_sockaddr_entry
*
addr
;
struct
list_head
*
pos
;
struct
list_head
*
pos
;
addrparms_len
=
0
;
addrparms_len
=
0
;
len
=
0
;
len
=
0
;
/* Allocate enough memory at once. */
/* Allocate enough memory at once. */
list_for_each
(
pos
,
&
bp
->
address_list
)
{
list_for_each
(
pos
,
&
bp
->
address_list
)
{
len
+=
sizeof
(
sctp_addr_param_t
);
len
+=
sizeof
(
union
sctp_addr_param
);
}
}
/* Don't even bother embedding an address if there
/* Don't even bother embedding an address if there
* is only one.
* is only one.
*/
*/
if
(
len
==
sizeof
(
sctp_addr_param_t
))
{
if
(
len
==
sizeof
(
union
sctp_addr_param
))
{
retval
.
v
=
NULL
;
retval
.
v
=
NULL
;
goto
end_raw
;
goto
end_raw
;
}
}
...
@@ -246,7 +246,7 @@ union sctp_params sctp_bind_addrs_to_raw(const struct sctp_bind_addr *bp,
...
@@ -246,7 +246,7 @@ union sctp_params sctp_bind_addrs_to_raw(const struct sctp_bind_addr *bp,
addrparms
=
retval
;
addrparms
=
retval
;
list_for_each
(
pos
,
&
bp
->
address_list
)
{
list_for_each
(
pos
,
&
bp
->
address_list
)
{
addr
=
list_entry
(
pos
,
struct
s
ockaddr_storage_list
,
list
);
addr
=
list_entry
(
pos
,
struct
s
ctp_sockaddr_entry
,
list
);
len
=
sockaddr2sctp_addr
(
&
addr
->
a
,
&
rawaddr
);
len
=
sockaddr2sctp_addr
(
&
addr
->
a
,
&
rawaddr
);
memcpy
(
addrparms
.
v
,
&
rawaddr
,
len
);
memcpy
(
addrparms
.
v
,
&
rawaddr
,
len
);
addrparms
.
v
+=
len
;
addrparms
.
v
+=
len
;
...
@@ -265,16 +265,16 @@ union sctp_params sctp_bind_addrs_to_raw(const struct sctp_bind_addr *bp,
...
@@ -265,16 +265,16 @@ union sctp_params sctp_bind_addrs_to_raw(const struct sctp_bind_addr *bp,
int
sctp_raw_to_bind_addrs
(
struct
sctp_bind_addr
*
bp
,
__u8
*
raw_addr_list
,
int
sctp_raw_to_bind_addrs
(
struct
sctp_bind_addr
*
bp
,
__u8
*
raw_addr_list
,
int
addrs_len
,
__u16
port
,
int
gfp
)
int
addrs_len
,
__u16
port
,
int
gfp
)
{
{
sctp_addr_param_t
*
rawaddr
;
union
sctp_addr_param
*
rawaddr
;
s
ctp_paramhdr_t
*
param
;
s
truct
sctp_paramhdr
*
param
;
union
sctp_addr
addr
;
union
sctp_addr
addr
;
int
retval
=
0
;
int
retval
=
0
;
int
len
;
int
len
;
/* Convert the raw address to standard address format */
/* Convert the raw address to standard address format */
while
(
addrs_len
)
{
while
(
addrs_len
)
{
param
=
(
s
ctp_paramhdr_t
*
)
raw_addr_list
;
param
=
(
s
truct
sctp_paramhdr
*
)
raw_addr_list
;
rawaddr
=
(
sctp_addr_param_t
*
)
raw_addr_list
;
rawaddr
=
(
union
sctp_addr_param
*
)
raw_addr_list
;
switch
(
param
->
type
)
{
switch
(
param
->
type
)
{
case
SCTP_PARAM_IPV4_ADDRESS
:
case
SCTP_PARAM_IPV4_ADDRESS
:
...
@@ -312,11 +312,11 @@ int sctp_bind_addr_match(struct sctp_bind_addr *bp,
...
@@ -312,11 +312,11 @@ int sctp_bind_addr_match(struct sctp_bind_addr *bp,
const
union
sctp_addr
*
addr
,
const
union
sctp_addr
*
addr
,
struct
sctp_opt
*
opt
)
struct
sctp_opt
*
opt
)
{
{
struct
s
ockaddr_storage_list
*
laddr
;
struct
s
ctp_sockaddr_entry
*
laddr
;
struct
list_head
*
pos
;
struct
list_head
*
pos
;
list_for_each
(
pos
,
&
bp
->
address_list
)
{
list_for_each
(
pos
,
&
bp
->
address_list
)
{
laddr
=
list_entry
(
pos
,
struct
s
ockaddr_storage_list
,
list
);
laddr
=
list_entry
(
pos
,
struct
s
ctp_sockaddr_entry
,
list
);
if
(
opt
->
pf
->
cmp_addr
(
&
laddr
->
a
,
addr
,
opt
))
if
(
opt
->
pf
->
cmp_addr
(
&
laddr
->
a
,
addr
,
opt
))
return
1
;
return
1
;
}
}
...
...
net/sctp/endpointola.c
View file @
b6d53725
...
@@ -313,13 +313,13 @@ int sctp_endpoint_is_peeled_off(struct sctp_endpoint *ep,
...
@@ -313,13 +313,13 @@ int sctp_endpoint_is_peeled_off(struct sctp_endpoint *ep,
const
union
sctp_addr
*
paddr
)
const
union
sctp_addr
*
paddr
)
{
{
struct
list_head
*
pos
;
struct
list_head
*
pos
;
struct
s
ockaddr_storage_list
*
addr
;
struct
s
ctp_sockaddr_entry
*
addr
;
struct
sctp_bind_addr
*
bp
;
struct
sctp_bind_addr
*
bp
;
sctp_read_lock
(
&
ep
->
base
.
addr_lock
);
sctp_read_lock
(
&
ep
->
base
.
addr_lock
);
bp
=
&
ep
->
base
.
bind_addr
;
bp
=
&
ep
->
base
.
bind_addr
;
list_for_each
(
pos
,
&
bp
->
address_list
)
{
list_for_each
(
pos
,
&
bp
->
address_list
)
{
addr
=
list_entry
(
pos
,
struct
s
ockaddr_storage_list
,
list
);
addr
=
list_entry
(
pos
,
struct
s
ctp_sockaddr_entry
,
list
);
if
(
sctp_has_association
(
&
addr
->
a
,
paddr
))
{
if
(
sctp_has_association
(
&
addr
->
a
,
paddr
))
{
sctp_read_unlock
(
&
ep
->
base
.
addr_lock
);
sctp_read_unlock
(
&
ep
->
base
.
addr_lock
);
return
1
;
return
1
;
...
...
net/sctp/ipv6.c
View file @
b6d53725
...
@@ -248,7 +248,7 @@ void sctp_v6_get_saddr(struct sctp_association *asoc, struct dst_entry *dst,
...
@@ -248,7 +248,7 @@ void sctp_v6_get_saddr(struct sctp_association *asoc, struct dst_entry *dst,
{
{
struct
sctp_bind_addr
*
bp
;
struct
sctp_bind_addr
*
bp
;
rwlock_t
*
addr_lock
;
rwlock_t
*
addr_lock
;
struct
s
ockaddr_storage_list
*
laddr
;
struct
s
ctp_sockaddr_entry
*
laddr
;
struct
list_head
*
pos
;
struct
list_head
*
pos
;
sctp_scope_t
scope
;
sctp_scope_t
scope
;
union
sctp_addr
*
baddr
=
NULL
;
union
sctp_addr
*
baddr
=
NULL
;
...
@@ -277,7 +277,7 @@ void sctp_v6_get_saddr(struct sctp_association *asoc, struct dst_entry *dst,
...
@@ -277,7 +277,7 @@ void sctp_v6_get_saddr(struct sctp_association *asoc, struct dst_entry *dst,
*/
*/
sctp_read_lock
(
addr_lock
);
sctp_read_lock
(
addr_lock
);
list_for_each
(
pos
,
&
bp
->
address_list
)
{
list_for_each
(
pos
,
&
bp
->
address_list
)
{
laddr
=
list_entry
(
pos
,
struct
s
ockaddr_storage_list
,
list
);
laddr
=
list_entry
(
pos
,
struct
s
ctp_sockaddr_entry
,
list
);
if
((
laddr
->
a
.
sa
.
sa_family
==
AF_INET6
)
&&
if
((
laddr
->
a
.
sa
.
sa_family
==
AF_INET6
)
&&
(
scope
<=
sctp_scope
(
&
laddr
->
a
)))
{
(
scope
<=
sctp_scope
(
&
laddr
->
a
)))
{
bmatchlen
=
sctp_v6_addr_match_len
(
daddr
,
&
laddr
->
a
);
bmatchlen
=
sctp_v6_addr_match_len
(
daddr
,
&
laddr
->
a
);
...
@@ -309,7 +309,7 @@ static void sctp_v6_copy_addrlist(struct list_head *addrlist,
...
@@ -309,7 +309,7 @@ static void sctp_v6_copy_addrlist(struct list_head *addrlist,
{
{
struct
inet6_dev
*
in6_dev
;
struct
inet6_dev
*
in6_dev
;
struct
inet6_ifaddr
*
ifp
;
struct
inet6_ifaddr
*
ifp
;
struct
s
ockaddr_storage_list
*
addr
;
struct
s
ctp_sockaddr_entry
*
addr
;
read_lock
(
&
addrconf_lock
);
read_lock
(
&
addrconf_lock
);
if
((
in6_dev
=
__in6_dev_get
(
dev
))
==
NULL
)
{
if
((
in6_dev
=
__in6_dev_get
(
dev
))
==
NULL
)
{
...
@@ -320,7 +320,7 @@ static void sctp_v6_copy_addrlist(struct list_head *addrlist,
...
@@ -320,7 +320,7 @@ static void sctp_v6_copy_addrlist(struct list_head *addrlist,
read_lock
(
&
in6_dev
->
lock
);
read_lock
(
&
in6_dev
->
lock
);
for
(
ifp
=
in6_dev
->
addr_list
;
ifp
;
ifp
=
ifp
->
if_next
)
{
for
(
ifp
=
in6_dev
->
addr_list
;
ifp
;
ifp
=
ifp
->
if_next
)
{
/* Add the address to the local list. */
/* Add the address to the local list. */
addr
=
t_new
(
struct
s
ockaddr_storage_list
,
GFP_ATOMIC
);
addr
=
t_new
(
struct
s
ctp_sockaddr_entry
,
GFP_ATOMIC
);
if
(
addr
)
{
if
(
addr
)
{
addr
->
a
.
v6
.
sin6_family
=
AF_INET6
;
addr
->
a
.
v6
.
sin6_family
=
AF_INET6
;
addr
->
a
.
v6
.
sin6_port
=
0
;
addr
->
a
.
v6
.
sin6_port
=
0
;
...
...
net/sctp/proc.c
View file @
b6d53725
...
@@ -133,12 +133,12 @@ void sctp_snmp_proc_exit(void)
...
@@ -133,12 +133,12 @@ void sctp_snmp_proc_exit(void)
static
void
sctp_seq_dump_local_addrs
(
struct
seq_file
*
seq
,
struct
sctp_ep_common
*
epb
)
static
void
sctp_seq_dump_local_addrs
(
struct
seq_file
*
seq
,
struct
sctp_ep_common
*
epb
)
{
{
struct
list_head
*
pos
;
struct
list_head
*
pos
;
struct
s
ockaddr_storage_list
*
laddr
;
struct
s
ctp_sockaddr_entry
*
laddr
;
union
sctp_addr
*
addr
;
union
sctp_addr
*
addr
;
struct
sctp_af
*
af
;
struct
sctp_af
*
af
;
list_for_each
(
pos
,
&
epb
->
bind_addr
.
address_list
)
{
list_for_each
(
pos
,
&
epb
->
bind_addr
.
address_list
)
{
laddr
=
list_entry
(
pos
,
struct
s
ockaddr_storage_list
,
list
);
laddr
=
list_entry
(
pos
,
struct
s
ctp_sockaddr_entry
,
list
);
addr
=
(
union
sctp_addr
*
)
&
laddr
->
a
;
addr
=
(
union
sctp_addr
*
)
&
laddr
->
a
;
af
=
sctp_get_af_specific
(
addr
->
sa
.
sa_family
);
af
=
sctp_get_af_specific
(
addr
->
sa
.
sa_family
);
af
->
seq_dump_addr
(
seq
,
addr
);
af
->
seq_dump_addr
(
seq
,
addr
);
...
...
net/sctp/protocol.c
View file @
b6d53725
...
@@ -143,7 +143,7 @@ static void sctp_v4_copy_addrlist(struct list_head *addrlist,
...
@@ -143,7 +143,7 @@ static void sctp_v4_copy_addrlist(struct list_head *addrlist,
{
{
struct
in_device
*
in_dev
;
struct
in_device
*
in_dev
;
struct
in_ifaddr
*
ifa
;
struct
in_ifaddr
*
ifa
;
struct
s
ockaddr_storage_list
*
addr
;
struct
s
ctp_sockaddr_entry
*
addr
;
read_lock
(
&
inetdev_lock
);
read_lock
(
&
inetdev_lock
);
if
((
in_dev
=
__in_dev_get
(
dev
))
==
NULL
)
{
if
((
in_dev
=
__in_dev_get
(
dev
))
==
NULL
)
{
...
@@ -154,7 +154,7 @@ static void sctp_v4_copy_addrlist(struct list_head *addrlist,
...
@@ -154,7 +154,7 @@ static void sctp_v4_copy_addrlist(struct list_head *addrlist,
read_lock
(
&
in_dev
->
lock
);
read_lock
(
&
in_dev
->
lock
);
for
(
ifa
=
in_dev
->
ifa_list
;
ifa
;
ifa
=
ifa
->
ifa_next
)
{
for
(
ifa
=
in_dev
->
ifa_list
;
ifa
;
ifa
=
ifa
->
ifa_next
)
{
/* Add the address to the local list. */
/* Add the address to the local list. */
addr
=
t_new
(
struct
s
ockaddr_storage_list
,
GFP_ATOMIC
);
addr
=
t_new
(
struct
s
ctp_sockaddr_entry
,
GFP_ATOMIC
);
if
(
addr
)
{
if
(
addr
)
{
addr
->
a
.
v4
.
sin_family
=
AF_INET
;
addr
->
a
.
v4
.
sin_family
=
AF_INET
;
addr
->
a
.
v4
.
sin_port
=
0
;
addr
->
a
.
v4
.
sin_port
=
0
;
...
@@ -198,11 +198,11 @@ static void sctp_get_local_addr_list(void)
...
@@ -198,11 +198,11 @@ static void sctp_get_local_addr_list(void)
/* Free the existing local addresses. */
/* Free the existing local addresses. */
static
void
__sctp_free_local_addr_list
(
void
)
static
void
__sctp_free_local_addr_list
(
void
)
{
{
struct
s
ockaddr_storage_list
*
addr
;
struct
s
ctp_sockaddr_entry
*
addr
;
struct
list_head
*
pos
,
*
temp
;
struct
list_head
*
pos
,
*
temp
;
list_for_each_safe
(
pos
,
temp
,
&
sctp_local_addr_list
)
{
list_for_each_safe
(
pos
,
temp
,
&
sctp_local_addr_list
)
{
addr
=
list_entry
(
pos
,
struct
s
ockaddr_storage_list
,
list
);
addr
=
list_entry
(
pos
,
struct
s
ctp_sockaddr_entry
,
list
);
list_del
(
pos
);
list_del
(
pos
);
kfree
(
addr
);
kfree
(
addr
);
}
}
...
@@ -222,14 +222,14 @@ static void sctp_free_local_addr_list(void)
...
@@ -222,14 +222,14 @@ static void sctp_free_local_addr_list(void)
int
sctp_copy_local_addr_list
(
struct
sctp_bind_addr
*
bp
,
sctp_scope_t
scope
,
int
sctp_copy_local_addr_list
(
struct
sctp_bind_addr
*
bp
,
sctp_scope_t
scope
,
int
gfp
,
int
copy_flags
)
int
gfp
,
int
copy_flags
)
{
{
struct
s
ockaddr_storage_list
*
addr
;
struct
s
ctp_sockaddr_entry
*
addr
;
int
error
=
0
;
int
error
=
0
;
struct
list_head
*
pos
;
struct
list_head
*
pos
;
unsigned
long
flags
;
unsigned
long
flags
;
sctp_spin_lock_irqsave
(
&
sctp_local_addr_lock
,
flags
);
sctp_spin_lock_irqsave
(
&
sctp_local_addr_lock
,
flags
);
list_for_each
(
pos
,
&
sctp_local_addr_list
)
{
list_for_each
(
pos
,
&
sctp_local_addr_list
)
{
addr
=
list_entry
(
pos
,
struct
s
ockaddr_storage_list
,
list
);
addr
=
list_entry
(
pos
,
struct
s
ctp_sockaddr_entry
,
list
);
if
(
sctp_in_scope
(
&
addr
->
a
,
scope
))
{
if
(
sctp_in_scope
(
&
addr
->
a
,
scope
))
{
/* Now that the address is in scope, check to see if
/* Now that the address is in scope, check to see if
* the address type is really supported by the local
* the address type is really supported by the local
...
@@ -412,7 +412,7 @@ struct dst_entry *sctp_v4_get_dst(struct sctp_association *asoc,
...
@@ -412,7 +412,7 @@ struct dst_entry *sctp_v4_get_dst(struct sctp_association *asoc,
struct
flowi
fl
;
struct
flowi
fl
;
struct
sctp_bind_addr
*
bp
;
struct
sctp_bind_addr
*
bp
;
rwlock_t
*
addr_lock
;
rwlock_t
*
addr_lock
;
struct
s
ockaddr_storage_list
*
laddr
;
struct
s
ctp_sockaddr_entry
*
laddr
;
struct
list_head
*
pos
;
struct
list_head
*
pos
;
struct
dst_entry
*
dst
=
NULL
;
struct
dst_entry
*
dst
=
NULL
;
union
sctp_addr
dst_saddr
;
union
sctp_addr
dst_saddr
;
...
@@ -447,7 +447,7 @@ struct dst_entry *sctp_v4_get_dst(struct sctp_association *asoc,
...
@@ -447,7 +447,7 @@ struct dst_entry *sctp_v4_get_dst(struct sctp_association *asoc,
*/
*/
sctp_read_lock
(
addr_lock
);
sctp_read_lock
(
addr_lock
);
list_for_each
(
pos
,
&
bp
->
address_list
)
{
list_for_each
(
pos
,
&
bp
->
address_list
)
{
laddr
=
list_entry
(
pos
,
struct
s
ockaddr_storage_list
,
laddr
=
list_entry
(
pos
,
struct
s
ctp_sockaddr_entry
,
list
);
list
);
sctp_v4_dst_saddr
(
&
dst_saddr
,
dst
,
bp
->
port
);
sctp_v4_dst_saddr
(
&
dst_saddr
,
dst
,
bp
->
port
);
if
(
sctp_v4_cmp_addr
(
&
dst_saddr
,
&
laddr
->
a
))
if
(
sctp_v4_cmp_addr
(
&
dst_saddr
,
&
laddr
->
a
))
...
@@ -467,7 +467,7 @@ struct dst_entry *sctp_v4_get_dst(struct sctp_association *asoc,
...
@@ -467,7 +467,7 @@ struct dst_entry *sctp_v4_get_dst(struct sctp_association *asoc,
*/
*/
sctp_read_lock
(
addr_lock
);
sctp_read_lock
(
addr_lock
);
list_for_each
(
pos
,
&
bp
->
address_list
)
{
list_for_each
(
pos
,
&
bp
->
address_list
)
{
laddr
=
list_entry
(
pos
,
struct
s
ockaddr_storage_list
,
list
);
laddr
=
list_entry
(
pos
,
struct
s
ctp_sockaddr_entry
,
list
);
if
(
AF_INET
==
laddr
->
a
.
sa
.
sa_family
)
{
if
(
AF_INET
==
laddr
->
a
.
sa
.
sa_family
)
{
fl
.
fl4_src
=
laddr
->
a
.
v4
.
sin_addr
.
s_addr
;
fl
.
fl4_src
=
laddr
->
a
.
v4
.
sin_addr
.
s_addr
;
...
...
net/sctp/sm_make_chunk.c
View file @
b6d53725
...
@@ -2022,7 +2022,7 @@ __u32 sctp_generate_tsn(const struct sctp_endpoint *ep)
...
@@ -2022,7 +2022,7 @@ __u32 sctp_generate_tsn(const struct sctp_endpoint *ep)
********************************************************************/
********************************************************************/
/* Convert from an SCTP IP parameter to a union sctp_addr. */
/* Convert from an SCTP IP parameter to a union sctp_addr. */
void
sctp_param2sockaddr
(
union
sctp_addr
*
addr
,
sctp_addr_param_t
*
param
,
void
sctp_param2sockaddr
(
union
sctp_addr
*
addr
,
union
sctp_addr_param
*
param
,
__u16
port
,
int
iif
)
__u16
port
,
int
iif
)
{
{
switch
(
param
->
v4
.
param_hdr
.
type
)
{
switch
(
param
->
v4
.
param_hdr
.
type
)
{
...
@@ -2073,7 +2073,7 @@ int sctp_addr2sockaddr(union sctp_params p, union sctp_addr *sa)
...
@@ -2073,7 +2073,7 @@ int sctp_addr2sockaddr(union sctp_params p, union sctp_addr *sa)
/* Convert a sockaddr_in to an IP address in an SCTP param.
/* Convert a sockaddr_in to an IP address in an SCTP param.
* Returns len if a valid conversion was possible.
* Returns len if a valid conversion was possible.
*/
*/
int
sockaddr2sctp_addr
(
const
union
sctp_addr
*
sa
,
sctp_addr_param_t
*
p
)
int
sockaddr2sctp_addr
(
const
union
sctp_addr
*
sa
,
union
sctp_addr_param
*
p
)
{
{
int
len
=
0
;
int
len
=
0
;
...
...
net/sctp/sm_sideeffect.c
View file @
b6d53725
...
@@ -608,13 +608,13 @@ static void sctp_cmd_setup_t2(sctp_cmd_seq_t *cmds,
...
@@ -608,13 +608,13 @@ static void sctp_cmd_setup_t2(sctp_cmd_seq_t *cmds,
}
}
/* Helper function to change the state of an association. */
/* Helper function to change the state of an association. */
static
void
sctp_cmd_new_state
(
sctp_cmd_seq_t
*
cmds
,
struct
sctp_association
*
asoc
,
static
void
sctp_cmd_new_state
(
sctp_cmd_seq_t
*
cmds
,
struct
sctp_association
*
asoc
,
sctp_state_t
state
)
sctp_state_t
state
)
{
{
struct
sock
*
sk
=
asoc
->
base
.
sk
;
struct
sock
*
sk
=
asoc
->
base
.
sk
;
asoc
->
state
=
state
;
asoc
->
state
=
state
;
asoc
->
state_timestamp
=
jiffies
;
if
(
sctp_style
(
sk
,
TCP
))
{
if
(
sctp_style
(
sk
,
TCP
))
{
/* Change the sk->sk_state of a TCP-style socket that has
/* Change the sk->sk_state of a TCP-style socket that has
...
@@ -702,7 +702,7 @@ int sctp_do_sm(sctp_event_t event_type, sctp_subtype_t subtype,
...
@@ -702,7 +702,7 @@ int sctp_do_sm(sctp_event_t event_type, sctp_subtype_t subtype,
int
gfp
)
int
gfp
)
{
{
sctp_cmd_seq_t
commands
;
sctp_cmd_seq_t
commands
;
sctp_sm_table_entry_t
*
state_fn
;
const
sctp_sm_table_entry_t
*
state_fn
;
sctp_disposition_t
status
;
sctp_disposition_t
status
;
int
error
=
0
;
int
error
=
0
;
typedef
const
char
*
(
printfn_t
)(
sctp_subtype_t
);
typedef
const
char
*
(
printfn_t
)(
sctp_subtype_t
);
...
...
net/sctp/sm_statefuns.c
View file @
b6d53725
...
@@ -925,16 +925,16 @@ static int sctp_sf_send_restart_abort(union sctp_addr *ssa,
...
@@ -925,16 +925,16 @@ static int sctp_sf_send_restart_abort(union sctp_addr *ssa,
{
{
int
len
;
int
len
;
struct
sctp_packet
*
pkt
;
struct
sctp_packet
*
pkt
;
sctp_addr_param_t
*
addrparm
;
union
sctp_addr_param
*
addrparm
;
s
ctp_errhdr_t
*
errhdr
;
s
truct
sctp_errhdr
*
errhdr
;
struct
sctp_endpoint
*
ep
;
struct
sctp_endpoint
*
ep
;
char
buffer
[
sizeof
(
s
ctp_errhdr_t
)
+
sizeof
(
sctp_addr_param_t
)];
char
buffer
[
sizeof
(
s
truct
sctp_errhdr
)
+
sizeof
(
union
sctp_addr_param
)];
/* Build the error on the stack. We are way to malloc crazy
/* Build the error on the stack. We are way to malloc crazy
* throughout the code today.
* throughout the code today.
*/
*/
errhdr
=
(
s
ctp_errhdr_t
*
)
buffer
;
errhdr
=
(
s
truct
sctp_errhdr
*
)
buffer
;
addrparm
=
(
sctp_addr_param_t
*
)
errhdr
->
variable
;
addrparm
=
(
union
sctp_addr_param
*
)
errhdr
->
variable
;
/* Copy into a parm format. */
/* Copy into a parm format. */
len
=
sockaddr2sctp_addr
(
ssa
,
addrparm
);
len
=
sockaddr2sctp_addr
(
ssa
,
addrparm
);
...
@@ -3204,82 +3204,6 @@ sctp_disposition_t sctp_sf_pdiscard(const struct sctp_endpoint *ep,
...
@@ -3204,82 +3204,6 @@ sctp_disposition_t sctp_sf_pdiscard(const struct sctp_endpoint *ep,
return
SCTP_DISPOSITION_CONSUME
;
return
SCTP_DISPOSITION_CONSUME
;
}
}
#if 0
/*
* We did something stupid but got lucky. Namely, we sent a HEARTBEAT
* before the association was all the way up and we did NOT get an
* ABORT.
*
* Log the fact and then process normally.
*
* Section: Not specified
* Verification Tag: 8.5 Verification Tag [Normal verification]
* Inputs
* (endpoint, asoc, chunk)
*
* Outputs
* (asoc, reply_msg, msg_up, timers, counters)
*
* The return value is the disposition of the chunk.
*/
sctp_disposition_t lucky(const struct sctp_endpoint *ep,
const struct sctp_association *asoc,
const sctp_subtype_t type,
void *arg,
sctp_cmd_seq_t *commands)
{
struct sctp_chunk *chunk = arg;
/* 8.5 When receiving an SCTP packet, the endpoint MUST ensure
* that the value in the Verification Tag field of the
* received SCTP packet matches its own Tag. ...
*/
if (chunk->sctp_hdr->vtag != asoc->c.my_vtag)
return sctp_sf_pdiscard(ep, asoc, type, arg, commands);
return SCTP_DISPOSITION_CONSUME;
nomem:
return SCTP_DISPOSITION_NOMEM;
}
#endif /* 0 */
#if 0
/*
* The other end is doing something very stupid. We'll ignore them
* after logging their idiocy. :-)
*
* Section: Not specified
* Verification Tag: 8.5 Verification Tag [Normal verification]
* Inputs
* (endpoint, asoc, chunk)
*
* Outputs
* (asoc, reply_msg, msg_up, timers, counters)
*
* The return value is the disposition of the chunk.
*/
sctp_disposition_t other_stupid(const struct sctp_endpoint *ep,
const struct sctp_association *asoc,
const sctp_subtype_t type,
void *arg,
sctp_cmd_seq_t *commands)
{
struct sctp_chunk *chunk = arg;
/* 8.5 When receiving an SCTP packet, the endpoint MUST ensure
* that the value in the Verification Tag field of the
* received SCTP packet matches its own Tag. ...
*/
if (chunk->sctp_hdr->vtag != asoc->c.my_vtag)
return sctp_sf_pdiscard(ep, asoc, type, arg, commands);
return SCTP_DISPOSITION_CONSUME;
nomem:
return SCTP_DISPOSITION_NOMEM;
}
#endif /* 0 */
/*
/*
* The other end is violating protocol.
* The other end is violating protocol.
...
...
net/sctp/sm_statetable.c
View file @
b6d53725
...
@@ -49,7 +49,7 @@
...
@@ -49,7 +49,7 @@
#include <net/sctp/sctp.h>
#include <net/sctp/sctp.h>
#include <net/sctp/sm.h>
#include <net/sctp/sm.h>
static
sctp_sm_table_entry_t
bug
=
{
static
const
sctp_sm_table_entry_t
bug
=
{
.
fn
=
sctp_sf_bug
,
.
fn
=
sctp_sf_bug
,
.
name
=
"sctp_sf_bug"
.
name
=
"sctp_sf_bug"
};
};
...
@@ -64,7 +64,7 @@ static sctp_sm_table_entry_t bug = {
...
@@ -64,7 +64,7 @@ static sctp_sm_table_entry_t bug = {
} \
} \
return &_table[event_subtype._type][(int)state];
return &_table[event_subtype._type][(int)state];
sctp_sm_table_entry_t
*
sctp_sm_lookup_event
(
sctp_event_t
event_type
,
const
sctp_sm_table_entry_t
*
sctp_sm_lookup_event
(
sctp_event_t
event_type
,
sctp_state_t
state
,
sctp_state_t
state
,
sctp_subtype_t
event_subtype
)
sctp_subtype_t
event_subtype
)
{
{
...
@@ -418,7 +418,7 @@ sctp_sm_table_entry_t *sctp_sm_lookup_event(sctp_event_t event_type,
...
@@ -418,7 +418,7 @@ sctp_sm_table_entry_t *sctp_sm_lookup_event(sctp_event_t event_type,
*
*
* For base protocol (RFC 2960).
* For base protocol (RFC 2960).
*/
*/
sctp_sm_table_entry_t
chunk_event_table
[
SCTP_NUM_BASE_CHUNK_TYPES
][
SCTP_STATE_NUM_STATES
]
=
{
const
sctp_sm_table_entry_t
chunk_event_table
[
SCTP_NUM_BASE_CHUNK_TYPES
][
SCTP_STATE_NUM_STATES
]
=
{
TYPE_SCTP_DATA
,
TYPE_SCTP_DATA
,
TYPE_SCTP_INIT
,
TYPE_SCTP_INIT
,
TYPE_SCTP_INIT_ACK
,
TYPE_SCTP_INIT_ACK
,
...
@@ -437,7 +437,7 @@ sctp_sm_table_entry_t chunk_event_table[SCTP_NUM_BASE_CHUNK_TYPES][SCTP_STATE_NU
...
@@ -437,7 +437,7 @@ sctp_sm_table_entry_t chunk_event_table[SCTP_NUM_BASE_CHUNK_TYPES][SCTP_STATE_NU
};
/* state_fn_t chunk_event_table[][] */
};
/* state_fn_t chunk_event_table[][] */
static
sctp_sm_table_entry_t
static
const
sctp_sm_table_entry_t
chunk_event_table_unknown
[
SCTP_STATE_NUM_STATES
]
=
{
chunk_event_table_unknown
[
SCTP_STATE_NUM_STATES
]
=
{
/* SCTP_STATE_EMPTY */
/* SCTP_STATE_EMPTY */
{.
fn
=
sctp_sf_ootb
,
.
name
=
"sctp_sf_ootb"
},
{.
fn
=
sctp_sf_ootb
,
.
name
=
"sctp_sf_ootb"
},
...
@@ -586,7 +586,7 @@ chunk_event_table_unknown[SCTP_STATE_NUM_STATES] = {
...
@@ -586,7 +586,7 @@ chunk_event_table_unknown[SCTP_STATE_NUM_STATES] = {
/* The primary index for this table is the primitive type.
/* The primary index for this table is the primitive type.
* The secondary index for this table is the state.
* The secondary index for this table is the state.
*/
*/
sctp_sm_table_entry_t
primitive_event_table
[
SCTP_NUM_PRIMITIVE_TYPES
][
SCTP_STATE_NUM_STATES
]
=
{
const
sctp_sm_table_entry_t
primitive_event_table
[
SCTP_NUM_PRIMITIVE_TYPES
][
SCTP_STATE_NUM_STATES
]
=
{
TYPE_SCTP_PRIMITIVE_ASSOCIATE
,
TYPE_SCTP_PRIMITIVE_ASSOCIATE
,
TYPE_SCTP_PRIMITIVE_SHUTDOWN
,
TYPE_SCTP_PRIMITIVE_SHUTDOWN
,
TYPE_SCTP_PRIMITIVE_ABORT
,
TYPE_SCTP_PRIMITIVE_ABORT
,
...
@@ -617,7 +617,7 @@ sctp_sm_table_entry_t primitive_event_table[SCTP_NUM_PRIMITIVE_TYPES][SCTP_STATE
...
@@ -617,7 +617,7 @@ sctp_sm_table_entry_t primitive_event_table[SCTP_NUM_PRIMITIVE_TYPES][SCTP_STATE
{.fn = sctp_sf_ignore_other, .name = "sctp_sf_ignore_other"}, \
{.fn = sctp_sf_ignore_other, .name = "sctp_sf_ignore_other"}, \
}
}
sctp_sm_table_entry_t
other_event_table
[
SCTP_NUM_OTHER_TYPES
][
SCTP_STATE_NUM_STATES
]
=
{
const
sctp_sm_table_entry_t
other_event_table
[
SCTP_NUM_OTHER_TYPES
][
SCTP_STATE_NUM_STATES
]
=
{
TYPE_SCTP_OTHER_NO_PENDING_TSN
,
TYPE_SCTP_OTHER_NO_PENDING_TSN
,
};
};
...
@@ -811,7 +811,7 @@ sctp_sm_table_entry_t other_event_table[SCTP_NUM_OTHER_TYPES][SCTP_STATE_NUM_STA
...
@@ -811,7 +811,7 @@ sctp_sm_table_entry_t other_event_table[SCTP_NUM_OTHER_TYPES][SCTP_STATE_NUM_STA
{.fn = sctp_sf_timer_ignore, .name = "sctp_sf_timer_ignore"}, \
{.fn = sctp_sf_timer_ignore, .name = "sctp_sf_timer_ignore"}, \
}
}
sctp_sm_table_entry_t
timeout_event_table
[
SCTP_NUM_TIMEOUT_TYPES
][
SCTP_STATE_NUM_STATES
]
=
{
const
sctp_sm_table_entry_t
timeout_event_table
[
SCTP_NUM_TIMEOUT_TYPES
][
SCTP_STATE_NUM_STATES
]
=
{
TYPE_SCTP_EVENT_TIMEOUT_NONE
,
TYPE_SCTP_EVENT_TIMEOUT_NONE
,
TYPE_SCTP_EVENT_TIMEOUT_T1_COOKIE
,
TYPE_SCTP_EVENT_TIMEOUT_T1_COOKIE
,
TYPE_SCTP_EVENT_TIMEOUT_T1_INIT
,
TYPE_SCTP_EVENT_TIMEOUT_T1_INIT
,
...
@@ -823,7 +823,8 @@ sctp_sm_table_entry_t timeout_event_table[SCTP_NUM_TIMEOUT_TYPES][SCTP_STATE_NUM
...
@@ -823,7 +823,8 @@ sctp_sm_table_entry_t timeout_event_table[SCTP_NUM_TIMEOUT_TYPES][SCTP_STATE_NUM
TYPE_SCTP_EVENT_TIMEOUT_AUTOCLOSE
,
TYPE_SCTP_EVENT_TIMEOUT_AUTOCLOSE
,
};
};
sctp_sm_table_entry_t
*
sctp_chunk_event_lookup
(
sctp_cid_t
cid
,
sctp_state_t
state
)
const
sctp_sm_table_entry_t
*
sctp_chunk_event_lookup
(
sctp_cid_t
cid
,
sctp_state_t
state
)
{
{
if
(
state
>
SCTP_STATE_MAX
)
if
(
state
>
SCTP_STATE_MAX
)
return
&
bug
;
return
&
bug
;
...
...
net/sctp/socket.c
View file @
b6d53725
...
@@ -2724,7 +2724,7 @@ static int sctp_getsockopt_local_addrs(struct sock *sk, int len,
...
@@ -2724,7 +2724,7 @@ static int sctp_getsockopt_local_addrs(struct sock *sk, int len,
struct
list_head
*
pos
;
struct
list_head
*
pos
;
int
cnt
=
0
;
int
cnt
=
0
;
struct
sctp_getaddrs
getaddrs
;
struct
sctp_getaddrs
getaddrs
;
struct
s
ockaddr_storage_list
*
from
;
struct
s
ctp_sockaddr_entry
*
from
;
struct
sockaddr_storage
*
to
;
struct
sockaddr_storage
*
to
;
if
(
len
!=
sizeof
(
struct
sctp_getaddrs
))
if
(
len
!=
sizeof
(
struct
sctp_getaddrs
))
...
@@ -2752,7 +2752,7 @@ static int sctp_getsockopt_local_addrs(struct sock *sk, int len,
...
@@ -2752,7 +2752,7 @@ static int sctp_getsockopt_local_addrs(struct sock *sk, int len,
to
=
getaddrs
.
addrs
;
to
=
getaddrs
.
addrs
;
list_for_each
(
pos
,
&
bp
->
address_list
)
{
list_for_each
(
pos
,
&
bp
->
address_list
)
{
from
=
list_entry
(
pos
,
from
=
list_entry
(
pos
,
struct
s
ockaddr_storage_list
,
struct
s
ctp_sockaddr_entry
,
list
);
list
);
if
(
copy_to_user
(
to
,
&
from
->
a
,
sizeof
(
from
->
a
)))
if
(
copy_to_user
(
to
,
&
from
->
a
,
sizeof
(
from
->
a
)))
return
-
EFAULT
;
return
-
EFAULT
;
...
...
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