aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/linux/dccp.h2
-rw-r--r--net/dccp/ccids/ccid3.c5
-rw-r--r--net/dccp/options.c11
3 files changed, 14 insertions, 4 deletions
diff --git a/include/linux/dccp.h b/include/linux/dccp.h
index 007c290f74d4..5e0af0d08a93 100644
--- a/include/linux/dccp.h
+++ b/include/linux/dccp.h
@@ -433,6 +433,8 @@ struct dccp_sock {
433 struct ccid *dccps_hc_tx_ccid; 433 struct ccid *dccps_hc_tx_ccid;
434 struct dccp_options_received dccps_options_received; 434 struct dccp_options_received dccps_options_received;
435 enum dccp_role dccps_role:2; 435 enum dccp_role dccps_role:2;
436 __u8 dccps_hc_rx_insert_options:1;
437 __u8 dccps_hc_tx_insert_options:1;
436}; 438};
437 439
438static inline struct dccp_sock *dccp_sk(const struct sock *sk) 440static inline struct dccp_sock *dccp_sk(const struct sock *sk)
diff --git a/net/dccp/ccids/ccid3.c b/net/dccp/ccids/ccid3.c
index ae0500c79d07..37fd9eb8daaf 100644
--- a/net/dccp/ccids/ccid3.c
+++ b/net/dccp/ccids/ccid3.c
@@ -358,10 +358,12 @@ static int ccid3_hc_tx_send_packet(struct sock *sk,
358 } 358 }
359 359
360 /* Can we send? if so add options and add to packet history */ 360 /* Can we send? if so add options and add to packet history */
361 if (rc == 0) 361 if (rc == 0) {
362 dp->dccps_hc_tx_insert_options = 1;
362 new_packet->dccphtx_ccval = 363 new_packet->dccphtx_ccval =
363 DCCP_SKB_CB(skb)->dccpd_ccval = 364 DCCP_SKB_CB(skb)->dccpd_ccval =
364 hctx->ccid3hctx_last_win_count; 365 hctx->ccid3hctx_last_win_count;
366 }
365out: 367out:
366 return rc; 368 return rc;
367} 369}
@@ -811,6 +813,7 @@ static void ccid3_hc_rx_send_feedback(struct sock *sk)
811 hcrx->ccid3hcrx_pinv = ~0; 813 hcrx->ccid3hcrx_pinv = ~0;
812 else 814 else
813 hcrx->ccid3hcrx_pinv = 1000000 / hcrx->ccid3hcrx_p; 815 hcrx->ccid3hcrx_pinv = 1000000 / hcrx->ccid3hcrx_p;
816 dp->dccps_hc_rx_insert_options = 1;
814 dccp_send_ack(sk); 817 dccp_send_ack(sk);
815} 818}
816 819
diff --git a/net/dccp/options.c b/net/dccp/options.c
index 382c5894acb2..7ad2f4266ff9 100644
--- a/net/dccp/options.c
+++ b/net/dccp/options.c
@@ -505,13 +505,18 @@ void dccp_insert_options(struct sock *sk, struct sk_buff *skb)
505 (dp->dccps_hc_rx_ackpkts->dccpap_buf_ackno != 505 (dp->dccps_hc_rx_ackpkts->dccpap_buf_ackno !=
506 DCCP_MAX_SEQNO + 1)) 506 DCCP_MAX_SEQNO + 1))
507 dccp_insert_option_ack_vector(sk, skb); 507 dccp_insert_option_ack_vector(sk, skb);
508
509 if (dp->dccps_timestamp_echo != 0) 508 if (dp->dccps_timestamp_echo != 0)
510 dccp_insert_option_timestamp_echo(sk, skb); 509 dccp_insert_option_timestamp_echo(sk, skb);
511 } 510 }
512 511
513 ccid_hc_rx_insert_options(dp->dccps_hc_rx_ccid, sk, skb); 512 if (dp->dccps_hc_rx_insert_options) {
514 ccid_hc_tx_insert_options(dp->dccps_hc_tx_ccid, sk, skb); 513 ccid_hc_rx_insert_options(dp->dccps_hc_rx_ccid, sk, skb);
514 dp->dccps_hc_rx_insert_options = 0;
515 }
516 if (dp->dccps_hc_tx_insert_options) {
517 ccid_hc_tx_insert_options(dp->dccps_hc_tx_ccid, sk, skb);
518 dp->dccps_hc_tx_insert_options = 0;
519 }
515 520
516 /* XXX: insert other options when appropriate */ 521 /* XXX: insert other options when appropriate */
517 522