diff options
| author | Jon Grimm <jgrimm@jgrimm.austin.ibm.com> | 2002-09-25 03:29:50 -0500 |
|---|---|---|
| committer | Jon Grimm <jgrimm@jgrimm.austin.ibm.com> | 2002-09-25 03:29:50 -0500 |
| commit | 372f525b495c56405463397fa09ee3019afc9543 (patch) | |
| tree | 2da99359b04050f8cfa2511441f819ae5f93504f /include/net | |
| parent | cc8f2609f42024dac36ef1986d45924397295f46 (diff) | |
SCTP: Resync with LKSCTP tree.
sctp: one more list_t removal.
sctp: more whitespace cleanup (jgrimm)
sctp: merge with linux bk tree
sctp: Minor ABORT updates (ardelle.fan)
sctp: Fix misc. COOKIE-ECHO bundling bugs. (jgrimm)
There were small windows where the following could occur.
-Two DATA chunks bundled with COOKIE-ECHO (only 1 allowed.)
-DATA bundled with lost COOKIE-ECHO needs resent too.
-DATA sent while in COOKIE-ECHOED if there had not been control data already bundled.
sctp: more updates for abort (jgrimm and ardelle.fan)
Cleanup T5 upon abort. Send COMM_LOST notification to ULP upon abort.
sctp: updates to T5 shutdown timer. (samudrala)
I missed a couple changes from Sridhar's last patch.
sctp: more ABORT, cleanup shutdown timers (ardelle.fan)
When we send or receive an ABORT, there may be a variety of timers running.
Turn these timers off when we abort.
sctp: Fix bug in COOKIE-ECHO retransmission. (jgrimm)
We had saved away the pointer directly to the INIT-ACK state cookie param, but upon COOKIE ECHO retransmission, this skb has already been thrown away. The fix is to save away the cookie.
sctp: Unknown chunk processing. (daisyc)
Each chunkheader contains the chunk type.
For forward compatiblity, 'action' bits in the type describe what action
the peer requests if one does not understand that chunk type. This patch is to
implement the handling of those 'unrecognized chunk' actions.
sctp: Add T5 shutdown guard handling. (samudrala)
The T5-shutdown-guard timer is used to bound the time we are willing to try gracefully shutting down. This protects against certain pathological peers.
sctp: Add msg_name support for notifications and PF_INET sockets. (jgrimm)
Diffstat (limited to 'include/net')
| -rw-r--r-- | include/net/sctp/constants.h | 1 | ||||
| -rw-r--r-- | include/net/sctp/sctp.h | 3 | ||||
| -rw-r--r-- | include/net/sctp/sm.h | 8 | ||||
| -rw-r--r-- | include/net/sctp/structs.h | 15 |
4 files changed, 25 insertions, 2 deletions
diff --git a/include/net/sctp/constants.h b/include/net/sctp/constants.h index f187be387f1c..90a7ba3cb29f 100644 --- a/include/net/sctp/constants.h +++ b/include/net/sctp/constants.h @@ -112,6 +112,7 @@ typedef enum { SCTP_EVENT_TIMEOUT_T2_SHUTDOWN, SCTP_EVENT_TIMEOUT_T3_RTX, SCTP_EVENT_TIMEOUT_T4_RTO, + SCTP_EVENT_TIMEOUT_T5_SHUTDOWN_GUARD, SCTP_EVENT_TIMEOUT_HEARTBEAT, SCTP_EVENT_TIMEOUT_SACK, SCTP_EVENT_TIMEOUT_AUTOCLOSE, diff --git a/include/net/sctp/sctp.h b/include/net/sctp/sctp.h index 2c7b3c0b6534..d45cdd15f939 100644 --- a/include/net/sctp/sctp.h +++ b/include/net/sctp/sctp.h @@ -114,7 +114,8 @@ extern sctp_protocol_t sctp_proto; extern struct sock *sctp_get_ctl_sock(void); extern int sctp_copy_local_addr_list(sctp_protocol_t *, sctp_bind_addr_t *, sctp_scope_t, int priority, int flags); - +extern sctp_pf_t *sctp_get_pf_specific(int family); +extern void sctp_set_pf_specific(int family, sctp_pf_t *); /* * sctp_socket.c diff --git a/include/net/sctp/sm.h b/include/net/sctp/sm.h index 27c055ecc5c4..5cb4858fac34 100644 --- a/include/net/sctp/sm.h +++ b/include/net/sctp/sm.h @@ -107,6 +107,9 @@ sctp_state_fn_t sctp_sf_timer_ignore; sctp_state_fn_t sctp_sf_do_9_1_abort; sctp_state_fn_t sctp_sf_cookie_wait_abort; sctp_state_fn_t sctp_sf_cookie_echoed_abort; +sctp_state_fn_t sctp_sf_shutdown_pending_abort; +sctp_state_fn_t sctp_sf_shutdown_sent_abort; +sctp_state_fn_t sctp_sf_shutdown_ack_sent_abort; sctp_state_fn_t sctp_sf_do_5_1B_init; sctp_state_fn_t sctp_sf_do_5_1C_ack; sctp_state_fn_t sctp_sf_do_5_1D_ce; @@ -119,6 +122,7 @@ sctp_state_fn_t sctp_sf_tabort_8_4_8; sctp_state_fn_t sctp_sf_operr_notify; sctp_state_fn_t sctp_sf_t1_timer_expire; sctp_state_fn_t sctp_sf_t2_timer_expire; +sctp_state_fn_t sctp_sf_t5_timer_expire; sctp_state_fn_t sctp_sf_sendbeat_8_3; sctp_state_fn_t sctp_sf_beat_8_3; sctp_state_fn_t sctp_sf_backbeat_8_3; @@ -134,6 +138,7 @@ sctp_state_fn_t sctp_sf_discard_chunk; sctp_state_fn_t sctp_sf_do_5_2_1_siminit; sctp_state_fn_t sctp_sf_do_5_2_2_dupinit; sctp_state_fn_t sctp_sf_do_5_2_4_dupcook; +sctp_state_fn_t sctp_sf_unk_chunk; /* Prototypes for primitive event state functions. */ sctp_state_fn_t sctp_sf_do_prm_asoc; @@ -144,6 +149,9 @@ sctp_state_fn_t sctp_sf_cookie_echoed_prm_shutdown; sctp_state_fn_t sctp_sf_do_9_1_prm_abort; sctp_state_fn_t sctp_sf_cookie_wait_prm_abort; sctp_state_fn_t sctp_sf_cookie_echoed_prm_abort; +sctp_state_fn_t sctp_sf_shutdown_pending_prm_abort; +sctp_state_fn_t sctp_sf_shutdown_sent_prm_abort; +sctp_state_fn_t sctp_sf_shutdown_ack_sent_prm_abort; sctp_state_fn_t sctp_sf_error_closed; sctp_state_fn_t sctp_sf_error_shutdown; sctp_state_fn_t sctp_sf_ignore_primitive; diff --git a/include/net/sctp/structs.h b/include/net/sctp/structs.h index 4f600a419d08..69f99bba1d9b 100644 --- a/include/net/sctp/structs.h +++ b/include/net/sctp/structs.h @@ -255,6 +255,12 @@ typedef struct sctp_func { sctp_func_t *sctp_get_af_specific(const sockaddr_storage_t *address); +/* Protocol family functions. */ +typedef struct sctp_pf { + void (*event_msgname)(sctp_ulpevent_t *, char *, int *); + void (*skb_msgname)(struct sk_buff *, char *, int *); +} sctp_pf_t; + /* SCTP Socket type: UDP or TCP style. */ typedef enum { SCTP_SOCKET_UDP = 0, @@ -280,6 +286,7 @@ struct sctp_opt { __u32 autoclose; __u8 nodelay; __u8 disable_fragments; + sctp_pf_t *pf; }; @@ -845,6 +852,7 @@ int sctp_outqueue_set_output_handlers(sctp_outqueue_t *, sctp_outqueue_ohandler_force_t force); void sctp_outqueue_restart(sctp_outqueue_t *); void sctp_retransmit(sctp_outqueue_t *, sctp_transport_t *, __u8); +void sctp_retransmit_mark(sctp_outqueue_t *, sctp_transport_t *, __u8); /* These bind address data fields common between endpoints and associations */ @@ -1128,6 +1136,11 @@ struct SCTP_association { */ sctp_transport_t *primary_path; + /* Cache the primary path address here, when we + * need a an address for msg_name. + */ + sockaddr_storage_t primary_addr; + /* active_path * The path that we are currently using to * transmit new data and most control chunks. @@ -1183,7 +1196,7 @@ struct SCTP_association { int next_dup_tsn; /* Do we need to sack the peer? */ - int sack_needed; + uint8_t sack_needed; /* These are capabilities which our peer advertised. */ __u8 ecn_capable; /* Can peer do ECN? */ |
