Re: Proposed NN Feature handling modification

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

 



Quoting Samuel Jero:
| > | My recommendation is to wait until the Confirm has been received to
| > | alter the value of an NN feature. This eliminates the problem above and
| > | has the advantage that it follows RFC 4340 (section 6.6.1). Further,
| > | making this change should require little code change.
| > | 
| > I like the solution introduced in patch #3 because it is simple: Change
| > options are retransmitted until the correct Confirm option comes in,
| > instead of resetting the connection. It is an instance of the robustness
| > principle - the peer can send any outdated/reordered Confirm option.
| 
| Patches #2 and 3 (and another patch I will send shortly) make the
| current method usable. Without them, NN feature negotiation in an
| ongoing connection causes the connection to be reset.
| 
Thank you for sending the updates. I have applied them to the current tree,
please check them. Here are the changes that I made:

  Patch #1: only whitespace changes. When looking over this patch I noted a problem
            with setting the local sequence window directly: this is also done in 
            feat.c:dccp_hdlr_seq_win() - in particular, also adjusting GSS, AWL, AWH.
            Please see discussion below, this is related.
  Patch #4: I think your patch set has tackled some of the problems mentioned
            in the FIXME that it removes. It would be good to find out what
            remains to be tackled, to eventually remove the #ifdef.
  Patch #5: Added a dccp_feat_list_pop(entry) in case the new value overwrites
            an existing one. Otherwise there would be multiple ChangeL options
            in the same packet, with differing values. Please also see below.

  http://eden-feed.erg.abdn.ac.uk/cgi-bin/gitweb.cgi?p=dccp_exp.git;a=shortlog;h=dccp

| However, I wouldn't consider them a fix for what I'm talking about here.
| The fact is that with the current code the sender thinks the receiver
| has the new value of the feature while the feature is being negotiated.
| 
I think this was my fault: the RFC says in 6.6.1 that values MUST not be changed
until they are confirmed by the peer. When this is taken as a prerequisite, the
complexity you mentioned below and the weird cases of two ends being in a limbo
state will not appear.

I am therefore sending an RFC patch separately. Although I have tried it briefly
with some Speex-streaming yesterday, I have not yet applied it to the test tree:
could you give this one a brief spin with your test setup?

If it works out as expected, I think this will give a simpler (and more conformant)
solution.

| Particularly for the Ack Ratio this can be confusing because the sender
| would interpret the acks from the receiver using the new ack ratio. The
| first half RTT of those would be from the old ack ratio. This would
| cause inappropriate changes in the congestion window/pipe except for
| appropriate byte counting which, I believe, mitigates that.
| 
| It just seems to me that there should be a better way to do this;
| something that's clearer and easier to understand/debug. 
| 
I wonder if there are any corner cases with waiting for the ConfirmR option before
activating the case: if not, the case is simpler, and I think we can then even 
remove the following (changed) segment.

        entry = dccp_feat_list_lookup(fn, feat, 1);
        if (entry != NULL) {
                if (entry->val.nn == fval.nn)
                        return 0;
                dccp_pr_debug("Clobbering existing NN entry %llu -> %llu\n",
                              (unsigned long long)entry->val.nn,
                              (unsigned long long)nn_val);
                dccp_feat_list_pop(entry);
        }
--
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