Ian -

|  > I have just checked and found out that the negotiation of the "Send ack 
vector feature" is not yet 
|  > implemented. It is not something which can be done with a hack, since the 
CCIDs can also be negotiated, 
|  > so that enabling Ack Vectors depends on the end result of negotiating the 
CCID.
|  > I think at the moment we should add this as a ToDo. If I get some time 
I'll try to implement the
|  > above, but it is more work than anticipated and so depends on available 
time.
|  >
|  
|  Well I think the discussion is useful as a future reference. There's
|  no hurry on any of this really.

I am happy to announce that feature negotiation now works, which resolves the 
above problem. Below is
a log dump which shows the successful negotiation of CCID and dependent 
features during the handshake.
Exchanging NN features during an established connection is also possible (as 
used e.g. by Ack Ratio for
CCID2). I'll be sending the patches next week after some more testing.

In a nutshell, it works like this:
 * client makes its reservations on the initial Request,
 * server aligns its reservations with the received client reservations, 
confirms or rejects the NN features
   and has the last word on server-priority (sic!) features,
 * after negotiating the CCID, the server resolves the CCID dependencies:
        - for CCID3 enable Send Loss Event rate, disable Ack Vectors, set Ack 
Ratio = 0
        - for CCID2 enable mandatory Send Ack Vector, set Ack Ratio = 2 or from 
sysctl
 * server adds Confirms and local Change options onto Response
 * client performs local checks, adds its Confirms onto the Ack, and enters 
PARTOPEN; before it does this,
   it enables all successfully negotiated features (or aborts on disagreement)  
  
 * server receives Ack and enters OPEN; before it does this, it activates all 
features as the client does

It is now possible to
 * influence negotiation of Sequence Window via feature negotiation
 * negotiate a common minimum Checksum coverage
 * set CCIDs on a per-connection basis via sockopts
 * the above works in general - almost all features use sysctls as default and 
can be overridden via
   sockopts

I will be sending the patches next week, in small batches, after testing. It is 
quite a lot since it involved
a few nasty problems which are now resolved. There is some (too much) 
documentation on 
http://www.erg.abdn.ac.uk/users/gerrit/dccp/notes/feature_negotiation/implementation_notes.html

The other news is a patch for wireshark to 
 * decode all feature-negotiation options
 * decode CCID3's X_recv and Loss Event Rate
This is on 
http://www.erg.abdn.ac.uk/users/gerrit/dccp/apps/wireshark-options-decoding.diff

Here is the log with comments:

# 1. initial startup phase: sequence window needs to be enabled early since 
needed for AWL/SWL
   -> activating RX Sequence Window, default val=100
   -> activating TX Sequence Window, default val=100
dccp_feat_finalise_settings: List Dump:
   * local CCID = 2, 3, state=INITIALISING
   * remote CCID = 2, 3, state=INITIALISING
   * local ECN Incapable = 1, state=INITIALISING
   * remote Min. Csum Coverage = 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 
state=INITIALISING

# 2. client inserts its options (chose CCID2, note that the server elects to 
use CCID3 instead)
dccp_feat_insert_opts: Change_R(Min. Csum Coverage, 6, 7, 8, 9, 10, 11, 12, 13, 
14, 15)
dccp_feat_insert_opts: Change_L(ECN Incapable, 1)
dccp_feat_insert_opts: Change_R(CCID, 2, 3)
dccp_feat_insert_opts: Change_L(CCID, 2, 3)
dccp_feat_confirm_recv: Confirm_L(CCID, 3, 3, 2)
dccp_feat_confirm_recv: Confirm_R(CCID, 3, 3, 2)

# 3. client receives Change/Confirms on the server Response
dccp_feat_change_recv: Change_L(ECN Incapable, 1) !
dccp_feat_confirm_recv: Confirm_R(ECN Incapable, 1, 1)
dccp_feat_change_recv: Change_L(Ack Ratio, 0)
dccp_feat_change_recv: Change_R(Send NDP Count, 1) !
dccp_feat_change_recv: Change_L(Send NDP Count, 1)
dccp_feat_confirm_recv: Confirm_L(Min. Csum Coverage, 6, 6, 4, 5, 3, 7, 8, 9, 
10, 11, 12, 13, 14, 15)
dccp_feat_change_recv: Change_L(Send Loss Event Rate, 1) !
dccp_feat_change_recv: Change_R(Send Loss Event Rate, 1) !

# 4. client is done (but has not sent the Ack with the Confirms yet)
dccp_feat_activate_values: List Dump:
   * local CCID = 3, 3, state=STABLE
   * remote CCID = 3, 3, state=STABLE
   * local ECN Incapable = 1, state=STABLE
   * remote ECN Incapable = 1, state=STABLE (Confirm pending)
   * remote Ack Ratio = 0, state=STABLE (Confirm pending)
   * local Send NDP Count = 1, state=STABLE (Confirm pending)
   * remote Send NDP Count = 1, state=STABLE (Confirm pending)
   * remote Min. Csum Coverage = 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 
state=STABLE
   * remote Send Loss Event Rate = 1, state=STABLE (Confirm pending)
   * local Send Loss Event Rate = 1, state=STABLE (Confirm pending)
   -> activating TX Min. Csum Coverage, val=6
   -> activating RX Min. Csum Coverage, default val=0
   -> activating RX Send NDP Count, val=1
   -> activating TX Send NDP Count, val=1
   -> activating TX Send ACK Vector, default val=0
   -> activating RX Send ACK Vector, default val=0
   -> activating RX Ack Ratio, val=0
   -> activating TX Ack Ratio, default val=2
   -> activating RX Sequence Window, default val=100
   -> activating TX Sequence Window, default val=100
   -> activating RX CCID, val=3
   -> activating TX CCID, val=3
dccp_feat_activate_values: Activation OK

# 5. this is the Ack sent to the server
dccp_feat_insert_opts: Confirm_L(Send Loss Event Rate, 1)
dccp_feat_insert_opts: Confirm_R(Send Loss Event Rate, 1)
dccp_feat_insert_opts: Confirm_R(Send NDP Count, 1)
dccp_feat_insert_opts: Confirm_L(Send NDP Count, 1)
dccp_feat_insert_opts: Confirm_R(Ack Ratio, 0)
dccp_feat_insert_opts: Confirm_R(ECN Incapable, 1)

# 6. This required the recent patch :)
SYN RTT = 170us
-
To unsubscribe from this list: send the line "unsubscribe dccp" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to