diff options
| -rw-r--r-- | net/dccp/ccids/ccid3.c | 24 | ||||
| -rw-r--r-- | net/dccp/ccids/ccid3.h | 7 |
2 files changed, 8 insertions, 23 deletions
diff --git a/net/dccp/ccids/ccid3.c b/net/dccp/ccids/ccid3.c index 9715eebf1551..c3f3a25bbd7a 100644 --- a/net/dccp/ccids/ccid3.c +++ b/net/dccp/ccids/ccid3.c | |||
| @@ -365,11 +365,10 @@ static void ccid3_hc_tx_packet_sent(struct sock *sk, int more, | |||
| 365 | static void ccid3_hc_tx_packet_recv(struct sock *sk, struct sk_buff *skb) | 365 | static void ccid3_hc_tx_packet_recv(struct sock *sk, struct sk_buff *skb) |
| 366 | { | 366 | { |
| 367 | struct ccid3_hc_tx_sock *hc = ccid3_hc_tx_sk(sk); | 367 | struct ccid3_hc_tx_sock *hc = ccid3_hc_tx_sk(sk); |
| 368 | struct ccid3_options_received *opt_recv = &hc->tx_options_received; | ||
| 369 | struct tfrc_tx_hist_entry *acked; | 368 | struct tfrc_tx_hist_entry *acked; |
| 370 | ktime_t now; | 369 | ktime_t now; |
| 371 | unsigned long t_nfb; | 370 | unsigned long t_nfb; |
| 372 | u32 pinv, r_sample; | 371 | u32 r_sample; |
| 373 | 372 | ||
| 374 | /* we are only interested in ACKs */ | 373 | /* we are only interested in ACKs */ |
| 375 | if (!(DCCP_SKB_CB(skb)->dccpd_type == DCCP_PKT_ACK || | 374 | if (!(DCCP_SKB_CB(skb)->dccpd_type == DCCP_PKT_ACK || |
| @@ -394,17 +393,6 @@ static void ccid3_hc_tx_packet_recv(struct sock *sk, struct sk_buff *skb) | |||
| 394 | r_sample = dccp_sample_rtt(sk, ktime_us_delta(now, acked->stamp)); | 393 | r_sample = dccp_sample_rtt(sk, ktime_us_delta(now, acked->stamp)); |
| 395 | hc->tx_rtt = tfrc_ewma(hc->tx_rtt, r_sample, 9); | 394 | hc->tx_rtt = tfrc_ewma(hc->tx_rtt, r_sample, 9); |
| 396 | 395 | ||
| 397 | /* Update receive rate in units of 64 * bytes/second */ | ||
| 398 | hc->tx_x_recv = opt_recv->ccid3or_receive_rate; | ||
| 399 | hc->tx_x_recv <<= 6; | ||
| 400 | |||
| 401 | /* Update loss event rate (which is scaled by 1e6) */ | ||
| 402 | pinv = opt_recv->ccid3or_loss_event_rate; | ||
| 403 | if (pinv == 0) | ||
| 404 | hc->tx_p = 0; | ||
| 405 | else | ||
| 406 | hc->tx_p = tfrc_invert_loss_event_rate(pinv); | ||
| 407 | |||
| 408 | /* | 396 | /* |
| 409 | * Update allowed sending rate X as per draft rfc3448bis-00, 4.2/3 | 397 | * Update allowed sending rate X as per draft rfc3448bis-00, 4.2/3 |
| 410 | */ | 398 | */ |
| @@ -476,7 +464,6 @@ static int ccid3_hc_tx_parse_options(struct sock *sk, u8 packet_type, | |||
| 476 | u8 option, u8 *optval, u8 optlen) | 464 | u8 option, u8 *optval, u8 optlen) |
| 477 | { | 465 | { |
| 478 | struct ccid3_hc_tx_sock *hc = ccid3_hc_tx_sk(sk); | 466 | struct ccid3_hc_tx_sock *hc = ccid3_hc_tx_sk(sk); |
| 479 | struct ccid3_options_received *opt_recv = &hc->tx_options_received; | ||
| 480 | __be32 opt_val; | 467 | __be32 opt_val; |
| 481 | 468 | ||
| 482 | switch (option) { | 469 | switch (option) { |
| @@ -493,11 +480,16 @@ static int ccid3_hc_tx_parse_options(struct sock *sk, u8 packet_type, | |||
| 493 | opt_val = ntohl(get_unaligned((__be32 *)optval)); | 480 | opt_val = ntohl(get_unaligned((__be32 *)optval)); |
| 494 | 481 | ||
| 495 | if (option == TFRC_OPT_RECEIVE_RATE) { | 482 | if (option == TFRC_OPT_RECEIVE_RATE) { |
| 496 | opt_recv->ccid3or_receive_rate = opt_val; | 483 | /* Receive Rate is kept in units of 64 bytes/second */ |
| 484 | hc->tx_x_recv = opt_val; | ||
| 485 | hc->tx_x_recv <<= 6; | ||
| 486 | |||
| 497 | ccid3_pr_debug("%s(%p), RECEIVE_RATE=%u\n", | 487 | ccid3_pr_debug("%s(%p), RECEIVE_RATE=%u\n", |
| 498 | dccp_role(sk), sk, opt_val); | 488 | dccp_role(sk), sk, opt_val); |
| 499 | } else { | 489 | } else { |
| 500 | opt_recv->ccid3or_loss_event_rate = opt_val; | 490 | /* Update the fixpoint Loss Event Rate fraction */ |
| 491 | hc->tx_p = tfrc_invert_loss_event_rate(opt_val); | ||
| 492 | |||
| 501 | ccid3_pr_debug("%s(%p), LOSS_EVENT_RATE=%u\n", | 493 | ccid3_pr_debug("%s(%p), LOSS_EVENT_RATE=%u\n", |
| 502 | dccp_role(sk), sk, opt_val); | 494 | dccp_role(sk), sk, opt_val); |
| 503 | } | 495 | } |
diff --git a/net/dccp/ccids/ccid3.h b/net/dccp/ccids/ccid3.h index 89b047b0c79b..1a9933c29672 100644 --- a/net/dccp/ccids/ccid3.h +++ b/net/dccp/ccids/ccid3.h | |||
| @@ -67,11 +67,6 @@ enum ccid3_options { | |||
| 67 | TFRC_OPT_RECEIVE_RATE = 194, | 67 | TFRC_OPT_RECEIVE_RATE = 194, |
| 68 | }; | 68 | }; |
| 69 | 69 | ||
| 70 | struct ccid3_options_received { | ||
| 71 | u32 ccid3or_loss_event_rate; | ||
| 72 | u32 ccid3or_receive_rate; | ||
| 73 | }; | ||
| 74 | |||
| 75 | /* TFRC sender states */ | 70 | /* TFRC sender states */ |
| 76 | enum ccid3_hc_tx_states { | 71 | enum ccid3_hc_tx_states { |
| 77 | TFRC_SSTATE_NO_SENT = 1, | 72 | TFRC_SSTATE_NO_SENT = 1, |
| @@ -97,7 +92,6 @@ enum ccid3_hc_tx_states { | |||
| 97 | * @tx_t_ld: Time last doubled during slow start | 92 | * @tx_t_ld: Time last doubled during slow start |
| 98 | * @tx_t_nom: Nominal send time of next packet | 93 | * @tx_t_nom: Nominal send time of next packet |
| 99 | * @tx_hist: Packet history | 94 | * @tx_hist: Packet history |
| 100 | * @tx_options_received: Parsed set of retrieved options | ||
| 101 | */ | 95 | */ |
| 102 | struct ccid3_hc_tx_sock { | 96 | struct ccid3_hc_tx_sock { |
| 103 | u64 tx_x; | 97 | u64 tx_x; |
| @@ -115,7 +109,6 @@ struct ccid3_hc_tx_sock { | |||
| 115 | ktime_t tx_t_ld; | 109 | ktime_t tx_t_ld; |
| 116 | ktime_t tx_t_nom; | 110 | ktime_t tx_t_nom; |
| 117 | struct tfrc_tx_hist_entry *tx_hist; | 111 | struct tfrc_tx_hist_entry *tx_hist; |
| 118 | struct ccid3_options_received tx_options_received; | ||
| 119 | }; | 112 | }; |
| 120 | 113 | ||
| 121 | static inline struct ccid3_hc_tx_sock *ccid3_hc_tx_sk(const struct sock *sk) | 114 | static inline struct ccid3_hc_tx_sock *ccid3_hc_tx_sk(const struct sock *sk) |
