Re: [SUMMARY]: Problems with loss interval recalculation / audit against [RFC 3448, 5.4]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Gerrit,

First I would like to send a NEWBIE REQUEST.

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.

Now:

| RFC 3448 says that I_0 "represents the number of packets received since the | last loss event". (Section 5.5) In the Linux implementation, this number is | NOT stored in the li_entry list. It must be calculated. This is what Ian's | nonloss manipulations do. | | There are a number of errors in your discussion. You claim that I_0 is the | "most recent loss interval", and that it is stored in the li_entry structures. | But what RFC 3448 means by I_0 is not stored in the Linux DCCP | implementation's li_entry structures. Your comments under "This is the | crucial point" do not seem to realize this. There is truth in this, but I need to put it in relation to how the list is handled. What I stated below in "This is the crucial point" is that the highest received seqno and CCVal are always stored at the head of the list.
( 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. )

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.

| 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.

Eddie
-
To unsubscribe from this list: send the line "unsubscribe dccp" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel]     [IETF DCCP]     [Linux Networking]     [Git]     [Security]     [Linux Assembly]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]

  Powered by Linux