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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.