diff options
Diffstat (limited to 'net/sctp/sm_sideeffect.c')
| -rw-r--r-- | net/sctp/sm_sideeffect.c | 154 | 
1 files changed, 77 insertions, 77 deletions
diff --git a/net/sctp/sm_sideeffect.c b/net/sctp/sm_sideeffect.c index d6e5e9e0fd6d..e6a2974e020e 100644 --- a/net/sctp/sm_sideeffect.c +++ b/net/sctp/sm_sideeffect.c @@ -51,22 +51,23 @@  #include <net/sctp/sctp.h>  #include <net/sctp/sm.h> -static int sctp_cmd_interpreter(sctp_event_t event_type, -				sctp_subtype_t subtype, -				sctp_state_t state, +static int sctp_cmd_interpreter(enum sctp_event event_type, +				union sctp_subtype subtype, +				enum sctp_state state,  				struct sctp_endpoint *ep,  				struct sctp_association *asoc,  				void *event_arg, -				sctp_disposition_t status, -				sctp_cmd_seq_t *commands, +				enum sctp_disposition status, +				struct sctp_cmd_seq *commands,  				gfp_t gfp); -static int sctp_side_effects(sctp_event_t event_type, sctp_subtype_t subtype, -			     sctp_state_t state, +static int sctp_side_effects(enum sctp_event event_type, +			     union sctp_subtype subtype, +			     enum sctp_state state,  			     struct sctp_endpoint *ep,  			     struct sctp_association **asoc,  			     void *event_arg, -			     sctp_disposition_t status, -			     sctp_cmd_seq_t *commands, +			     enum sctp_disposition status, +			     struct sctp_cmd_seq *commands,  			     gfp_t gfp);  /******************************************************************** @@ -96,8 +97,8 @@ static void sctp_do_ecn_ce_work(struct sctp_association *asoc,   * that was originally marked with the CE bit.   */  static struct sctp_chunk *sctp_do_ecn_ecne_work(struct sctp_association *asoc, -					   __u32 lowest_tsn, -					   struct sctp_chunk *chunk) +						__u32 lowest_tsn, +						struct sctp_chunk *chunk)  {  	struct sctp_chunk *repl; @@ -149,11 +150,11 @@ static void sctp_do_ecn_cwr_work(struct sctp_association *asoc,  /* Generate SACK if necessary.  We call this at the end of a packet.  */  static int sctp_gen_sack(struct sctp_association *asoc, int force, -			 sctp_cmd_seq_t *commands) +			 struct sctp_cmd_seq *commands)  { +	struct sctp_transport *trans = asoc->peer.last_data_from;  	__u32 ctsn, max_tsn_seen;  	struct sctp_chunk *sack; -	struct sctp_transport *trans = asoc->peer.last_data_from;  	int error = 0;  	if (force || @@ -243,11 +244,11 @@ nomem:   */  void sctp_generate_t3_rtx_event(unsigned long peer)  { -	int error;  	struct sctp_transport *transport = (struct sctp_transport *) peer;  	struct sctp_association *asoc = transport->asoc;  	struct sock *sk = asoc->base.sk;  	struct net *net = sock_net(sk); +	int error;  	/* Check whether a task is in the sock.  */ @@ -280,7 +281,7 @@ out_unlock:   * for timeouts which use the association as their parameter.   */  static void sctp_generate_timeout_event(struct sctp_association *asoc, -					sctp_event_timeout_t timeout_type) +					enum sctp_event_timeout timeout_type)  {  	struct sock *sk = asoc->base.sk;  	struct net *net = sock_net(sk); @@ -360,12 +361,12 @@ static void sctp_generate_autoclose_event(unsigned long data)   */  void sctp_generate_heartbeat_event(unsigned long data)  { -	int error = 0;  	struct sctp_transport *transport = (struct sctp_transport *) data;  	struct sctp_association *asoc = transport->asoc;  	struct sock *sk = asoc->base.sk;  	struct net *net = sock_net(sk);  	u32 elapsed, timeout; +	int error = 0;  	bh_lock_sock(sk);  	if (sock_owned_by_user(sk)) { @@ -405,7 +406,7 @@ out_unlock:   */  void sctp_generate_proto_unreach_event(unsigned long data)  { -	struct sctp_transport *transport = (struct sctp_transport *) data; +	struct sctp_transport *transport = (struct sctp_transport *)data;  	struct sctp_association *asoc = transport->asoc;  	struct sock *sk = asoc->base.sk;  	struct net *net = sock_net(sk); @@ -471,7 +472,7 @@ out_unlock:  /* Inject a SACK Timeout event into the state machine.  */  static void sctp_generate_sack_event(unsigned long data)  { -	struct sctp_association *asoc = (struct sctp_association *) data; +	struct sctp_association *asoc = (struct sctp_association *)data;  	sctp_generate_timeout_event(asoc, SCTP_EVENT_TIMEOUT_SACK);  } @@ -505,7 +506,7 @@ sctp_timer_event_t *sctp_timer_events[SCTP_NUM_TIMEOUT_TYPES] = {   * notification SHOULD be sent to the upper layer.   *   */ -static void sctp_do_8_2_transport_strike(sctp_cmd_seq_t *commands, +static void sctp_do_8_2_transport_strike(struct sctp_cmd_seq *commands,  					 struct sctp_association *asoc,  					 struct sctp_transport *transport,  					 int is_hb) @@ -577,7 +578,7 @@ static void sctp_do_8_2_transport_strike(sctp_cmd_seq_t *commands,  }  /* Worker routine to handle INIT command failure.  */ -static void sctp_cmd_init_failed(sctp_cmd_seq_t *commands, +static void sctp_cmd_init_failed(struct sctp_cmd_seq *commands,  				 struct sctp_association *asoc,  				 unsigned int error)  { @@ -600,15 +601,16 @@ static void sctp_cmd_init_failed(sctp_cmd_seq_t *commands,  }  /* Worker routine to handle SCTP_CMD_ASSOC_FAILED.  */ -static void sctp_cmd_assoc_failed(sctp_cmd_seq_t *commands, +static void sctp_cmd_assoc_failed(struct sctp_cmd_seq *commands,  				  struct sctp_association *asoc, -				  sctp_event_t event_type, -				  sctp_subtype_t subtype, +				  enum sctp_event event_type, +				  union sctp_subtype subtype,  				  struct sctp_chunk *chunk,  				  unsigned int error)  {  	struct sctp_ulpevent *event;  	struct sctp_chunk *abort; +  	/* Cancel any partial delivery in progress. */  	sctp_ulpq_abort_pd(&asoc->ulpq, GFP_ATOMIC); @@ -644,7 +646,7 @@ static void sctp_cmd_assoc_failed(sctp_cmd_seq_t *commands,   * since all other cases use "temporary" associations and can do all   * their work in statefuns directly.   */ -static int sctp_cmd_process_init(sctp_cmd_seq_t *commands, +static int sctp_cmd_process_init(struct sctp_cmd_seq *commands,  				 struct sctp_association *asoc,  				 struct sctp_chunk *chunk,  				 struct sctp_init_chunk *peer_init, @@ -666,7 +668,7 @@ static int sctp_cmd_process_init(sctp_cmd_seq_t *commands,  }  /* Helper function to break out starting up of heartbeat timers.  */ -static void sctp_cmd_hb_timers_start(sctp_cmd_seq_t *cmds, +static void sctp_cmd_hb_timers_start(struct sctp_cmd_seq *cmds,  				     struct sctp_association *asoc)  {  	struct sctp_transport *t; @@ -679,7 +681,7 @@ static void sctp_cmd_hb_timers_start(sctp_cmd_seq_t *cmds,  		sctp_transport_reset_hb_timer(t);  } -static void sctp_cmd_hb_timers_stop(sctp_cmd_seq_t *cmds, +static void sctp_cmd_hb_timers_stop(struct sctp_cmd_seq *cmds,  				    struct sctp_association *asoc)  {  	struct sctp_transport *t; @@ -694,7 +696,7 @@ static void sctp_cmd_hb_timers_stop(sctp_cmd_seq_t *cmds,  }  /* Helper function to stop any pending T3-RTX timers */ -static void sctp_cmd_t3_rtx_timers_stop(sctp_cmd_seq_t *cmds, +static void sctp_cmd_t3_rtx_timers_stop(struct sctp_cmd_seq *cmds,  					struct sctp_association *asoc)  {  	struct sctp_transport *t; @@ -708,12 +710,12 @@ static void sctp_cmd_t3_rtx_timers_stop(sctp_cmd_seq_t *cmds,  /* Helper function to handle the reception of an HEARTBEAT ACK.  */ -static void sctp_cmd_transport_on(sctp_cmd_seq_t *cmds, +static void sctp_cmd_transport_on(struct sctp_cmd_seq *cmds,  				  struct sctp_association *asoc,  				  struct sctp_transport *t,  				  struct sctp_chunk *chunk)  { -	sctp_sender_hb_info_t *hbinfo; +	struct sctp_sender_hb_info *hbinfo;  	int was_unconfirmed = 0;  	/* 8.3 Upon the receipt of the HEARTBEAT ACK, the sender of the @@ -767,7 +769,7 @@ static void sctp_cmd_transport_on(sctp_cmd_seq_t *cmds,  	if (t->rto_pending == 0)  		t->rto_pending = 1; -	hbinfo = (sctp_sender_hb_info_t *) chunk->skb->data; +	hbinfo = (struct sctp_sender_hb_info *)chunk->skb->data;  	sctp_transport_update_rto(t, (jiffies - hbinfo->sent_at));  	/* Update the heartbeat timer.  */ @@ -779,7 +781,7 @@ static void sctp_cmd_transport_on(sctp_cmd_seq_t *cmds,  /* Helper function to process the process SACK command.  */ -static int sctp_cmd_process_sack(sctp_cmd_seq_t *cmds, +static int sctp_cmd_process_sack(struct sctp_cmd_seq *cmds,  				 struct sctp_association *asoc,  				 struct sctp_chunk *chunk)  { @@ -801,7 +803,7 @@ static int sctp_cmd_process_sack(sctp_cmd_seq_t *cmds,  /* Helper function to set the timeout value for T2-SHUTDOWN timer and to set   * the transport for a shutdown chunk.   */ -static void sctp_cmd_setup_t2(sctp_cmd_seq_t *cmds, +static void sctp_cmd_setup_t2(struct sctp_cmd_seq *cmds,  			      struct sctp_association *asoc,  			      struct sctp_chunk *chunk)  { @@ -818,7 +820,7 @@ static void sctp_cmd_setup_t2(sctp_cmd_seq_t *cmds,  	asoc->timeouts[SCTP_EVENT_TIMEOUT_T2_SHUTDOWN] = t->rto;  } -static void sctp_cmd_assoc_update(sctp_cmd_seq_t *cmds, +static void sctp_cmd_assoc_update(struct sctp_cmd_seq *cmds,  				  struct sctp_association *asoc,  				  struct sctp_association *new)  { @@ -828,7 +830,7 @@ static void sctp_cmd_assoc_update(sctp_cmd_seq_t *cmds,  	if (!sctp_assoc_update(asoc, new))  		return; -	abort = sctp_make_abort(asoc, NULL, sizeof(sctp_errhdr_t)); +	abort = sctp_make_abort(asoc, NULL, sizeof(struct sctp_errhdr));  	if (abort) {  		sctp_init_cause(abort, SCTP_ERROR_RSRC_LOW, 0);  		sctp_add_cmd_sf(cmds, SCTP_CMD_REPLY, SCTP_CHUNK(abort)); @@ -841,9 +843,9 @@ static void sctp_cmd_assoc_update(sctp_cmd_seq_t *cmds,  }  /* Helper function to change the state of an association. */ -static void sctp_cmd_new_state(sctp_cmd_seq_t *cmds, +static void sctp_cmd_new_state(struct sctp_cmd_seq *cmds,  			       struct sctp_association *asoc, -			       sctp_state_t state) +			       enum sctp_state state)  {  	struct sock *sk = asoc->base.sk; @@ -901,7 +903,7 @@ static void sctp_cmd_new_state(sctp_cmd_seq_t *cmds,  }  /* Helper function to delete an association. */ -static void sctp_cmd_delete_tcb(sctp_cmd_seq_t *cmds, +static void sctp_cmd_delete_tcb(struct sctp_cmd_seq *cmds,  				struct sctp_association *asoc)  {  	struct sock *sk = asoc->base.sk; @@ -923,9 +925,9 @@ static void sctp_cmd_delete_tcb(sctp_cmd_seq_t *cmds,   * destination address (we use active path instead of primary path just   * because primary path may be inactive.   */ -static void sctp_cmd_setup_t4(sctp_cmd_seq_t *cmds, -				struct sctp_association *asoc, -				struct sctp_chunk *chunk) +static void sctp_cmd_setup_t4(struct sctp_cmd_seq *cmds, +			      struct sctp_association *asoc, +			      struct sctp_chunk *chunk)  {  	struct sctp_transport *t; @@ -935,7 +937,7 @@ static void sctp_cmd_setup_t4(sctp_cmd_seq_t *cmds,  }  /* Process an incoming Operation Error Chunk. */ -static void sctp_cmd_process_operr(sctp_cmd_seq_t *cmds, +static void sctp_cmd_process_operr(struct sctp_cmd_seq *cmds,  				   struct sctp_association *asoc,  				   struct sctp_chunk *chunk)  { @@ -990,6 +992,7 @@ static void sctp_cmd_process_fwdtsn(struct sctp_ulpq *ulpq,  				    struct sctp_chunk *chunk)  {  	struct sctp_fwdtsn_skip *skip; +  	/* Walk through all the skipped SSNs */  	sctp_walk_fwdtsn(skip, chunk) {  		sctp_ulpq_skip(ulpq, ntohs(skip->stream), ntohs(skip->ssn)); @@ -1002,8 +1005,8 @@ static void sctp_cmd_process_fwdtsn(struct sctp_ulpq *ulpq,  static void sctp_cmd_del_non_primary(struct sctp_association *asoc)  {  	struct sctp_transport *t; -	struct list_head *pos;  	struct list_head *temp; +	struct list_head *pos;  	list_for_each_safe(pos, temp, &asoc->peer.transport_addr_list) {  		t = list_entry(pos, struct sctp_transport, transports); @@ -1024,9 +1027,9 @@ static void sctp_cmd_set_sk_err(struct sctp_association *asoc, int error)  }  /* Helper function to generate an association change event */ -static void sctp_cmd_assoc_change(sctp_cmd_seq_t *commands, -				 struct sctp_association *asoc, -				 u8 state) +static void sctp_cmd_assoc_change(struct sctp_cmd_seq *commands, +				  struct sctp_association *asoc, +				  u8 state)  {  	struct sctp_ulpevent *ev; @@ -1039,7 +1042,7 @@ static void sctp_cmd_assoc_change(sctp_cmd_seq_t *commands,  }  /* Helper function to generate an adaptation indication event */ -static void sctp_cmd_adaptation_ind(sctp_cmd_seq_t *commands, +static void sctp_cmd_adaptation_ind(struct sctp_cmd_seq *commands,  				    struct sctp_association *asoc)  {  	struct sctp_ulpevent *ev; @@ -1052,8 +1055,8 @@ static void sctp_cmd_adaptation_ind(sctp_cmd_seq_t *commands,  static void sctp_cmd_t1_timer_update(struct sctp_association *asoc, -				    sctp_event_timeout_t timer, -				    char *name) +				     enum sctp_event_timeout timer, +				     char *name)  {  	struct sctp_transport *t; @@ -1139,22 +1142,20 @@ static void sctp_cmd_send_asconf(struct sctp_association *asoc)   * If you want to understand all of lksctp, this is a   * good place to start.   */ -int sctp_do_sm(struct net *net, sctp_event_t event_type, sctp_subtype_t subtype, -	       sctp_state_t state, -	       struct sctp_endpoint *ep, -	       struct sctp_association *asoc, -	       void *event_arg, -	       gfp_t gfp) +int sctp_do_sm(struct net *net, enum sctp_event event_type, +	       union sctp_subtype subtype, enum sctp_state state, +	       struct sctp_endpoint *ep, struct sctp_association *asoc, +	       void *event_arg, gfp_t gfp)  { -	sctp_cmd_seq_t commands; -	const sctp_sm_table_entry_t *state_fn; -	sctp_disposition_t status; -	int error = 0; -	typedef const char *(printfn_t)(sctp_subtype_t); +	typedef const char *(printfn_t)(union sctp_subtype);  	static printfn_t *table[] = {  		NULL, sctp_cname, sctp_tname, sctp_oname, sctp_pname,  	};  	printfn_t *debug_fn  __attribute__ ((unused)) = table[event_type]; +	const struct sctp_sm_table_entry *state_fn; +	struct sctp_cmd_seq commands; +	enum sctp_disposition status; +	int error = 0;  	/* Look up the state function, run it, and then process the  	 * side effects.  These three steps are the heart of lksctp. @@ -1178,13 +1179,14 @@ int sctp_do_sm(struct net *net, sctp_event_t event_type, sctp_subtype_t subtype,  /*****************************************************************   * This the master state function side effect processing function.   *****************************************************************/ -static int sctp_side_effects(sctp_event_t event_type, sctp_subtype_t subtype, -			     sctp_state_t state, +static int sctp_side_effects(enum sctp_event event_type, +			     union sctp_subtype subtype, +			     enum sctp_state state,  			     struct sctp_endpoint *ep,  			     struct sctp_association **asoc,  			     void *event_arg, -			     sctp_disposition_t status, -			     sctp_cmd_seq_t *commands, +			     enum sctp_disposition status, +			     struct sctp_cmd_seq *commands,  			     gfp_t gfp)  {  	int error; @@ -1263,29 +1265,27 @@ bail:   ********************************************************************/  /* This is the side-effect interpreter.  */ -static int sctp_cmd_interpreter(sctp_event_t event_type, -				sctp_subtype_t subtype, -				sctp_state_t state, +static int sctp_cmd_interpreter(enum sctp_event event_type, +				union sctp_subtype subtype, +				enum sctp_state state,  				struct sctp_endpoint *ep,  				struct sctp_association *asoc,  				void *event_arg, -				sctp_disposition_t status, -				sctp_cmd_seq_t *commands, +				enum sctp_disposition status, +				struct sctp_cmd_seq *commands,  				gfp_t gfp)  { -	struct sock *sk = ep->base.sk; -	struct sctp_sock *sp = sctp_sk(sk); -	int error = 0; -	int force; -	sctp_cmd_t *cmd; -	struct sctp_chunk *new_obj; -	struct sctp_chunk *chunk = NULL; +	struct sctp_sock *sp = sctp_sk(ep->base.sk); +	struct sctp_chunk *chunk = NULL, *new_obj;  	struct sctp_packet *packet; +	struct sctp_sackhdr sackh;  	struct timer_list *timer; -	unsigned long timeout;  	struct sctp_transport *t; -	struct sctp_sackhdr sackh; +	unsigned long timeout; +	struct sctp_cmd *cmd;  	int local_cork = 0; +	int error = 0; +	int force;  	if (SCTP_EVENT_T_TIMEOUT != event_type)  		chunk = event_arg;  | 
