forked from Minki/linux
dccp ccid-3: Remove redundant 'options_received' struct
The `options_received' struct is redundant, since it re-duplicates the existing `p' and `x_recv' fields. This patch removes the sub-struct and migrates the format conversion operations (cf. below) to ccid3_hc_tx_parse_options(). Why the fields are redundant ---------------------------- The Loss Event Rate p and the Receive Rate x_recv are initially 0 when first loading CCID-3, as ccid_new() zeroes out the entire ccid3_hc_tx_sock. When Loss Event Rate or Receive Rate options are received, they are stored by ccid3_hc_tx_parse_options() into the fields `ccid3or_loss_event_rate' and `ccid3or_receive_rate' of the sub-struct `options_received' in ccid3_hc_tx_sock. After parsing (considering only the established state - dccp_rcv_established()), the packet is passed on to ccid_hc_tx_packet_recv(). This calls the CCID-3 specific routine ccid3_hc_tx_packet_recv(), which performs the following copy operations between fields of ccid3_hc_tx_sock: * hctx->options_received.ccid3or_receive_rate is copied into hctx->x_recv, after scaling it for fixpoint arithmetic, by 2^64; * hctx->options_received.ccid3or_loss_event_rate is copied into hctx->p, considering the above special cases; in addition, a value of 0 here needs to be mapped into p=0 (when no Loss Event Rate option has been received yet). Signed-off-by: Gerrit Renker <gerrit@erg.abdn.ac.uk>
This commit is contained in:
parent
535c55df13
commit
ce177ae2e6
@ -370,11 +370,10 @@ static void ccid3_hc_tx_packet_sent(struct sock *sk, int more,
|
||||
static void ccid3_hc_tx_packet_recv(struct sock *sk, struct sk_buff *skb)
|
||||
{
|
||||
struct ccid3_hc_tx_sock *hctx = ccid3_hc_tx_sk(sk);
|
||||
struct ccid3_options_received *opt_recv = &hctx->options_received;
|
||||
struct tfrc_tx_hist_entry *acked;
|
||||
ktime_t now;
|
||||
unsigned long t_nfb;
|
||||
u32 pinv, r_sample;
|
||||
u32 r_sample;
|
||||
|
||||
/* we are only interested in ACKs */
|
||||
if (!(DCCP_SKB_CB(skb)->dccpd_type == DCCP_PKT_ACK ||
|
||||
@ -404,17 +403,6 @@ static void ccid3_hc_tx_packet_recv(struct sock *sk, struct sk_buff *skb)
|
||||
r_sample = dccp_sample_rtt(sk, ktime_us_delta(now, acked->stamp));
|
||||
hctx->rtt = tfrc_ewma(hctx->rtt, r_sample, 9);
|
||||
|
||||
/* Update receive rate in units of 64 * bytes/second */
|
||||
hctx->x_recv = opt_recv->ccid3or_receive_rate;
|
||||
hctx->x_recv <<= 6;
|
||||
|
||||
/* Update loss event rate (which is scaled by 1e6) */
|
||||
pinv = opt_recv->ccid3or_loss_event_rate;
|
||||
if (pinv == 0)
|
||||
hctx->p = 0;
|
||||
else
|
||||
hctx->p = tfrc_invert_loss_event_rate(pinv);
|
||||
|
||||
/*
|
||||
* Update allowed sending rate X as per draft rfc3448bis-00, 4.2/3
|
||||
*/
|
||||
@ -487,7 +475,6 @@ static int ccid3_hc_tx_parse_options(struct sock *sk, u8 packet_type,
|
||||
u8 option, u8 *optval, u8 optlen)
|
||||
{
|
||||
struct ccid3_hc_tx_sock *hctx = ccid3_hc_tx_sk(sk);
|
||||
struct ccid3_options_received *opt_recv = &hctx->options_received;
|
||||
__be32 opt_val;
|
||||
|
||||
switch (option) {
|
||||
@ -504,11 +491,16 @@ static int ccid3_hc_tx_parse_options(struct sock *sk, u8 packet_type,
|
||||
opt_val = ntohl(get_unaligned((__be32 *)optval));
|
||||
|
||||
if (option == TFRC_OPT_RECEIVE_RATE) {
|
||||
opt_recv->ccid3or_receive_rate = opt_val;
|
||||
/* Receive Rate is kept in units of 64 bytes/second */
|
||||
hctx->x_recv = opt_val;
|
||||
hctx->x_recv <<= 6;
|
||||
|
||||
ccid3_pr_debug("%s(%p), RECEIVE_RATE=%u\n",
|
||||
dccp_role(sk), sk, opt_val);
|
||||
} else {
|
||||
opt_recv->ccid3or_loss_event_rate = opt_val;
|
||||
/* Update the fixpoint Loss Event Rate fraction */
|
||||
hctx->p = tfrc_invert_loss_event_rate(opt_val);
|
||||
|
||||
ccid3_pr_debug("%s(%p), LOSS_EVENT_RATE=%u\n",
|
||||
dccp_role(sk), sk, opt_val);
|
||||
}
|
||||
|
@ -70,11 +70,6 @@ enum ccid3_options {
|
||||
TFRC_OPT_RECEIVE_RATE = 194,
|
||||
};
|
||||
|
||||
struct ccid3_options_received {
|
||||
u32 ccid3or_loss_event_rate;
|
||||
u32 ccid3or_receive_rate;
|
||||
};
|
||||
|
||||
/* TFRC sender states */
|
||||
enum ccid3_hc_tx_states {
|
||||
TFRC_SSTATE_NO_SENT = 1,
|
||||
@ -101,7 +96,6 @@ enum ccid3_hc_tx_states {
|
||||
* @t_ld - Time last doubled during slow start
|
||||
* @t_nom - Nominal send time of next packet
|
||||
* @hist - Packet history
|
||||
* @options_received - Parsed set of retrieved options
|
||||
*/
|
||||
struct ccid3_hc_tx_sock {
|
||||
u64 x;
|
||||
@ -119,7 +113,6 @@ struct ccid3_hc_tx_sock {
|
||||
ktime_t t_ld;
|
||||
ktime_t t_nom;
|
||||
struct tfrc_tx_hist_entry *hist;
|
||||
struct ccid3_options_received options_received;
|
||||
};
|
||||
|
||||
static inline struct ccid3_hc_tx_sock *ccid3_hc_tx_sk(const struct sock *sk)
|
||||
|
Loading…
Reference in New Issue
Block a user