From: Gerrit Renker <gerrit@erg.abdn.ac.uk>
To: dccp@vger.kernel.org
Subject: Re: [SUMMARY]: Problems with loss interval recalculation / audit against [RFC 3448, 5.4]
Date: Tue, 09 Jan 2007 08:38:52 +0000 [thread overview]
Message-ID: <200701090838.52855@strip-the-willow> (raw)
In-Reply-To: <200701051829.20415@strip-the-willow>
| How can I get a complete copy of the DCCP source checked out, including
| your/Ian's patches? Where is there something on line that explains the git
| process? Thanks for your/anyone's help.
I found the following tutorial useful:
http://www.kernel.org/pub/software/scm/git/docs/tutorial.html
In addition, Ian's links are also very helpful - they have helped me in the past.
In the git sources there are a few summary documents as well, I found Documentation/everyday.txt good
Both my patches on http://www.erg.abdn.ac.uk/users/gerrit/dccp/patch-backlog/the_whole_lot.tar.gz
and Ian's patches on http://wand.net.nz/~iam4/dccp/patches/
are `stacked': if you have the quilt tool then it is best to fork a new git branch and apply
them in order. (If not, one can use for p in `cat series`; do patch -p1 < $p; done).
There is overlap between Ian's and my patch set; I usually copy those patches from the list where
we have finished discussion.
| > ( I just found out that there is another
| > PROBLEM#1: For the first loss interval (as per [RFC 3448, 6.3.1]), the timestamp
| > and sequence number are not stored, only the interval is. )
I just noted that I was wrong here - timestamp and sequence number are stored, but by a
different routine (dccp_li_hist_interval_new) - it would be great if we could perform the
storing of timestamp/sequence number always in the same function (dccp_li_update_li).
| >
| > For all other loss events, timestamp and sequence number are stored. This also holds
| > for I_0; it could be that the interval is 0 here due to (seq_temp becomes `interval')
| > seq_temp = dccp_delta_seqno(head->dccplih_seqno, seq_nonloss);
| > but I am not entirely sure about that. And it is probably safer to encode this
| > case more explicitly.
| >
| > In any way, this clarification leads to
| > PROBLEM#2: Since I_0 always sits at the head of the list, there are at most n=7
| > completed loss interval entries (not 8 as the RFC recommends).
|
| I find this difficult to follow, but is there still confusion? According to
| my reading of the patches, and Ian confirmed this, what RFC3448 means by I_0
| **is not stored on the list at all**. The list stores I_1...I_8. Remember
| that I_0 is the incomplete loss interval.
ACK - I_0 is the incomplete loss interval. The way the code is currently organised,
I_0 sits always on top of the list, which is due to:
* in ccid3_hc_rx_packet_recv(), the call to ccid3_hc_rx_detect_loss() comes first
* ccid3_hc_rx_detect_loss in turn calls dccp_li_update_li()
* control then resumes in ccid3_hc_rx_packet_recv()
Hence the detection of a loss event always triggers insertion of the sequence number
and timestamp at the head of the list.
With regard to your above comment, we should probably change this so that I_0 is
not stored on top of the list - or adapt the list handling so that I_0 can be distinguished
from I_1 ... I_k (k <= 8).
| > | Your comments about Ian's patch are also wrong, for the same reason. I
| > | believe Ian's patch calculates I_tot0 and I_tot1 correctly, although with
| > | swapped names. Certainly if there is a problem it is not the one you have
| > | identified.
| > If the above assumption that the interval of I_0 is 0 holds then in Ian's patch
| > (where I_0' is the interval called `non_loss' in Ian's patch) we have that
| > - I_tot0 is the sum I_1 * w_1 + ... I_7 * w_7
| > - I_tot1 is the sum I_0' * w_0 + I_1 * w_2 + I_2 * w3 + ... + I_6 * w_7
| > This can't be right.
|
| Your analysis is wrong, I think. Ian's patch sent 12/27 calculates
|
| I_tot0 = I_1 * w_0 + ... + I_8 * w_7
| I_tot1 = I_0 * w_0 + I_1 * w_1 + ... + I_7 * w_7.
|
| Because "i" starts at 0. The relevant part of the patch.
|
| i_tot0 += li_entry->dccplih_interval * dccp_li_hist_w[i];
| w_tot += dccp_li_hist_w[i];
| + if (i != 7)
| + i_tot1 += li_entry->dccplih_interval
| + * dccp_li_hist_w[i + 1];
| + if (i = 0) {
| + non_loss = dccp_hdr_seq(skb);
| + sub48(&non_loss, li_entry->dccplih_seqno);
| + }
|
| When "i = 0", the loop is examining I_1. Then i_tot0 += I_1*w[0], and i_tot1
| += I_1*w[1], exactly as one would like. The case "i=7" (that is, I_8)
| affects i_tot0 but not i_tot1, exactly as one would like.
I think it is different - that when 'i = 0' then we are looking at I_0. This is confirmed by the statement
if (i = 0) {
non_loss = dccp_hdr_seq(skb);
sub48(&non_loss, li_entry->dccplih_seqno);
}
which shows how the code uses the last recorded loss sequence number li_entry->dccplih_seqno to compute
the interval length for non_loss = I_0.
Hence we have here that i_tot0 += I_0' * w[0] and i_tot1 += I_0' * w[1], where I_0' is the interval
stored in li_entry. As per earlier email this could be 0 but I am still not entirely sure it is.
In the second iteration of the loop we have
i_tot0 += I_1 * w[1]
i_tot1 += I_1 * w[2]
and in the third we have
i_tot0 += I_2 * w[2]
i_tot1 += I_2 * w[3]
but the RFC says
I_tot0 = I_0 * w[0] + I_1 * w[1] + I_2 * w[2] + I_3 * w[3] + I_4 * w[4] + I_5 * w[5] + I_6 * w[6] + I_7 * w[7]
I_tot1 = I_1 * w[0] + I_2 * w[1] + I_3 * w[2] + I_4 * w[3] + I_5 * w[4] + I_6 * w[5] + I_7 * w[6] + I_8 * w[7]
which is different from what the above code does.
So I think what we can take home as `todo' items from this is
* correct the list handling with regard to I_0
* ensure that I_1 ... I_8 all fit in the list
* compute the interval length I_0 as done for `non_loss' in Ian's patch
* change the summation loop so that it matches the one in the RFC
I am still trying to compile all this into (yet another :) summary, thanks for your comments.
Gerrit
next prev parent reply other threads:[~2007-01-09 8:38 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-01-05 18:29 [SUMMARY]: Problems with loss interval recalculation / audit against [RFC 3448, 5.4] Gerrit Renker
2007-01-05 21:26 ` [SUMMARY]: Problems with loss interval recalculation / audit Eddie Kohler
2007-01-08 16:32 ` [SUMMARY]: Problems with loss interval recalculation / audit against [RFC 3448, 5.4] Gerrit Renker
2007-01-08 16:55 ` [SUMMARY]: Problems with loss interval recalculation / audit Eddie Kohler
2007-01-08 17:48 ` [SUMMARY]: Problems with loss interval recalculation / audit against [RFC 3448, 5.4] Arnaldo Carvalho de Melo
2007-01-08 20:36 ` Ian McDonald
2007-01-09 8:38 ` Gerrit Renker [this message]
2007-01-10 3:14 ` Ian McDonald
2007-01-10 4:27 ` Ian McDonald
2007-01-10 11:32 ` Gerrit Renker
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200701090838.52855@strip-the-willow \
--to=gerrit@erg.abdn.ac.uk \
--cc=dccp@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox