[CCID] Only call the HC insert_options methods when requested

Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@mandriva.com>
parent 0ba7a3ba
...@@ -433,6 +433,8 @@ struct dccp_sock { ...@@ -433,6 +433,8 @@ struct dccp_sock {
struct ccid *dccps_hc_tx_ccid; struct ccid *dccps_hc_tx_ccid;
struct dccp_options_received dccps_options_received; struct dccp_options_received dccps_options_received;
enum dccp_role dccps_role:2; enum dccp_role dccps_role:2;
__u8 dccps_hc_rx_insert_options:1;
__u8 dccps_hc_tx_insert_options:1;
}; };
static inline struct dccp_sock *dccp_sk(const struct sock *sk) static inline struct dccp_sock *dccp_sk(const struct sock *sk)
......
...@@ -358,10 +358,12 @@ static int ccid3_hc_tx_send_packet(struct sock *sk, ...@@ -358,10 +358,12 @@ static int ccid3_hc_tx_send_packet(struct sock *sk,
} }
/* Can we send? if so add options and add to packet history */ /* Can we send? if so add options and add to packet history */
if (rc == 0) if (rc == 0) {
dp->dccps_hc_tx_insert_options = 1;
new_packet->dccphtx_ccval = new_packet->dccphtx_ccval =
DCCP_SKB_CB(skb)->dccpd_ccval = DCCP_SKB_CB(skb)->dccpd_ccval =
hctx->ccid3hctx_last_win_count; hctx->ccid3hctx_last_win_count;
}
out: out:
return rc; return rc;
} }
...@@ -811,6 +813,7 @@ static void ccid3_hc_rx_send_feedback(struct sock *sk) ...@@ -811,6 +813,7 @@ static void ccid3_hc_rx_send_feedback(struct sock *sk)
hcrx->ccid3hcrx_pinv = ~0; hcrx->ccid3hcrx_pinv = ~0;
else else
hcrx->ccid3hcrx_pinv = 1000000 / hcrx->ccid3hcrx_p; hcrx->ccid3hcrx_pinv = 1000000 / hcrx->ccid3hcrx_p;
dp->dccps_hc_rx_insert_options = 1;
dccp_send_ack(sk); dccp_send_ack(sk);
} }
......
...@@ -505,13 +505,18 @@ void dccp_insert_options(struct sock *sk, struct sk_buff *skb) ...@@ -505,13 +505,18 @@ void dccp_insert_options(struct sock *sk, struct sk_buff *skb)
(dp->dccps_hc_rx_ackpkts->dccpap_buf_ackno != (dp->dccps_hc_rx_ackpkts->dccpap_buf_ackno !=
DCCP_MAX_SEQNO + 1)) DCCP_MAX_SEQNO + 1))
dccp_insert_option_ack_vector(sk, skb); dccp_insert_option_ack_vector(sk, skb);
if (dp->dccps_timestamp_echo != 0) if (dp->dccps_timestamp_echo != 0)
dccp_insert_option_timestamp_echo(sk, skb); dccp_insert_option_timestamp_echo(sk, skb);
} }
if (dp->dccps_hc_rx_insert_options) {
ccid_hc_rx_insert_options(dp->dccps_hc_rx_ccid, sk, skb); ccid_hc_rx_insert_options(dp->dccps_hc_rx_ccid, sk, skb);
dp->dccps_hc_rx_insert_options = 0;
}
if (dp->dccps_hc_tx_insert_options) {
ccid_hc_tx_insert_options(dp->dccps_hc_tx_ccid, sk, skb); ccid_hc_tx_insert_options(dp->dccps_hc_tx_ccid, sk, skb);
dp->dccps_hc_tx_insert_options = 0;
}
/* XXX: insert other options when appropriate */ /* XXX: insert other options when appropriate */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment