diff options
| -rw-r--r-- | net/dccp/ccids/ccid3.c | 57 | ||||
| -rw-r--r-- | net/dccp/ccids/ccid3.h | 3 | 
2 files changed, 14 insertions, 46 deletions
diff --git a/net/dccp/ccids/ccid3.c b/net/dccp/ccids/ccid3.c index b2ddd205d438..ce8059130070 100644 --- a/net/dccp/ccids/ccid3.c +++ b/net/dccp/ccids/ccid3.c @@ -485,60 +485,31 @@ static int ccid3_hc_tx_parse_options(struct sock *sk, unsigned char option,  				     unsigned char len, u16 idx,  				     unsigned char *value)  { -	int rc = 0; -	const struct dccp_sock *dp = dccp_sk(sk);  	struct ccid3_hc_tx_sock *hc = ccid3_hc_tx_sk(sk);  	struct ccid3_options_received *opt_recv = &hc->tx_options_received;  	__be32 opt_val; -	if (opt_recv->ccid3or_seqno != dp->dccps_gsr) { -		opt_recv->ccid3or_seqno		     = dp->dccps_gsr; -		opt_recv->ccid3or_loss_event_rate    = ~0; -		opt_recv->ccid3or_loss_intervals_idx = 0; -		opt_recv->ccid3or_loss_intervals_len = 0; -		opt_recv->ccid3or_receive_rate	     = 0; -	} -  	switch (option) { +	case TFRC_OPT_RECEIVE_RATE:  	case TFRC_OPT_LOSS_EVENT_RATE:  		if (unlikely(len != 4)) { -			DCCP_WARN("%s(%p), invalid len %d " -				  "for TFRC_OPT_LOSS_EVENT_RATE\n", -				  dccp_role(sk), sk, len); -			rc = -EINVAL; -		} else { -			opt_val = get_unaligned((__be32 *)value); -			opt_recv->ccid3or_loss_event_rate = ntohl(opt_val); -			ccid3_pr_debug("%s(%p), LOSS_EVENT_RATE=%u\n", -				       dccp_role(sk), sk, -				       opt_recv->ccid3or_loss_event_rate); +			DCCP_WARN("%s(%p), invalid len %d for %u\n", +				  dccp_role(sk), sk, len, option); +			return -EINVAL;  		} -		break; -	case TFRC_OPT_LOSS_INTERVALS: -		opt_recv->ccid3or_loss_intervals_idx = idx; -		opt_recv->ccid3or_loss_intervals_len = len; -		ccid3_pr_debug("%s(%p), LOSS_INTERVALS=(%u, %u)\n", -			       dccp_role(sk), sk, -			       opt_recv->ccid3or_loss_intervals_idx, -			       opt_recv->ccid3or_loss_intervals_len); -		break; -	case TFRC_OPT_RECEIVE_RATE: -		if (unlikely(len != 4)) { -			DCCP_WARN("%s(%p), invalid len %d " -				  "for TFRC_OPT_RECEIVE_RATE\n", -				  dccp_role(sk), sk, len); -			rc = -EINVAL; -		} else { -			opt_val = get_unaligned((__be32 *)value); -			opt_recv->ccid3or_receive_rate = ntohl(opt_val); +		opt_val = ntohl(get_unaligned((__be32 *)value)); + +		if (option == TFRC_OPT_RECEIVE_RATE) { +			opt_recv->ccid3or_receive_rate = opt_val;  			ccid3_pr_debug("%s(%p), RECEIVE_RATE=%u\n", -				       dccp_role(sk), sk, -				       opt_recv->ccid3or_receive_rate); +				       dccp_role(sk), sk, opt_val); +		} else { +			opt_recv->ccid3or_loss_event_rate = opt_val; +			ccid3_pr_debug("%s(%p), LOSS_EVENT_RATE=%u\n", +				       dccp_role(sk), sk, opt_val);  		} -		break;  	} - -	return rc; +	return 0;  }  static int ccid3_hc_tx_init(struct ccid *ccid, struct sock *sk) diff --git a/net/dccp/ccids/ccid3.h b/net/dccp/ccids/ccid3.h index 4a00174a97dd..9eb90b863abd 100644 --- a/net/dccp/ccids/ccid3.h +++ b/net/dccp/ccids/ccid3.h @@ -68,9 +68,6 @@ enum ccid3_options {  };  struct ccid3_options_received { -	u64 ccid3or_seqno:48, -	    ccid3or_loss_intervals_idx:16; -	u16 ccid3or_loss_intervals_len;  	u32 ccid3or_loss_event_rate;  	u32 ccid3or_receive_rate;  };  | 
