)]}'
{
  "log": [
    {
      "commit": "e41b5368e029e79d11acb5952bc73284e5026c62",
      "tree": "82d519911fb97171259260655e9b86a20fcfe378",
      "parents": [
        "a862f6a6dc89c57dd3a959a1636b59f0c27169c2"
      ],
      "author": {
        "name": "Denis V. Lunev",
        "email": "den@openvz.org",
        "time": "Wed Oct 08 10:33:26 2008 -0700"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Wed Oct 08 11:14:13 2008 -0700"
      },
      "message": "ipv6: added net argument to ICMP6_INC_STATS_BH\n\nSigned-off-by: Denis V. Lunev \u003cden@openvz.org\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "9a1f27c48065ce713eb47f2fd475b717e63ef239",
      "tree": "79ebeb8386b98aca595625b9d2db26bd52a8077d",
      "parents": [
        "c7004482e8dcb7c3c72666395cfa98a216a4fb70"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Oct 07 11:41:57 2008 -0700"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Tue Oct 07 11:41:57 2008 -0700"
      },
      "message": "inet_hashtables: Add inet_lookup_skb helpers\n\nTo be able to use the cached socket reference in the skb during input\nprocessing we add a new set of lookup functions that receive the skb on\ntheir argument list.\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: KOVACS Krisztian \u003chidden@sch.bme.hu\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "410e27a49bb98bc7fa3ff5fc05cc313817b9f253",
      "tree": "88bb1fcf84f9ebfa4299c9a8dcd9e6330b358446",
      "parents": [
        "0a68a20cc3eafa73bb54097c28b921147d7d3685"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Tue Sep 09 13:27:22 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Tue Sep 09 13:27:22 2008 +0200"
      },
      "message": "This reverts \"Merge branch \u0027dccp\u0027 of git://eden-feed.erg.abdn.ac.uk/dccp_exp\"\nas it accentally contained the wrong set of patches. These will be\nsubmitted separately.\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "a3cbdde8e9c38b66b4f13ac5d6ff1939ded0ff20",
      "tree": "8e66f40579776dbc07fdacb206c4d56e1b351e86",
      "parents": [
        "53ac9570c8145710aaed9e1eb850c2e991a4ebc1"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:43 2008 +0200"
      },
      "message": "dccp ccid-3: Preventing Oscillations\n\nThis implements [RFC 3448, 4.5], which performs congestion avoidance behaviour\nby reducing the transmit rate as the queueing delay (measured in terms of\nlong-term RTT) increases.\n\nOscillation can be turned on/off via a module option (do_osc_prev) and via sysfs\n(using mode 0644), the default is off.\n\nOverflow analysis:\n------------------\n * oscillation prevention is done after update_x(), so that t_ipi \u003c\u003d 64000;\n * hence the multiplication \"t_ipi * sqrt(R_sample)\" needs 64 bits;\n * done using u64 for sqrt_sample and explicit typecast of t_ipi;\n * the divisor, R_sqmean, is non-zero because oscillation prevention is first\n   called when receiving the second feedback packet, and tfrc_scaled_rtt() \u003e 0.\n\nA detailed discussion of the algorithm (with plots) is on\nhttp://www.erg.abdn.ac.uk/users/gerrit/dccp/notes/ccid3/sender_notes/oscillation_prevention/\n\nThe algorithm has negative side effects:\n  * when allowing to decrease t_ipi (leads to a large RTT) and\n  * when using it during slow-start;\nboth uses are therefore disabled.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "53ac9570c8145710aaed9e1eb850c2e991a4ebc1",
      "tree": "61aed967a24d95e5572ea311bdac04012f51e3b2",
      "parents": [
        "c8f41d50adc380bfb38538ce39ca0ffea5926221"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:43 2008 +0200"
      },
      "message": "dccp ccid-3: Simplify computing and range-checking of t_ipi\n\nThis patch simplifies the computation of t_ipi, avoiding expensive computations\nto enforce the minimum sending rate.\n\nBoth RFC 3448 and rfc3448bis (revision #06), as well as RFC 4342 sec 5., require\nat various stages that at least one packet must be sent per t_mbi \u003d 64 seconds.\nThis requires frequent divisions of the type X_min \u003d s/t_mbi, which are later\nconverted back into an inter-packet-interval t_ipi_max \u003d s/X_min \u003d t_mbi.\n\nThe patch removes the expensive indirection; in the unlikely case of having\na sending rate less than one packet per 64 seconds, it also re-adjusts X.\n\nThe following cases document conformance with RFC 3448  / rfc3448bis-06:\n 1) Time until receiving the first feedback packet:\n   * if the sender has no initial RTT sample then X \u003d s/1 Bps \u003e s/t_mbi;\n   * if the sender has an initial RTT sample or when the first feedback\n     packet is received, X \u003d W_init/R \u003e s/t_mbi.\n\n 2) Slow-start (p \u003d\u003d 0 and feedback packets come in):\n   * RFC 3448  (current code) enforces a minimum of s/R \u003e s/t_mbi;\n   * rfc3448bis (future code) enforces an even higher minimum of W_init/R.\n\n 3) Congestion avoidance with no absence of feedback (p \u003e 0):\n   * when X_calc or X_recv/2 are too low, the minimum of X_min \u003d s/t_mbi\n     is enforced in update_x() when calling update_send_interval();\n   * update_send_interval() is, as before, only called when X changes\n     (i.e. either when increasing or decreasing, not when in equilibrium).\n\n 4) Reduction of X without prior feedback or during slow-start (p\u003d\u003d0):\n   * both RFC 3448 and rfc3448bis here halve X directly;\n   * the associated constraint X \u003e\u003d s/t_mbi is nforced here by send_interval().\n\n 5) Reduction of X when p \u003e 0:\n   * X is modified indirectly via X_recv (RFC 3448) or X_recv_set (rfc3448bis);\n   * in both cases, control goes back to section 4.3 (in both documents);\n   * since p \u003e 0, both documents use X \u003d max(min(...), s/t_mbi), which is\n     enforced in this patch by calling send_interval() from update_x().\n\nI think that this analysis is exhaustive. Should I have forgotten a case,\nthe worst-case consideration arises when X sinks below s/t_mbi, and is then\nincreased back up to this minimum value. Even under this assumption, the\nbehaviour is correct, since all lower limits of X in RFC 3448 / rfc3448bis\nare either equal to or greater than s/t_mbi.\n\nNote on the condition X \u003e\u003d s/t_mbi  \u003c\u003d\u003d\u003e t_ipi \u003d s/X \u003c\u003d t_mbi: since X is\nscaled by 64, and all time units are in microseconds, the coded condition is:\n\n    t_ipi \u003d s * 64 * 10^6 usec / X \u003c\u003d 64 * 10^6 usec\n\nThis simplifies to s / X \u003c\u003d 1 second \u003c\u003d\u003d\u003e X * 1 second \u003e\u003d s \u003e 0.\n(A zero `s\u0027 is not allowed by the CCID-3 code).\t\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "c8f41d50adc380bfb38538ce39ca0ffea5926221",
      "tree": "ad2d9b674e2782b271f5ae15eb35630848055fbb",
      "parents": [
        "891e4d8a402427bc40dee4c8413213a584710372"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:42 2008 +0200"
      },
      "message": "dccp ccid-3: Measuring the packet size s with regard to rfc3448bis-06\n\nrfc3448bis allows three different ways of tracking the packet size `s\u0027: \n\n 1. using the MSS/MPS (at initialisation, 4.2, and in 4.1 (1));\n 2. using the average of `s\u0027 (in 4.1);\n 3. using the maximum of `s\u0027 (in 4.2).\n\nInstead of hard-coding a single interpretation of rfc3448bis, this implements\na choice of all three alternatives and suggests the first as default, since it\nis the option which is most consistent with other parts of the specification.\n\nThe patch further deprecates the update of t_ipi whenever `s\u0027 changes. The\ngains of doing this are only small since a change of s takes effect at the\nnext instant X is updated:\n * when the next feedback comes in (within one RTT or less);\n * when the nofeedback timer expires (within at most 4 RTTs).\n \nFurther, there are complications caused by updating t_ipi whenever s changes:\n * if t_ipi had previously been updated to effect oscillation prevention (4.5),\n   then it is impossible to make the same adjustment to t_ipi again, thus\n   counter-acting the algorithm;\n * s may be updated any time and a modification of t_ipi depends on the current\n   state (e.g. no oscillation prevention is done in the absence of feedback);\n * in rev-06 of rfc3448bis, there are more possible cases, depending on whether\n   the sender is in slow-start (t_ipi \u003c\u003d R/W_init), or in congestion-avoidance,\n   limited by X_recv or the throughput equation (t_ipi \u003c\u003d t_mbi).\n\nThus there are side effects of always updating t_ipi as s changes. These may not\nbe desirable. The only case I can think of where such an update makes sense is\nto recompute X_calc when p \u003e 0 and when s changes (not done by this patch).\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "891e4d8a402427bc40dee4c8413213a584710372",
      "tree": "e1e49c235c25c9d87a06b04ece4f534d79a40e51",
      "parents": [
        "9d497a2c9120e31ff417e75f9f5576c4cde11281"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:42 2008 +0200"
      },
      "message": "dccp ccid-3: Tidy up CCID-Kconfig dependencies\n\nThe per-CCID menu has several dependencies on EXPERIMENTAL. These are redundant,\nsince net/dccp/ccids/Kconfig is sourced by net/dccp/Kconfig and since the\nlatter menu in turn asserts a dependency on EXPERIMENTAL.\n\nThe patch removes the redundant dependencies as well as the repeated reference\nwithin the sub-menu.\n\nFurther changes:\n----------------\nTwo single dependencies on CCID-3 are replaced with a single enclosing `if\u0027.\n    \nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "9d497a2c9120e31ff417e75f9f5576c4cde11281",
      "tree": "5837bcdc7b78195e428a9ab7f6297c6b4acae3f3",
      "parents": [
        "88e97a93342c0b9e835d510921e7b2df8547d1bd"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:42 2008 +0200"
      },
      "message": "dccp ccid-3: Implement rfc3448bis change to initial-rate computation\n\nThe patch updates CCID-3 with regard to the latest rfc3448bis-06: \n * in the first revisions of the draft, MSS was used for the RFC 3390 window; \n * then (from revision #1 to revision #2), it used the packet size `s\u0027;\n * now, in this revision (and apparently final), the value is back to MSS.\n\nThis change has an implication for the case when no RTT sample is available,\nat the time of sending the first packet:\n\n * with RTT sample, 2*MSS/RTT \u003c\u003d initial_rate \u003c\u003d 4*MSS/RTT;\n * without RTT sample, the initial rate is one packet (s bytes) per second\n   (sec. 4.2), but using s instead of MSS here creates an imbalance, since\n   this would further reduce the initial sending rate.\n\nHence the patch uses MSS (called MPS in RFC 4340) in all places.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "88e97a93342c0b9e835d510921e7b2df8547d1bd",
      "tree": "0e8406050b02487b213b062f4d37528051f465e3",
      "parents": [
        "68c89ee53571a441799c03d5e240c6441bced620"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:42 2008 +0200"
      },
      "message": "dccp ccid-3: Update the RX history records in one place\n\nThis patch is a requirement for enabling ECN support later on. With that change\nin mind, the following preparations are done:\n * renamed handle_loss() into congestion_event() since it returns true when a\n   congestion event happens (it will eventually also take care of ECN packets);\n * lets tfrc_rx_congestion_event() always update the RX history records, since\n   this routine needs to be called for each non-duplicate packet anyway;\n * made all involved boolean-type functions to have return type `bool\u0027;\n\nUpdating the RX history records is now only necessary for the packets received\nup to sending the first feedback. The receiver code becomes again simpler.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "68c89ee53571a441799c03d5e240c6441bced620",
      "tree": "a355d77fd0bf9e57375601286bf4b792456b423e",
      "parents": [
        "22338f09bd60434a3f1d6608f0fa55972067985f"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:42 2008 +0200"
      },
      "message": "dccp ccid-3: Update the computation of X_recv\n\nThis updates the computation of X_recv with regard to Errata 610/611 for\nRFC 4342 and draft rfc3448bis-06, ensuring that at least an interval of 1\nRTT is used to compute X_recv.  The change is wrapped into a new function\nccid3_hc_rx_x_recv().\n\nFurther changes:\n----------------\n * feedback is not sent when no data packets arrived (bytes_recv \u003d\u003d 0), as per\n   rfc3448bis-06, 6.2;\n * take the timestamp for the feedback /after/ dccp_send_ack() returns, to avoid\n   taking the transmission time into account (in case layer-2 is busy);\n * clearer handling of failure in ccid3_first_li().\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "22338f09bd60434a3f1d6608f0fa55972067985f",
      "tree": "c7ec32e782d5c96a060e56cf4b34ddf78c60aadf",
      "parents": [
        "49ffc29a0223adbe0ea7005eea3ab2a03abbeb06"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:42 2008 +0200"
      },
      "message": "dccp tfrc: Increase number of RTT samples\n\nThis improves the receiver RTT sampling algorithm so that it tries harder to get\nas many RTT samples as possible. \n\nThe algorithm is based the concepts presented in RFC 4340, 8.1, using timestamps\nand the CCVal window counter. There exist 4 cases for the CCVal difference:\n * \u003d\u003d 0: less than RTT/4 passed since last packet -- unusable;\n *  \u003e 4: (much) more than 1 RTT has passed since last packet -- also unusable;\n * \u003d\u003d 4: perfect sample (exactly one RTT has passed since last packet);\n * 1..3: sub-optimal sample (between RTT/4 and 3*RTT/4 has passed).\n\nIn the last case the algorithm tried to optimise by storing away the candidate\nand then re-trying next time. The problem is that\n * a large number of samples is needed to smooth out the inaccuracies of the\n   algorithm;\n * the sender may not be sending enough packets to warrant a \"next time\";\n * hence it is better to use suboptimal samples whenever possible.\nThe algorithm now stores away the current sample only if the difference is 0.\n\nApplicability and background\n----------------------------\nA realistic example is MP3 streaming where packets are sent at a rate of less\nthan one packet per RTT, which means that suitable samples are absent for a\nvery long time.\n\nThe effectiveness of using suboptimal samples (with a delta between 1 and 4) was\nconfirmed by instrumenting the algorithm with counters. The results of two 20\nsecond test runs were:\n * With the old algorithm and a total of 38442 function calls, only 394 of these\n   calls resulted in usable RTT samples (about 1%), and 378 out of these were\n   \"perfect\" samples and 28013 (unused) samples had a delta of 1..3.\n * With the new algorithm and a total of 37057 function calls, 1702 usable RTT\n   samples were retrieved (about 4.6%), 5 out of these were \"perfect\" samples.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "49ffc29a0223adbe0ea7005eea3ab2a03abbeb06",
      "tree": "d7bf19858c85b5dbb6bded3f543fbf8a6a355a2e",
      "parents": [
        "2b81143aa3505e2460b24b357996c2f21840ea58"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:41 2008 +0200"
      },
      "message": "dccp: Clamping RTT values\n\nThis extracts the clamping part of dccp_sample_rtt() and makes it available\nto other parts of the code (as e.g. used in the next patch).\n\nNote: The function dccp_sample_rtt() now reduces to subtracting the elapsed\ntime. This could be eliminated but would require shorter prefixes and thus\nis not done by this patch - maybe an idea for later.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "2b81143aa3505e2460b24b357996c2f21840ea58",
      "tree": "37f752fb85c563f965655cec834bb289fd831137",
      "parents": [
        "2f3e3bbad917c426d3aba03a535809e5699de156"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:41 2008 +0200"
      },
      "message": "dccp ccid-3: Always perform receiver RTT sampling\n\nThis updates the CCID-3 receiver in part with regard to errata 610 and 611\n(http://www.rfc-editor.org/errata_list.php), which change RFC 4342 to use the\nReceive Rate as specified in rfc3448bis, requiring to constantly sample the\nRTT (or use a sender RTT).\n\nDoing this requires reusing the RX history structure after dealing with a loss.\n\nThe patch does not resolve how to compute X_recv if the interval is less\nthan 1 RTT. A FIXME has been added (and is resolved in subsequent patch).\n\nFurthermore, since this is all TFRC-based functionality, the RTT estimation\nis now also performed by the dccp_tfrc_lib module. This further simplifies\nthe CCID-3 code.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "2f3e3bbad917c426d3aba03a535809e5699de156",
      "tree": "e00bd5c8ccfad4444e8cc6ee8eb0d90223292390",
      "parents": [
        "34a081be8e14b7ada70e069b65b05d54db4af497"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:41 2008 +0200"
      },
      "message": "dccp ccid-3: Remove duplicate RX states\n\nThe only state information that the CCID-3 receiver keeps is whether initial \nfeedback has been sent or not. Further, this overlaps with use of feedback:\n\n * state \u003d\u003d TFRC_RSTATE_NO_DATA as long as no feedback has been sent;\n * state \u003d\u003d TFRC_RSTATE_DATA    as soon as the first feedback has been sent.\n\nThis patch reduces the duplication, by memorising the type of the last feedback.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "34a081be8e14b7ada70e069b65b05d54db4af497",
      "tree": "0304cc3c06e1ee9139d6dab01df07c8d073cd323",
      "parents": [
        "3ca7aea04152255bb65275b0018d3c673bc1f4e7"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:41 2008 +0200"
      },
      "message": "dccp tfrc: Let dccp_tfrc_lib do the sampling work\n\nThis migrates more TFRC-related code into the dccp_tfrc_lib:\n * sampling of the packet size `s\u0027 (which is only needed until the first\n   loss interval is computed (ccid3_first_li));\n * updating the byte-counter `bytes_recvd\u0027 in between sending feedbacks.\nThe result is a better separation of CCID-3 specific and TFRC specific\ncode, which aids future integration with ECN and e.g. CCID-4.\n\nFurther changes:\n----------------\n * replaced magic number of 536 with equivalent constant TCP_MIN_RCVMSS;\n   (this constant is also used when no estimate for `s\u0027 is available).\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "3ca7aea04152255bb65275b0018d3c673bc1f4e7",
      "tree": "828ffb82255e3a5f164039223e87145af0d611e5",
      "parents": [
        "d20ed95f8bf3d98d31dbbab8b00bb4c1a4a140f3"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:41 2008 +0200"
      },
      "message": "dccp tfrc: Return type of update_i_mean is void\n\nThis changes the return type of tfrc_lh_update_i_mean() to void, since that \nfunction returns always `false\u0027. This is due to \n\n \tlen \u003d dccp_delta_seqno(cur-\u003eli_seqno, DCCP_SKB_CB(skb)-\u003edccpd_seq) + 1;\n \n \tif (len - (s64)cur-\u003eli_length \u003c\u003d 0)\t/* duplicate or reordered */\n\t\treturn 0;\n\nwhich means that update_i_mean can only increase the length of the open loss\ninterval I_0, and hence the value of I_tot0 (RFC 3448, 5.4). Consequently the\ntest `i_mean \u003c old_i_mean\u0027 at the end of the function always evaluates to false.\n\nThere is no known way by which a loss interval can suddenly become shorter,\ntherefore the return type of the function is changed to void. (That is, under\nthe given circumstances step (3) in RFC 3448, 6.1 will not occur.)\n\nFurther changes:\n----------------\n * the function is now called from tfrc_rx_handle_loss, which is equivalent\n   to the previous way of calling from rx_packet_recv (it was called whenever\n   there was no new or pending loss, now  it is also updated when there is\n   a pending loss - this increases the accuracy a bit);\n * added a FIXME to possibly consider NDP counting as per RFC 4342 (this is\n   not implemented yet).\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "d20ed95f8bf3d98d31dbbab8b00bb4c1a4a140f3",
      "tree": "a740d35fd710618863a63e4b86ecaedc2ea5497b",
      "parents": [
        "24b8d343215919c7a2ba18b9f89a0961e1459cad"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:40 2008 +0200"
      },
      "message": "dccp tfrc: Perform early loss detection\n\nThis enables the TFRC code to begin loss detection (as soon as the module\nis loaded), using the latest updates from rfc3448bis-06, 6.3.1:\n\n * when the first data packet(s) are lost or marked, set\n * X_target \u003d s/(2*R) \u003d\u003e f(p) \u003d s/(R * X_target) \u003d 2,\n * corresponding to a loss rate of ~ 20.64%.\n\nThe handle_loss() function is now called right at the begin of rx_packet_recv()\nand thus no longer protected against duplicates: hence a call to rx_duplicate()\nhas been added.  Such a call makes sense now, as the previous patch initialises\nthe first entry with a sequence number of GSR.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "24b8d343215919c7a2ba18b9f89a0961e1459cad",
      "tree": "2b97062dae6e80bb178a0cd0354aa71fe884ef30",
      "parents": [
        "8b67ad12b04ef7bdf5d2b4de24fe5a609b26cf12"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:40 2008 +0200"
      },
      "message": "dccp tfrc: Receiver history initialisation routine\n\nThis patch \n 1) separates history allocation and initialisation, to facilitate early\n    loss detection (implemented by a subsequent patch);\n\n 2) removes duplication by using the existing tfrc_rx_hist_purge() if the\n    allocation fails. This is now possible, since the initialisation routine\n 3) zeroes out the entire history before using it. \n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "8b67ad12b04ef7bdf5d2b4de24fe5a609b26cf12",
      "tree": "e434f1de89f42008020f6aa4767c0dc0b81c9e17",
      "parents": [
        "d0c05fe4448db5cbdd886186860581f736f59ae9"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:40 2008 +0200"
      },
      "message": "dccp tfrc: Suppress unavoidable \"below resolution\" warning\n\nIn the congestion-avoidance phase a decay of p towards 0 is natural once fewer\nlosses are encountered. Hence the warning message \"p is below resolution\" is\nnot necessary, and thus turned into a debug message by this patch.\n\nThe TFRC_SMALLEST_P is needed since in theory p never actually reaches 0. When\nno further losses are encountered, the loss interval I_0 grows in length, \ncausing p to decrease towards 0, causing X_calc \u003d s/(RTT * f(p)) to increase.\n\nWith the given minimum-resolution this congestion avoidance phase stops at some\nfixed value, an approximation formula has been added to the documentation.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "d0c05fe4448db5cbdd886186860581f736f59ae9",
      "tree": "883543f6992615a8cf9404a8904d35cdde46ddc3",
      "parents": [
        "f76fd327a8b32d3ad5b51639faf6f54d18be0981"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:40 2008 +0200"
      },
      "message": "dccp ccid-3: Simplified handling of TX states\n\nSince CCIDs are only used during the established phase of a connection,\nthey have very little internal state; this specifically reduces to:\n\n * \"no packet sent\" if and only if s \u003d\u003d 0, for the TX packet size s;\n\n * when the first packet has been sent (i.e. `s\u0027 \u003e 0), the question is whether\n   or not feedback has been received:\n   - if a feedback packet is received, \"feedback \u003d yes\" is set,\n   - if the nofeedback timer expires,  \"feedback \u003d no\"  is set.\n\nThus the CCID only needs to remember state about whether or not feedback\nhas been received. This is now implemented using a boolean flag, which is\ntoggled when a feedback packet arrives or the nofeedback timer expires.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "f76fd327a8b32d3ad5b51639faf6f54d18be0981",
      "tree": "86de66d77206ff624cce7402f73f97ea3575a6c9",
      "parents": [
        "7d1af6a8d935678248d057564e75e1452409a53c"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:40 2008 +0200"
      },
      "message": "dccp ccid-3: Runtime verification of timer resolution\n\nThe DCCP base time resolution is 10 microseconds (RFC 4340, 13.1 ... 13.3).\n\nUsing a timer with a lower resolution was found to trigger the following\nbug warnings/problems on high-speed networks (e.g. local loopback):\n * RTT samples are rounded down to 0 if below resolution;\n * in some cases, negative RTT samples were observed;\n * the CCID-3 feedback timer complains that the feedback interval is 0,\n   since the feedback interval is in the order of 1 RTT or less and RTT\n   measurement rounded this down to 0;\nOn an Intel computer this will for instance happen when using a\nboot-time parameter of \"clocksource\u003djiffies\".\n\nThe following system log messages were observed:\n  11:24:00 kernel: BUG: delta (0) \u003c\u003d 0 at ccid3_hc_rx_send_feedback()\n  11:26:12 kernel: BUG: delta (0) \u003c\u003d 0 at ccid3_hc_rx_send_feedback()\n  11:26:30 kernel: dccp_sample_rtt: unusable RTT sample 0, using min\n  11:26:30 last message repeated 5 times\n\nThis patch defines a global constant for the time resolution, adds this in\ntimer.c, and checks the available clock resolution at CCID-3 module load time.\n\nWhen the resolution is worse than 10 microseconds, module loading exits with\na message \"socket type not supported\".\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "7d1af6a8d935678248d057564e75e1452409a53c",
      "tree": "06ea5f0d3e819e99609df3ef741574cdfac4aab9",
      "parents": [
        "d6da3511d6b558d0b017777b61dc08b8fbc06ea4"
      ],
      "author": {
        "name": "Tomasz Grobelny",
        "email": "tomasz@grobelny.oswiecenia.net",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:40 2008 +0200"
      },
      "message": "dccp qpolicy: Parameter checking of cmsg qpolicy parameters\n\nEnsure that cmsg-\u003ecmsg_type value is valid for qpolicy \nthat is currently in use.\n\nSigned-off-by: Tomasz Grobelny \u003ctomasz@grobelny.oswiecenia.net\u003e\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "d6da3511d6b558d0b017777b61dc08b8fbc06ea4",
      "tree": "473f9131b9e641d803bfbea174cf1dfc45aea3ca",
      "parents": [
        "ddab05568eaa70fc92b2aae957136f188f724e9c"
      ],
      "author": {
        "name": "Tomasz Grobelny",
        "email": "tomasz@grobelny.oswiecenia.net",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:39 2008 +0200"
      },
      "message": "dccp: Policy-based packet dequeueing infrastructure\n\nThis patch adds a generic infrastructure for policy-based dequeueing of \nTX packets and provides two policies:\n * a simple FIFO policy (which is the default) and\n * a priority based policy (set via socket options).\nBoth policies honour the tx_qlen sysctl for the maximum size of the write\nqueue (can be overridden via socket options). \n\nThe priority policy uses skb-\u003epriority internally to assign an u32 priority\nidentifier, using the same ranking as SO_PRIORITY. The skb-\u003epriority field\nis set to 0 when the packet leaves DCCP. The priority is supplied as ancillary\ndata using cmsg(3), the patch also provides the requisite parsing routines.\n\nSigned-off-by: Tomasz Grobelny \u003ctomasz@grobelny.oswiecenia.net\u003e\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "ddab05568eaa70fc92b2aae957136f188f724e9c",
      "tree": "895f53c4e418987c97aec350996d34e166dedfdc",
      "parents": [
        "6224877b2ca4be5de96270a8ae490fe2ba11b0e0"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:39 2008 +0200"
      },
      "message": "dccp: Clean up slow-path input processing\n\nThis patch rearranges the order of statements of the slow-path input processing\n(i.e. any other state than OPEN), to resolve the following issues.\n\n 1. Dependencies: the order of statements now better matches RFC 4340, 8.5, i.e.\n    step 7 is before step 9 (previously 9 was before 7), and parsing options in\n    step 8 (which can consume resources) now comes after step 7.\n 2. Bug-fix: in state CLOSED, there should not be any sequence number checking\n    or option processing. This is why the test for CLOSED has been moved after\n    the test for LISTEN.\n 3. As before sequence number checks are omitted if in state LISTEN/REQUEST, due\n    to the note underneath the table in RFC 4340, 7.5.3.\n 4. Packets are now passed on to Ack Vector / CCID processing only after\n    - step 7  (receive unexpected packets), \n    - step 9  (receive Reset),\n    - step 13 (receive CloseReq),\n    - step 14 (receive Close)\n    and only if the state is PARTOPEN. This simplifies CCID processing:\n    - in LISTEN/CLOSED the CCIDs are non-existent;\n    - in RESPOND/REQUEST the CCIDs have not yet been negotiated;\n    - in CLOSEREQ and active-CLOSING the node has already closed this socket;\n    - in passive-CLOSING the client is waiting for its Reset.\n    In the last case, RFC 4340, 8.3 leaves it open to ignore further incoming\n    data, which is the approach taken here.\n\nAs a result of (3), CCID processing is now indeed confined to OPEN/PARTOPEN\nstates, i.e. congestion control is performed only on the flow of data packets. \n\nThis avoids pathological cases of doing congestion control on those messages\nwhich set up and terminate the connection. \n\nI have done a few checks to see if this creates a problem in other parts of\nthe code. This seems not to be the case; even if there were one, it would be\nbetter to fix it than to perform congestion control on Close/Request/Response\nmessages. Similarly for Ack Vectors (as they depend on the negotiated CCID).\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "6224877b2ca4be5de96270a8ae490fe2ba11b0e0",
      "tree": "95eef39293311959842e5476eace895e457eb780",
      "parents": [
        "b25b0c60b0c39a82bc651aeb6443bcb36cd17f76"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:39 2008 +0200"
      },
      "message": "tcp/dccp: Consolidate common code for RFC 3390 conversion\n\nThis patch consolidates the code common to TCP and CCID-2:\n * TCP uses RFC 3390 in a packet-oriented manner (tcp_input.c) and\n * CCID-2 uses RFC 3390 in packet-oriented manner (RFC 4341).\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "b25b0c60b0c39a82bc651aeb6443bcb36cd17f76",
      "tree": "fbb808a03b513922b93354c240fc73b1cc914de8",
      "parents": [
        "20bbd0f75ee4b72c1dafc8e5fb6ad39ba506a75c"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:39 2008 +0200"
      },
      "message": "dccp: Combine the functionality of enqeueing and cloning\n\nRealising the following call pattern,\n * first dccp_entail() is called to enqueue a new skb and\n * then skb_clone() is called to transmit a clone of that skb,\n\nthis patch integrates both interrelated steps into dccp_entail().\n\nNote: the return value of skb_clone is not checked. It may be an idea to add a\n      warning if this occurs. In both instances, however, a timer is set for\n      retransmission, so that cloning is re-tried via dccp_retransmit_skb().\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "20bbd0f75ee4b72c1dafc8e5fb6ad39ba506a75c",
      "tree": "c67263fcc9ed4bab01ecbdb43393b1cb2a0dfd36",
      "parents": [
        "1435562d7e0412e4885b661843f69859013f9d25"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:39 2008 +0200"
      },
      "message": "dccp ccid-2: Remove wrappers around sk_{reset,stop}_timer()\n\nThis removes the wrappers around the sk timer functions as it makes the code\nclearer and not much is gained from using wrappers: the BUG_ON in \nstart_rto_timer will never trigger since that function was called only when\n * the RTO timer expired (rto_expire, and then timer_pending() is false);\n * in tx_packet_sent only if !timer_pending() (BUG_ON is redundant here);\n * previously in new_ack, after stopping the timer (timer_pending() false).\n\nOne further motive behind this patch is to replace the RTO timer with the\nicsk retransmission timer, as it is already part of the DCCP socket.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "1435562d7e0412e4885b661843f69859013f9d25",
      "tree": "8357027ac15fa199051e8d85aa448115c3bdd2c2",
      "parents": [
        "e9803c0104564698d3b8e84ccdb0b8b0e65427e2"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:39 2008 +0200"
      },
      "message": "dccp ccid-2: Replace broken RTT estimator with better algorithm\n\nThe current CCID-2 RTT estimator code is in parts broken and lags behind the\nsuggestions in RFC2988 of using scaled variants for SRTT/RTTVAR. \nThat code is replaced by the present patch, which reuses the Linux TCP RTT\nestimator code - reasons for this code duplication are given below.\n\nFurther details:\n----------------\n 1. The minimum RTO of previously one second has been replaced with TCP\u0027s, since\n    RFC4341, sec. 5 says that the minimum of 1 sec. (suggested in RFC2988, 2.4)\n    is not necessary. Instead, the TCP_RTO_MIN is used, which agrees with DCCP\u0027s\n    concept of a default RTT (RFC 4340, 3.4). \n 2. The maximum RTO has been set to DCCP_RTO_MAX (64 sec), which agrees with \n    RFC2988, (2.5). \n 3. De-inlined the function ccid2_new_ack().\n 4. Added a FIXME: the RTT is sampled several times per Ack Vector, which will\n    give the wrong estimate. It should be replaced with one sample per Ack.\n    However, at the moment this can not be resolved easily, since     \n    - it depends on TX history code (which also needs some work),\n    - the cleanest solution is not to use the `sent\u0027 time at all (saves 4 bytes\n      per entry) and use DCCP timestamps / elapsed time to estimated the RTT,\n      which however is non-trivial to get right (but needs to be done).\n\nReasons for reusing the Linux TCP estimator algorithm:   \n------------------------------------------------------\nSome time was spent to find a better alternative, using basic RFC2988 as a first\nstep. Further analysis and experimentation showed that the Linux TCP RTO\nestimator is superior to a basic RFC2988 implementation. A summary is on\nhttp://www.erg.abdn.ac.uk/users/gerrit/dccp/notes/ccid2/rto_estimator/\n\nIn addition, this estimator fared well in a recent empirical evaluation:\n\n    Rewaskar, Sushant, Jasleen Kaur and F. Donelson Smith.\n    A Performance Study of Loss Detection/Recovery in Real-world TCP\n    Implementations. Proceedings of 15th IEEE International\n    Conference on Network Protocols (ICNP-07). 2007.\n\nThus there is significant benefit in reusing the existing TCP code.\n\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "e9803c0104564698d3b8e84ccdb0b8b0e65427e2",
      "tree": "2bdc72974473e43d48366b7484615d723a782e05",
      "parents": [
        "c6f0f2e71f3088a0f05502d6adb0f667b84028c3"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:38 2008 +0200"
      },
      "message": "dccp ccid-2: Simplify dec_pipe and rearming of RTO timer\n\nThis removes the dec_pipe function and improves the way the RTO timer is rearmed\nwhen a new acknowledgment comes in.\n\nDetails and justification for removal:\n--------------------------------------\n 1) The BUG_ON in dec_pipe is never triggered: pipe is only decremented for TX \n    history entries between tail and head, for which it had previously been \n    incremented in tx_packet_sent; and it is not decremented twice for the same\n    entry, since it is\n    - either decremented when a corresponding Ack Vector cell in state 0 or 1 \n      was received (and then ccid2s_acked\u003d\u003d1),\n    - or it is decremented when ccid2s_acked\u003d\u003d0, as part of the loss detection\n      in tx_packet_recv (and hence it can not have been decremented earlier).\n\n 2) Restarting the RTO timer happens for every single entry in each Ack Vector\n    parsed by tx_packet_recv (according to RFC 4340, 11.4 this can happen up to\n    16192 times per Ack Vector). \n\n 3) The RTO timer should not be restarted when all outstanding data has been\n    acknowledged. This is currently done similar to (2), in dec_pipe, when\n    pipe has reached 0.\n\nThe patch onsolidates the code which rearms the RTO timer, combining the\nsegments from new_ack and dec_pipe. As a result, the code becomes clearer\n(compare with tcp_rearm_rto()).\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "c6f0f2e71f3088a0f05502d6adb0f667b84028c3",
      "tree": "6ab76387d836075f75fcb7ece70c0b76f241b509",
      "parents": [
        "83337dae6ca94d801b6700600244865cd694205b"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:38 2008 +0200"
      },
      "message": "dccp ccid-2: Remove redundant sanity tests\n\nThis removes the ccid2_hc_tx_check_sanity function: it is redundant.\n\nDetails:\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nThe tx_check_sanity function performs three tests:\n 1) it checks that the circular TX list is sorted\n    - in ascending order of sequence number (ccid2s_seq) \n    - and time (ccid2s_sent),\n    - in the direction from `tail\u0027 (hctx_seqt) to `head\u0027 (hctx_seqh);\n 2) it ensures that the entire list has the length seqbufc * CCID2_SEQBUF_LEN;\n 3) it ensures that pipe equals the number of packets that were not\n    marked `acked\u0027 (ccid2s_acked) between `tail\u0027 and `head\u0027.\n\nThe following argues that each of these tests is redundant, this can be verified\nby going through the code.\n\n(1) is not necessary, since both time and GSS increase from one packet to the\nnext, so that subsequent insertions in tx_packet_sent (which advance the `head\u0027\npointer) will be in ascending order of time and sequence number.\n\nIn (2), the length of the list is always equal to seqbufc times CCID2_SEQBUF_LEN\n(set to 1024) unless allocation caused an earlier failure, because:\n * at initialisation (tx_init), there is one chunk of size 1024 and seqbufc\u003d1;\n * subsequent calls to tx_alloc_seq take place whenever head-\u003enext \u003d\u003d tail in \n   tx_packet_sent; then a new chunk of size 1024 is inserted between head and\n   tail, and seqbufc is incremented by one.\n\nTo show that (3) is redundant requires looking at two cases. \n\nThe `pipe\u0027 variable of the TX socket is incremented only in tx_packet_sent, and \ndecremented in tx_packet_recv.  When head \u003d\u003d tail (TX history empty) then pipe\nshould be 0, which is the case directly after initialisation and after a\nretransmission timeout has occurred (ccid2_hc_tx_rto_expire).\n\nThe first case involves parsing Ack Vectors for packets recorded in the live\nportion of the buffer, between tail and head. For each packet marked by the\nreceiver as received (state 0) or ECN-marked (state 1), pipe is decremented by\none, so for all such packets the BUG_ON in tx_check_sanity will not trigger.\n\nThe second case is the loss detection in the second half of tx_packet_recv,\nbelow the comment \"Check for NUMDUPACK\".\n\nThe first while-loop here ensures that the sequence number of `seqp\u0027 is either\nabove or equal to `high_ack\u0027, or otherwise equal to the highest sequence number\nsent so far (of the entry head-\u003eprev, as head points to the next unsent entry).\nThe next while-loop (\"while (1)\") counts the number of acked packets starting\nfrom that position of seqp, going backwards in the direction from head-\u003eprev to\ntail. If NUMDUPACK\u003d3 such packets were counted within this loop, `seqp\u0027 points\nto the last acknowledged packet of these, and the \"if (done \u003d\u003d NUMDUPACK)\" block\nis entered next. \nThe while-loop contained within that block in turn traverses the list backwards,\nfrom head to tail; the position of `seqp\u0027 is saved in the variable `last_acked\u0027. \nFor each packet not marked as `acked\u0027, a congestion event is triggered within \nthe loop, and pipe is decremented. The loop terminates when `seqp\u0027 has reached\n`tail\u0027, whereupon tail is set to the position previously stored in `last_acked\u0027.\nThus, between `last_acked\u0027 and the previous position of `tail\u0027, \n - pipe has been decremented earlier if the packet was marked as state 0 or 1;\n - pipe was decremented if the packet was not marked as acked.\nThat is, pipe has been decremented by the number of packets between `last_acked\u0027\nand the previous position of `tail\u0027. As a consequence, pipe now again reflects\nthe number of packets which have not (yet) been acked between the new position\nof tail (at `last_acked\u0027) and head-\u003eprev, or 0 if head\u003d\u003dtail. The result is that\nthe BUG_ON condition in check_sanity will also not be triggered, hence the test\n(3) is also redundant.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "83337dae6ca94d801b6700600244865cd694205b",
      "tree": "8d46dcc50324ce3842f94c40a332b9689e488eab",
      "parents": [
        "146993cf5174472644ed11bd5fb539f0af8bfa49"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:38 2008 +0200"
      },
      "message": "dccp ccid-2: Stop polling\n\nThis updates CCID2 to use the CCID dequeuing mechanism, converting from\nprevious constant-polling to a now event-driven mechanism.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "146993cf5174472644ed11bd5fb539f0af8bfa49",
      "tree": "b2c5343ad610fe113425a3663f0dc3ddb478911b",
      "parents": [
        "e7937772d7a2b0127cc4cbc67bc594e139fdaf63"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:38 2008 +0200"
      },
      "message": "dccp: Refine the wait-for-ccid mechanism\n\nThis extends the existing wait-for-ccid routine so that it may be used with\ndifferent types of CCID. It further addresses the problems listed below.\n\nThe code looks if the write queue is non-empty and grants the TX CCID up to\n`timeout\u0027 jiffies to drain the queue. It will instead purge that queue if\n * the delay suggested by the CCID exceeds the time budget;\n * a socket error occurred while waiting for the CCID;\n * there is a signal pending (eg. annoyed user pressed Control-C);\n * the CCID does not support delays (we don\u0027t know how long it will take).\n\n\n                 D e t a i l s  [can be removed]\n                 -------------------------------\nDCCP\u0027s sending mechanism functions a bit like non-blocking I/O: dccp_sendmsg()\nwill enqueue up to net.dccp.default.tx_qlen packets (default\u003d5), without waiting\nfor them to be released to the network.\n\nRate-based CCIDs, such as CCID3/4, can impose sending delays of up to maximally\n64 seconds (t_mbi in RFC 3448). Hence the write queue may still contain packets\nwhen the application closes. Since the write queue is congestion-controlled by\nthe CCID, draining the queue is also under control of the CCID.\n\nThere are several problems that needed to be addressed:\n 1) The queue-drain mechanism only works with rate-based CCIDs. If CCID2 for\n    example has a full TX queue and becomes network-limited just as the\n    application wants to close, then waiting for CCID2 to become unblocked could\n    lead to an indefinite  delay (i.e., application \"hangs\").\n 2) Since each TX CCID in turn uses a feedback mechanism, there may be changes\n    in its sending policy while the queue is being drained. This can lead to\n    further delays during which the application will not be able to terminate.\n 3) The minimum wait time for CCID3/4 can be expected to be the queue length\n    times the current inter-packet delay. For example if tx_qlen\u003d100 and a delay\n    of 15 ms is used for each packet, then the application would have to wait\n    for a minimum of 1.5 seconds before being allowed to exit.\n 4) There is no way for the user/application to control this behaviour. It would\n    be good to use the timeout argument of dccp_close() as an upper bound. Then\n    the maximum time that an application is willing to wait for its CCIDs to can\n    be set via the SO_LINGER option.\n\nThese problems are addressed by giving the CCID a grace period of up to the\n`timeout\u0027 value.\n\nThe wait-for-ccid function is, as before, used when the application \n (a) has read all the data in its receive buffer and\n (b) if SO_LINGER was set with a non-zero linger time, or\n (c) the socket is either in the OPEN (active close) or in the PASSIVE_CLOSEREQ\n     state (client application closes after receiving CloseReq).\n\nIn addition, there is a catch-all case by calling __skb_queue_purge() after \nwaiting for the CCID. This is necessary since the write queue may still have\ndata when\n (a) the host has been passively-closed,\n (b) abnormal termination (unread data, zero linger time),\n (c) wait-for-ccid could not finish within the given time limit.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "e7937772d7a2b0127cc4cbc67bc594e139fdaf63",
      "tree": "3d56098b6fcdecbf70453d74c2065a8e33134d1e",
      "parents": [
        "f4a66ca4d2ff093c0f9111b449a248ffb8209b4d"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:38 2008 +0200"
      },
      "message": "dccp: Extend CCID packet dequeueing interface\n\nThis extends the packet dequeuing interface of dccp_write_xmit() to allow\n 1. CCIDs to take care of timing when the next packet may be sent;\n 2. delayed sending (as before, with an inter-packet gap up to 65.535 seconds).\n\nThe main purpose is to take CCID2 out of its polling mode (when it is network-\nlimited, it tries every millisecond to send, without interruption).\nThe interface can also be used to support other CCIDs.\n\nThe mode of operation for (2) is as follows:\n * new packet is enqueued via dccp_sendmsg() \u003d\u003e dccp_write_xmit(),\n * ccid_hc_tx_send_packet() detects that it may not send (e.g. window full), \n * it signals this condition via `CCID_PACKET_WILL_DEQUEUE_LATER\u0027,\n * dccp_write_xmit() returns without further action;\n * after some time the wait-condition for CCID becomes true,\n * that CCID schedules the tasklet,\n * tasklet function calls ccid_hc_tx_send_packet() via dccp_write_xmit(),\n * since the wait-condition is now true, ccid_hc_tx_packet() returns \"send now\",\n * packet is sent, and possibly more (since dccp_write_xmit() loops).\n\nCode reuse: the taskled function calls dccp_write_xmit(), the timer function\n            reduces to a wrapper around the same code.\n\nIf the tasklet finds that the socket is locked, it re-schedules the tasklet\nfunction (not the tasklet) after one jiffy.\n\nChanged DCCP_BUG to dccp_pr_debug when transmit_skb returns an error (e.g. when a\nlocal qdisc is used, NET_XMIT_DROP\u003d1 can be returned for many packets).\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "f4a66ca4d2ff093c0f9111b449a248ffb8209b4d",
      "tree": "0643f7420a1d0b071f12c719129750d2028bb6e1",
      "parents": [
        "c8bf462bc567c3dcb083ff95cc13060dd06f138c"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:38 2008 +0200"
      },
      "message": "dccp: Return-value convention of hc_tx_send_packet()\n\nThis patch reorganises the return value convention of the CCID TX sending\nfunction, to permit more flexible schemes, as required by subsequent patches.\n\nCurrently the convention is \n * values \u003c 0     mean error,\n * a value \u003d\u003d 0   means \"send now\", and\n * a value x \u003e 0  means \"send in x milliseconds\".\n\nThe patch provides symbolic constants and a function to interpret return values.\nIn addition, it caps the maximum positive return value to 0xFFFF milliseconds,\ncorresponding to 65.535 seconds. \n\nThis is possible since in CCID-3 the maximum inter-packet gap is t_mbi \u003d 64 sec.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "c8bf462bc567c3dcb083ff95cc13060dd06f138c",
      "tree": "c612129b23db7bb8613fff4c6e2d51301bc77f65",
      "parents": [
        "5a577b488f687f339dea62e7bb4f4c5793ad523f"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:37 2008 +0200"
      },
      "message": "dccp ccid-2: Separate option parsing from CCID processing\n\nThis patch replaces an almost identical replication of code: large parts\nof dccp_parse_options() re-appeared as ccid2_ackvector() in ccid2.c.\n\nApart from the duplication, this caused two more problems:\n 1. CCIDs should not need to be concerned with parsing header options;\n 2. one can not assume that Ack Vectors appear as a contiguous area within an\n    skb, it is legal to insert other options and/or padding in between. The\n    current code would throw an error and stop reading in such a case.\n\nThe patch provides a new data structure and associated list housekeeping.\n\nOnly small changes were necessary to integrate with CCID-2: data structure\ninitialisation, adapt list traversal routine, and add call to the provided\ncleanup routine.\n\nThe latter also lead to fixing the following BUG: CCID-2 so far ignored\nAck Vectors on all packets other than Ack/DataAck, which is incorrect,\nsince Ack Vectors can be present on any packet that has an Ack field.\n\nDetails:\n--------\n * received Ack Vectors are parsed by dccp_parse_options() alone, which passes\n   the result on to the CCID-specific routine ccid_hc_tx_parse_options();\n * CCIDs interested in using/decoding Ack Vector information will add code\n   to fetch parsed Ack Vectors via this interface;\n * a data structure, `struct dccp_ackvec_parsed\u0027 is provided as interface;\n * this structure arranges Ack Vectors of the same skb into a FIFO order;\n * a doubly-linked list is used to keep the required FIFO code small.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "5a577b488f687f339dea62e7bb4f4c5793ad523f",
      "tree": "7be4c34a22de21e66f33d5b4bdfc2eb547f67091",
      "parents": [
        "c2f42077bd06f300ae959204f3c007f820f5e769"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:37 2008 +0200"
      },
      "message": "dccp ccid-2: Remove old infrastructure\n\nThis removes\n * functions for which updates have been provided in the preceding patches and\n * the @av_vec_len field - it is no longer necessary since the buffer length is\n   now always computed dynamically;\n * conditional debugging code (CONFIG_IP_DCCP_ACKVEC).\n\nThe reason for removing the conditional debugging code is that Ack Vectors are \nan almost inevitable necessity - RFC 4341 says that for CCID-2, Ack Vectors must\nbe used. Furthermore, the code would be only interesting for coding - after some \nextensive testing with this patch set, having the debug code around is no longer\nof real help.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "c2f42077bd06f300ae959204f3c007f820f5e769",
      "tree": "7e3d9c3c8b18f18b35a6ce19d84467ae8711521c",
      "parents": [
        "283fb4a5f39d1521d53e1044bff0ba2654acf145"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:37 2008 +0200"
      },
      "message": "dccp ccid-2: Schedule Sync as out-of-band mechanism\n\nThe problem with Ack Vectors is that \n\n  i) their length is variable and can in principle grow quite large,\n ii) it is hard to predict exactly how large they will be.\n\nDue to the second point it seems not a good idea to reduce the MPS; in\nparticular when on average there is enough room for the Ack Vector and an\nincrease in length is momentarily due to some burst loss, after which the\nAck Vector returns to its normal/average length.\n\nThe solution taken by this patch is to subtract a minimum-expected Ack Vector\nlength from the MPS (previous patch), and to defer any larger Ack Vectors onto\na separate Sync - but only if indeed there is no space left on the skb.\n\nThis patch provides the infrastructure to schedule Sync-packets for transporting\n(urgent) out-of-band data. Its signalling is quicker than scheduling an Ack, since\nit does not need to wait for new application data.\n\nIt can thus serve other parts of the DCCP code as well.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "283fb4a5f39d1521d53e1044bff0ba2654acf145",
      "tree": "e813566d7b3530702410d470f85cf2162e443bb3",
      "parents": [
        "e28fe59f9c82ef55fc9b55e745531c9fed86f00a"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:37 2008 +0200"
      },
      "message": "dccp ccid-2: Consolidate Ack-Vector processing within main DCCP module\n\nThis aggregates Ack Vector processing (handling input and clearing old state)\ninto one function, for the following reasons and benefits:\n * all Ack Vector-specific processing is now in one place;\n * duplicated code is removed;\n * ensuring sanity: from an Ack Vector point of view, it is better to clear the\n                    old state first before entering new state;\n * Ack Event handling happens mostly within the CCIDs, not the main DCCP module.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e  \n"
    },
    {
      "commit": "e28fe59f9c82ef55fc9b55e745531c9fed86f00a",
      "tree": "3b469804ebeb8e772c9f935015381706495cdd18",
      "parents": [
        "68b1de15765f2b0e0925e692dab2b2fa2abd93fc"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:37 2008 +0200"
      },
      "message": "dccp ccid-2: Update code for the Ack Vector input/registration routine\n\nThis patch uupdates the code which registers new packets as received, using the\nnew circular buffer interface. It contributes a new algorithm which \n\t* supports both tail/head pointers and buffer wrap-around and\n\t* deals with overflow (head/tail move in lock-step).\n\nThe updated code is also partioned differently, into\n\t1. dealing with the empty buffer,\n\t2. adding new packets into non-empty buffer,\n\t3. reserving space when encountering a `hole\u0027 in the sequence space,\n\t4. updating old state and deciding when old state is irrelevant.\n\nProtection against large burst losses: With regard to (3), it is too costly to\nreserve space when there are large bursts of losses. When bursts get too large,\nthe code does no longer reserve space and just fills in cells normally. This\nmeasure reduces space consumption by a factor of 63.\n\nThe code reuses in part the previous implementation by Arnaldo de Melo.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "68b1de15765f2b0e0925e692dab2b2fa2abd93fc",
      "tree": "893594a088a7d9ba4bff6c1820ec014740ca62bf",
      "parents": [
        "d7dc7e5f49299739e610ea8febf9ea91a4dc1ae9"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:37 2008 +0200"
      },
      "message": "dccp ccid-2: Algorithm to update buffer state\n\nThis provides a routine to consistently update the buffer state when the\npeer acknowledges receipt of Ack Vectors; updating state in the list of Ack\nVectors as well as in the circular buffer.\n\nWhile based on RFC 4340, several additional (and necessary) precautions were\nadded to protect the consistency of the buffer state. These additions are\nessential, since analysis and experience showed that the basic algorithm was\ninsufficient for this task (which lead to problems that were hard to debug).\n\nThe algorithm now\n * deals with HC-sender acknowledging to HC-receiver and vice versa,\n * keeps track of the last unacknowledged but received seqno in tail_ackno,\n * has special cases to reset the overflow condition when appropriate,\n * is protected against receiving older information (would mess up buffer state).\n\nNote: The older code performed an unnecessary step, where the sender cleared\nAck Vector state by parsing the Ack Vector received by the HC-receiver. Doing\nthis was entirely redundant, since\n * the receiver always puts the full acknowledgment window (groups 2,3 in 11.4.2)\n   into the Ack Vectors it sends; hence the HC-receiver is only interested in the\n   highest state that the HC-sender received;\n * this means that the acknowledgment number on the (Data)Ack from the HC-sender\n   is sufficient; and work done in parsing earlier state is not necessary, since\n   the later state subsumes the  earlier one (see also RFC 4340, A.4).\nThis older interface (dccp_ackvec_parse()) is therefore removed.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "d7dc7e5f49299739e610ea8febf9ea91a4dc1ae9",
      "tree": "30a2e1c3b9e99b1a386ca99efa71769415437885",
      "parents": [
        "4829007c7bc689cbc290fc09eccbe90bd52c2a5e"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:36 2008 +0200"
      },
      "message": "dccp ccid-2: Implementation of circular Ack Vector buffer with overflow handling\n\nThis completes the implementation of a circular buffer for Ack Vectors, by \nextending the current (linear array-based) implementation.  The changes are:\n\n (a) An `overflow\u0027 flag to deal with the case of overflow. As before, dynamic\n     growth of the buffer will not be supported; but code will be added to deal\n     robustly with overflowing Ack Vector buffers.\n\n (b) A `tail_seqno\u0027 field. When naively implementing the algorithm of Appendix A\n     in RFC 4340, problems arise whenever subsequent Ack Vector records overlap,\n     which can bring the entire run length calculation completely out of synch.\n     (This is documented on http://www.erg.abdn.ac.uk/users/gerrit/dccp/notes/\\\n                                             ack_vectors/tracking_tail_ackno/ .)\n (c) The buffer lengthi is now computed dynamically (i.e. current fill level),\n     as the span between head to tail.\n\nAs a result, dccp_ackvec_pending() is now simpler - the #ifdef is no longer \nnecessary since buf_empty is always true when IP_DCCP_ACKVEC is not configured.\n\nNote on overflow handling: \n-------------------------\n The Ack Vector code previously simply started to drop packets when the\n Ack Vector buffer overflowed. This means that the userspace application\n will not be able to receive, only because of an Ack Vector storage problem.\n \n Furthermore, overflow may be transient, so that applications may later\n recover from the overflow. Recovering from dropped packets is more difficult\n (e.g. video key frames).\n \n Hence the patch uses a different policy: when the buffer overflows, the oldest\n entries are subsequently overwritten. This has a higher chance of recovery.\n Details are on http://www.erg.abdn.ac.uk/users/gerrit/dccp/notes/ack_vectors/\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "4829007c7bc689cbc290fc09eccbe90bd52c2a5e",
      "tree": "f8f2058b9db8e8df7b4cb2f1f850ca3115e5c58f",
      "parents": [
        "ff49e27089ec363b7fc3849504e0435d447ab18a"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:36 2008 +0200"
      },
      "message": "dccp ccid-2: Separate internals of Ack Vectors from option-parsing code\n\nThis patch\n * separates Ack Vector housekeeping code from option-insertion code;\n * shifts option-specific code from ackvec.c into options.c;\n * introduces a dedicated routine to take care of the Ack Vector records;\n * simplifies the dccp_ackvec_insert_avr() routine: the BUG_ON was redundant, \n   since the list is automatically arranged in descending order of ack_seqno.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "ff49e27089ec363b7fc3849504e0435d447ab18a",
      "tree": "eb6f7d4ec829f2c0ca206c0769c15c08e592743c",
      "parents": [
        "b8c6bcee1dbc1aadcd67af998e414e73fa166a7d"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:36 2008 +0200"
      },
      "message": "dccp ccid-2: Ack Vector interface clean-up\n\nThis patch brings the Ack Vector interface up to date. Its main purpose is\nto lay the basis for the subsequent patches of this set, which will use the\nnew data structure fields and routines.\n\nThere are no real algorithmic changes, rather an adaptation:\n\n (1) Replaced the static Ack Vector size (2) with a #define so that it can\n     be adapted (with low loss / Ack Ratio, a value of 1 works, so 2 seems\n     to be sufficient for the moment) and added a solution so that computing\n     the ECN nonce will continue to work - even with larger Ack Vectors.\n\n (2) Replaced the #defines for Ack Vector states with a complete enum.\n\n (3) Replaced #defines to compute Ack Vector length and state with general\n     purpose routines (inlines), and updated code to use these.\n\n (4) Added a `tail\u0027 field (conversion to circular buffer in subsequent patch).\n\n (5) Updated the (outdated) documentation for Ack Vector struct.\n\n (6) All sequence number containers now trimmed to 48 bits.\n\n (7) Removal of unused bits:\n     * removed dccpav_ack_nonce from struct dccp_ackvec, since this is already\n       redundantly stored in the `dccpavr_ack_nonce\u0027 (of Ack Vector record);\n     * removed Elapsed Time for Ack Vectors (it was nowhere used);\n     * replaced semantics of dccpavr_sent_len with dccpavr_ack_runlen, since\n       the code needs to be able to remember the old run length; \n     * reduced the de-/allocation routines (redundant / duplicate tests).\n\n\nJustification for removing Elapsed Time information [can be removed]:\n---------------------------------------------------------------------\n 1. The Elapsed Time information for Ack Vectors was nowhere used in the code.\n 2. DCCP does not implement rate-based pacing of acknowledgments. The only\n    recommendation for always including Elapsed Time is in section 11.3 of\n    RFC 4340: \"Receivers that rate-pace acknowledgements SHOULD [...]\n    include Elapsed Time options\". But such is not the case here.\n 3. It does not really improve estimation accuracy. The Elapsed Time field only\n    records the time between the arrival of the last acknowledgeable packet and\n    the time the Ack Vector is sent out. Since Linux does not (yet) implement\n    delayed Acks, the time difference will typically be small, since often the\n    arrival of a data packet triggers sending feedback at the HC-receiver.\n\n\nJustification for changes in de-/allocation routines [can be removed]:\n----------------------------------------------------------------------\n  * INIT_LIST_HEAD in dccp_ackvec_record_new was redundant, since the list\n    pointers were later overwritten when the node was added via list_add();\n  * dccp_ackvec_record_new() was called in a single place only;\n  * calls to list_del_init() before calling dccp_ackvec_record_delete() were\n    redundant, since subsequently the entire element was k-freed;\n  * since all calls to dccp_ackvec_record_delete() were preceded to a call to\n    list_del_init(), the WARN_ON test would never evaluate to true;\n  * since all calls to dccp_ackvec_record_delete() were made from within\n    list_for_each_entry_safe(), the test for avr \u003d\u003d NULL was redundant;\n  * list_empty() in ackvec_free was redundant, since the same condition is\n    embedded in the loop condition of the subsequent list_for_each_entry_safe().\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "b8c6bcee1dbc1aadcd67af998e414e73fa166a7d",
      "tree": "ac391375ffdbb5c3617fcb8672b83c6eff72bbe6",
      "parents": [
        "a9c1656ab10480cc6f6d34f193bcde2729fe8037"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:36 2008 +0200"
      },
      "message": "dccp: Reduce noise in output and convert to ktime_t\n\nThis fixes the problem that dccp_probe output can grow quite large without\napparent benefit (many identical data points), creating huge files (up to\nover one Gigabyte for a few minutes\u0027 test run) which are very hard to \npost-process (in one instance it got so bad that gnuplot ate up all memory\nplus swap).\n\nThe cause for the problem is that the kprobe is inserted into dccp_sendmsg(),\nwhich can be called in a polling-mode (whenever the TX queue is full due to\ncongestion-control issues, EAGAIN is returned). This creates many very \nsimilar data points, i.e. the increase of processing time does not increase\nthe quality/information of the probe output.\n\nThe fix is to attach the probe to a different function -- write_xmit was\nchosen since it gets called continually (both via userspace and timer);\nan input-path function would stop sampling as soon as the other end stops\nsending feedback.\n\nFor comparison the output file sizes for the same 20 second test\nrun over a lossy link:\n           * before / without patch:  118   Megabytes\n           * after  / with patch:       1.2 Megabytes\nand there was much less noise in the output.     \n\nTo allow backward compatibility with scripts that people use, the now-unused\n`size\u0027 field in the output has been replaced with the CCID identifier. This\nalso serves for future compatibility - support for CCID2 is work in progress\n(depends on the still unfinished SRTT/RTTVAR updates).\n\nWhile at it, the update to ktime_t was also performed.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nAcked-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\n"
    },
    {
      "commit": "a9c1656ab10480cc6f6d34f193bcde2729fe8037",
      "tree": "ec5f69d1d95fa718d6f930b4d42060918ab64e5c",
      "parents": [
        "bfbddd085a5bced6efb9e1bc4d029438f9639784"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:35 2008 +0200"
      },
      "message": "dccp: Merge now-reduced connect_init() function\n\nAfter moving the assignment of GAR/ISS from dccp_connect_init() to\ndccp_transmit_skb(), the former function becomes very small, so that\na merger with dccp_connect() suggests itself.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "bfbddd085a5bced6efb9e1bc4d029438f9639784",
      "tree": "2187b8a4a2d4864419bd5897ccfdff57a6bc3b48",
      "parents": [
        "2975abd251d795810932b20354729ba236d95bf9"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:35 2008 +0200"
      },
      "message": "dccp: Fix the adjustments to AWL and SWL\n\nThis fixes a problem and a potential loophole with regard to seqno/ackno\nvalidity: the problem is that the initial adjustments to AWL/SWL were\nonly performed at the begin of the connection, during the handshake.\n\nSince the Sequence Window feature is always greater than Wmin\u003d32 (7.5.2), \nit is however necessary to perform these adjustments at least for the first\nW/W\u0027 (variables as per 7.5.1) packets in the lifetime of a connection.\n\nThis requirement is complicated by the fact that W/W\u0027 can change at any time\nduring the lifetime of a connection.\n\nTherefore the consequence is to perform this safety check each time SWL/AWL\nare updated.\n\nA second problem solved by this patch is that the remote/local Sequence Window\nfeature values (which set the bounds for AWL/SWL/SWH) are undefined until the\nfeature negotiation has completed.\n\nDuring the initial handshake we have more stringent sequence number protection,\nthe changes added by this patch effect that {A,S}W{L,H} are within the correct\nbounds at the instant that feature negotiation completes (since the SeqWin\nfeature activation handlers call dccp_update_gsr/gss()). \n\nA detailed rationale is below -- can be removed from the commit message.\n\n\n1. Server sequence number checks during initial handshake\n---------------------------------------------------------\nThe server can not use the fields of the listening socket for seqno/ackno checks\nand thus needs to store all relevant information on a per-connection basis on\nthe dccp_request socket. This is a size-constrained structure and has currently\nonly ISS (dreq_iss) and ISR (dreq_isr) defined.\nAdding further fields (SW{L,H}, AW{L,H}) would increase the size of the struct\nand it is questionable whether this will have any practical gain. The currently\nimplemented solution is as follows.\n * receiving first Request: dccp_v{4,6}_conn_request sets \n                            ISR :\u003d P.seqno, ISS :\u003d dccp_v{4,6}_init_sequence()\n\n * sending first Response:  dccp_v{4,6}_send_response via dccp_make_response()\t\n                            sets P.seqno :\u003d ISS, sets P.ackno :\u003d ISR\n\n * receiving retransmitted Request: dccp_check_req() overrides ISR :\u003d P.seqno\n\n * answering retransmitted Request: dccp_make_response() sets ISS +\u003d 1,\n                                    otherwise as per first Response\n\n * completing the handshake: succeeds in dccp_check_req() for the first Ack\n                             where P.ackno \u003d\u003d ISS (P.seqno is not tested)\n\n * creating child socket: ISS, ISR are copied from the request_sock\n\nThis solution will succeed whenever the server can receive the Request and the\nsubsequent Ack in succession, without retransmissions. If there is packet loss,\nthe client needs to retransmit until this condition succeeds; it will otherwise\neventually give up. Adding further fields to the request_sock could increase\nthe robustness a bit, in that it would make possible to let a reordered Ack\n(from a retransmitted Response) pass. The argument against such a solution is\nthat if the packet loss is not persistent and an Ack gets through, why not\nwait for the one answering the original response: if the loss is persistent, it\nis probably better to not start the connection in the first place.\n\nLong story short: the present design (by Arnaldo) is simple and will likely work\njust as well as a more complicated solution. As a consequence, {A,S}W{L,H} are\nnot needed until the moment the request_sock is cloned into the accept queue.\n\nAt that stage feature negotiation has completed, so that the values for the local\nand remote Sequence Window feature (7.5.2) are known, i.e. we are now in a better\nposition to compute {A,S}W{L,H}.\n\n\n2. Client sequence number checks during initial handshake\n---------------------------------------------------------\nUntil entering PARTOPEN the client does not need the adjustments, since it \nconstrains the Ack window to the packet it sent.\n\n * sending first Request: dccp_v{4,6}_connect() choose ISS, \n                          dccp_connect() then sets GAR :\u003d ISS (as per 8.5),\n\t\t\t  dccp_transmit_skb() (with the previous bug fix) sets\n\t\t\t         GSS :\u003d ISS, AWL :\u003d ISS, AWH :\u003d GSS\n * n-th retransmitted Request (with previous patch):\n\t                  dccp_retransmit_skb() via timer calls\n\t\t\t  dccp_transmit_skb(), which sets GSS :\u003d ISS+n\n                          and then AWL :\u003d ISS, AWH :\u003d ISS+n\n\t                  \n * receiving any Response: dccp_rcv_request_sent_state_process() \n\t                   -- accepts packet if AWL \u003c\u003d P.ackno \u003c\u003d AWH;\n\t\t\t   -- sets GSR \u003d ISR \u003d P.seqno\n\n * sending the Ack completing the handshake: dccp_send_ack() calls \n                           dccp_transmit_skb(), which sets GSS +\u003d 1\n\t\t\t   and AWL :\u003d ISS, AWH :\u003d GSS\n\t\t\t   \n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "2975abd251d795810932b20354729ba236d95bf9",
      "tree": "343733773977a67eb5aa7692ff301466125871e8",
      "parents": [
        "d0995e6a9e3328cdc76b4c45882dee118284f960"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:35 2008 +0200"
      },
      "message": "dccp: Schedule an Ack when receiving timestamps\n\nThis schedules an Ack when receiving a timestamp, exploiting the\nexisting inet_csk_schedule_ack() function, saving one case in the\n`dccp_ack_pending()\u0027 function.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "d0995e6a9e3328cdc76b4c45882dee118284f960",
      "tree": "ee9e65f8ed5aa6b51228394e0241126ed04a85ea",
      "parents": [
        "5fe94963a163fecc34b7b51bf2ca525f9f50d7bf"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:35 2008 +0200"
      },
      "message": "dccp ccid-3: Remove dead states\n\nThis patch is thanks to an investigation by Leandro Sales de Melo and his\ncolleagues. They worked out two state diagrams which highlight the fact that\nthe xxx_TERM states in CCID-3/4 are in fact not necessary.\n\nAnd this can be confirmed by in turn looking at the code: the xxx_TERM states\nare only ever set in ccid3_hc_{rx,tx}_exit(). These two functions are part\nof the following call chain:\n\n * ccid_hc_{tx,rx}_exit() are called from ccid_delete() only;\n * ccid_delete() invokes ccid_hc_{tx,rx}_exit() in the way of a destructor:\n   after calling ccid_hc_{tx,rx}_exit(), the CCID is released from memory;\n * ccid_delete() is in turn called only by ccid_hc_{tx,rx}_delete();\n * ccid_hc_{tx,rx}_delete() is called only if \n   - feature negotiation failed   (dccp_feat_activate_values()),\n   - when changing the RX/TX CCID (to eject the current CCID),\n   - when destroying the socket   (in dccp_destroy_sock()).\n\nIn other words, when CCID-3 sets the state to xxx_TERM, it is at a time where\nno more processing should be going on, hence it is not necessary to introduce\na dedicated exit state - this is implicit when unloading the CCID.\n\nThe patch removes this state, one switch-statement collapses as a result.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "5fe94963a163fecc34b7b51bf2ca525f9f50d7bf",
      "tree": "b21a61e047541d39bbe6940ef9531a64c074b40e",
      "parents": [
        "c506d91d9ab7681e058afcd750e9118c6cdaabc1"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:35 2008 +0200"
      },
      "message": "dccp ccid-3: Remove duplicate documentation\n\nThis removes RX-socket documentation which is either duplicate or non-existent.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "c506d91d9ab7681e058afcd750e9118c6cdaabc1",
      "tree": "09d4061932f1f76a6bba7423c9eeabaef27d0960",
      "parents": [
        "f10ecaee6dc2c6d56783462b2a82e98bc81b55f4"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:35 2008 +0200"
      },
      "message": "dccp: Unused argument in CCID tx function\n\nThis removes the argument `more\u0027 from ccid_hc_tx_packet_sent, since it was\nnowhere used in the entire code.\n\n(Anecdotally, this argument was not even used in the original KAME code where\n the function originally came from; compare the variable moreToSend in the\n freebsd61-dccp-kame-28.08.2006.patch now maintained by Emmanuel Lochin.)\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "f10ecaee6dc2c6d56783462b2a82e98bc81b55f4",
      "tree": "d8c8049b47c2a8bfa74a6308da21c6d873cb9131",
      "parents": [
        "ce177ae2e6b196659e93a9408cc1f5f13f206d13"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:34 2008 +0200"
      },
      "message": "dccp: Replace magic CCID-specific numbers by symbolic constants\n\nThe constants DCCPO_{MIN,MAX}_CCID_SPECIFIC are nowhere used in the code, but\ninstead for the CCID-specific options numbers are used.\n\nThis patch unifies the use of CCID-specific option numbers, by adding symbolic\nnames reflecting the definitions in RFC 4340, 10.3.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "ce177ae2e6b196659e93a9408cc1f5f13f206d13",
      "tree": "4ecd5266014cb5214c9e4955e753331f9fb23645",
      "parents": [
        "535c55df136ad2783d444e54d518a8fae8bdbf79"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:34 2008 +0200"
      },
      "message": "dccp ccid-3: Remove redundant \u0027options_received\u0027 struct\n\nThe `options_received\u0027 struct is redundant, since it re-duplicates the existing\n`p\u0027 and `x_recv\u0027 fields. This patch removes the sub-struct and migrates the\nformat conversion operations (cf. below) to ccid3_hc_tx_parse_options().\n\n                     Why the fields are redundant\n                     ----------------------------\nThe Loss Event Rate p and the Receive Rate x_recv are initially 0 when first \nloading CCID-3, as ccid_new() zeroes out the entire ccid3_hc_tx_sock. \n\nWhen Loss Event Rate or Receive Rate options are received, they are stored by\nccid3_hc_tx_parse_options() into the fields `ccid3or_loss_event_rate\u0027 and\n`ccid3or_receive_rate\u0027 of the sub-struct `options_received\u0027 in ccid3_hc_tx_sock.\n\nAfter parsing (considering only the established state - dccp_rcv_established()),\nthe packet is passed on to ccid_hc_tx_packet_recv(). This calls the CCID-3\nspecific routine ccid3_hc_tx_packet_recv(), which performs the following copy\noperations between fields of ccid3_hc_tx_sock:\n\n * hctx-\u003eoptions_received.ccid3or_receive_rate is copied into hctx-\u003ex_recv,\n   after scaling it for fixpoint arithmetic, by 2^64;\n * hctx-\u003eoptions_received.ccid3or_loss_event_rate is copied into hctx-\u003ep,\n   considering the above special cases; in addition, a value of 0 here needs to\n   be mapped into p\u003d0 (when no Loss Event Rate option has been received yet).\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "535c55df136ad2783d444e54d518a8fae8bdbf79",
      "tree": "8f7b18bc7b82270e78061c4c22bf722534b743a1",
      "parents": [
        "3306c781ff13aea89606435c134ec84e3c608681"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:34 2008 +0200"
      },
      "message": "dccp tfrc/ccid-3: Computing Loss Rate from Loss Event Rate\n\nThis adds a function to take care of the following cases occurring in the\ncomputation of the Loss Rate p:\n\n * 1/(2^32-1) is mapped into 0% as per RFC 4342, 8.5;\n * 1/0        is mapped into the maximum of 100%;\n * we want to avoid that p \u003d 1/x is rounded down to 0 when x is very large,\n   since this means accidentally re-entering slow-start (indicated by p\u003d\u003d0).\n\nIn the last case, the minimum-resolution value of p is returned.\n\nFurthermore, a bug in ccid3_hc_rx_getsockopt is fixed (1/0 was mapped into ~0U),\nwhich now allows to consistently print the scaled p-values as\n\n        printf(\"Loss Event Rate \u003d %u.%04u %%\\n\", rx_info.tfrcrx_p / 10000, \n                                                 rx_info.tfrcrx_p % 10000);\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "3306c781ff13aea89606435c134ec84e3c608681",
      "tree": "281cfebaf9504e4747938509efca0cc255b3372f",
      "parents": [
        "47a61e7b433a014296971ea1226eb1adb6310ab4"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:34 2008 +0200"
      },
      "message": "dccp: Add packet type information to CCID-specific option parsing\n\nThis patch ...\n 1. adds packet type information to ccid_hc_{rx,tx}_parse_options(). This is \n    necessary, since table 3 in RFC 4340, 5.8 leaves it to the CCIDs to state\n    which options may (not) appear on what packet type.\n \n 2. adds such a check for CCID-3\u0027s {Loss Event, Receive} Rate as specified in\n    RFC 4340 8.3 (\"Receive Rate options MUST NOT be sent on DCCP-Data packets\")\n    and 8.5 (\"Loss Event Rate options MUST NOT be sent on DCCP-Data packets\").\n\n 3. removes an unused argument `idx\u0027 from ccid_hc_{rx,tx}_parse_options(). This\n    is also no longer necessary, since the CCID-specific option-parsing routines\n    are passed every single parameter of the type-length-value option encoding.\n\nAlso added documentation and made argument naming scheme consistent.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "47a61e7b433a014296971ea1226eb1adb6310ab4",
      "tree": "16207d30fa2434c61d3fcb52be79c8c4fbd38770",
      "parents": [
        "63b3a73bb85daf441f964aaf9b3fc89be4209c23"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:34 2008 +0200"
      },
      "message": "dccp ccid-3: Simplify and consolidate tx_parse_options\n\nThis simplifies and consolidates the TX option-parsing code:\n\n 1. The Loss Intervals option is not currently used, so dead code related to\n    this option is removed. I am aware of no plans to support the option, but\n    if someone wants to implement it (e.g. for inter-op tests), it is better\n    to start afresh than having to also update currently unused code.\n\n 2. The Loss Event and Receive Rate options have a lot of code in common (both\n    are 32 bit, both have same length etc.), so this is consolidated.\n\n 3. The test against GSR is not necessary, because\n    - on first loading CCID3, ccid_new() zeroes out all fields in the socket; \n    - ccid3_hc_tx_packet_recv() treats 0 and ~0U equivalently, due to\n\n\tpinv \u003d opt_recv-\u003eccid3or_loss_event_rate;\n\tif (pinv \u003d\u003d ~0U || pinv \u003d\u003d 0)\n\t\thctx-\u003ep \u003d 0;\n\n    - as a result, the sequence number field is removed from opt_recv.\n \nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "63b3a73bb85daf441f964aaf9b3fc89be4209c23",
      "tree": "6ac875b3971ff8299106ca6b878fc56d5cd77e84",
      "parents": [
        "de6f2b59e5cd15a8772adb732a1d80e141a77115"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:34 2008 +0200"
      },
      "message": "dccp ccid-3: Remove ugly RTT-sampling history lookup\n\nThis removes the RTT-sampling function tfrc_tx_hist_rtt(), since\n\n 1. it suffered from complex passing of return values (the return value both\n    indicated successful lookup while the value doubled as RTT sample);\n\n 2. when for some odd reason the sample value equalled 0, this triggered a bug\n    warning about \"bogus Ack\", due to the ambiguity of the return value;\n\n 3. on a passive host which has not sent anything the TX history is empty and\n    thus will lead to unwanted \"bogus Ack\" warnings such as\n    ccid3_hc_tx_packet_recv: server(e7b7d518): DATAACK with bogus ACK-28197148\n    ccid3_hc_tx_packet_recv: server(e7b7d518): DATAACK with bogus ACK-26641606.\n\nThe fix is to replace the implicit encoding by performing the steps manually.\t\t\t\t\t       \n\nFurthermore, the \"bogus Ack\" warning has been removed, since it can actually be\ntriggered due to several reasons (network reordering, old packet, (3) above),\nhence it is not very useful.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "de6f2b59e5cd15a8772adb732a1d80e141a77115",
      "tree": "3ed9cb3498826675d4a56896fde7d2520f9aa122",
      "parents": [
        "b2e317f4b5ae73733963c702fae0f246d234100b"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:33 2008 +0200"
      },
      "message": "dccp ccid-3: Bug fix for the inter-packet scheduling algorithm\n\nThis fixes a subtle bug in the calculation of the inter-packet gap and shows\nthat t_delta, as it is currently used, is not needed. And hence replaced.\n\nThe algorithm from RFC 3448, 4.6 below continually computes a send time t_nom,\nwhich is initialised with the current time t_now; t_gran \u003d 1E6 / HZ specifies\nthe scheduling granularity, s the packet size, and X the sending rate:\n\n  t_distance \u003d t_nom - t_now;\t\t// in microseconds\n  t_delta    \u003d min(t_ipi, t_gran) / 2;\t// `delta\u0027 parameter in microseconds\n\n  if (t_distance \u003e\u003d t_delta) {\n\treschedule after (t_distance / 1000) milliseconds;\n  } else {\n  \tt_ipi  \u003d s / X;\t\t\t// inter-packet interval in usec\n\tt_nom +\u003d t_ipi;\t\t\t// compute the next send time\n\tsend packet now;\n  }\n\n\n1) Description of the bug\n-------------------------\nRescheduling requires a conversion into milliseconds, due to this call chain:\n\n * ccid3_hc_tx_send_packet() returns a timeout in milliseconds,\n * this value is converted by msecs_to_jiffies() in dccp_write_xmit(),\n * and finally used as jiffy-expires-value for sk_reset_timer().\n\nThe highest jiffy resolution with HZ\u003d1000 is 1 millisecond, so using a higher\ngranularity does not make much sense here.\n\nAs a consequence, values of t_distance \u003c 1000 are truncated to 0. This issue \nhas so far been resolved by using instead\n\n  if (t_distance \u003e\u003d t_delta + 1000)\n\treschedule after (t_distance / 1000) milliseconds;\n\nThe bug is in artificially inflating t_delta to t_delta\u0027 \u003d t_delta + 1000. This\nis unnecessarily large, a more adequate value is t_delta\u0027 \u003d max(t_delta, 1000).\n\n\n2) Consequences of using the corrected t_delta\u0027\n-----------------------------------------------\nSince t_delta \u003c\u003d t_gran/2 \u003d 10^6/(2*HZ), we have t_delta \u003c\u003d 1000 as long as\nHZ \u003e\u003d 500. This means that t_delta\u0027 \u003d max(1000, t_delta) is constant at 1000.\n\nOn the other hand, when using a coarse HZ value of HZ \u003c 500, we have three\nsub-cases that can all be reduced to using another constant of t_gran/2.\n\n (a) The first case arises when t_ipi \u003e t_gran. Here t_delta\u0027 is the constant\n     t_delta\u0027 \u003d max(1000, t_gran/2) \u003d t_gran/2.\n\n (b) If t_ipi \u003c\u003d 2000 \u003c t_gran \u003d 10^6/HZ usec, then t_delta \u003d t_ipi/2 \u003c\u003d 1000,\n     so that t_delta\u0027 \u003d max(1000, t_delta) \u003d 1000 \u003c t_gran/2. \n\n (c) If 2000 \u003c t_ipi \u003c\u003d t_gran, we have t_delta\u0027 \u003d max(t_delta, 1000) \u003d t_ipi/2.\n\nIn the second and third cases we have delay values less than t_gran/2, which is\nin the order of less than or equal to half a jiffy. \n\nHow these are treated depends on how fractions of a jiffy are handled: they\nare either always rounded down to 0, or always rounded up to 1 jiffy (assuming\nnon-zero values). In both cases the error is on average in the order of 50%.\n\nThus we are not increasing the error when in the second/third case we replace\na value less than t_gran/2 with 0, by setting t_delta\u0027 to the constant t_gran/2.\n\n\n3) Summary\n----------\nFixing (1) and considering (2), the patch replaces t_delta with a constant,\nwhose value depends on CONFIG_HZ, changing the above algorithm to:\n \n  if (t_distance \u003e\u003d t_delta\u0027)\n\treschedule after (t_distance / 1000) milliseconds;\n\nwhere t_delta\u0027 \u003d 10^6/(2*HZ) if HZ \u003c 500, and t_delta\u0027 \u003d 1000 otherwise.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "b2e317f4b5ae73733963c702fae0f246d234100b",
      "tree": "0c174ee4e9ba342f4bf25c84950582b5a738dcf2",
      "parents": [
        "842d1ef14ff37e9611eab479f31a0d74c1a5c4c0"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:33 2008 +0200"
      },
      "message": "dccp ccid-3: No more CCID control blocks in LISTEN state\n\nThe CCIDs are activated as last of the features, at the end of the handshake,\nwere the LISTEN state of the master socket is inherited into the server\nstate of the child socket. Thus, the only states visible to CCIDs now are\nOPEN/PARTOPEN, and the closing states.\n\nThis allows to remove tests which were previously necessary to protect\nagainst referencing a socket in the listening state (in CCID3), but which\nnow have become redundant.\n\nAs a further byproduct of enabling the CCIDs only after the connection has been\nfully established, several typecast-initialisations of ccid3_hc_{rx,tx}_sock\ncan now be eliminated:\n * the CCID is loaded, so it is not necessary to test if it is NULL,\n * if it is possible to load a CCID and leave the private area NULL, then this\n    is a bug, which should crash loudly - and earlier,\n * the test for state\u003d\u003dOPEN || state\u003d\u003dPARTOPEN now reduces only to the closing\n   phase (e.g. when the node has received an unexpected Reset).\t\t  \n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nAcked-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\n"
    },
    {
      "commit": "842d1ef14ff37e9611eab479f31a0d74c1a5c4c0",
      "tree": "c6b6a6a26bb20ad0f167bb65915bfd6590b1aae8",
      "parents": [
        "1fb87509606cb19f5f603e54c28af7da149049f3"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:33 2008 +0200"
      },
      "message": "dccp ccid-3: Remove ccid3hc{tx,rx}_ prefixes\n\nThis patch does the same for CCID-3 as the previous patch for CCID-2:\n\n        s#ccid3hctx_##g;\n        s#ccid3hcrx_##g;\n\nplus manual editing to retain consistency.\n\nPlease note: expanded the fields of the `struct tfrc_tx_info\u0027 in the hc_tx_sock,\nsince using short #define identifiers is not a good idea. The only place where\nthis embedded struct was used is ccid3_hc_tx_getsockopt().\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "1fb87509606cb19f5f603e54c28af7da149049f3",
      "tree": "64ee5df4e564240effaee323f576443c87d8e5e8",
      "parents": [
        "88ddac513a4e7e04234214b600401ec22abfbb46"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:33 2008 +0200"
      },
      "message": "dccp ccid-2: Remove ccid2hc{tx,rx}_ prefixes\n\nThis patch fixes two problems caused by the ubiquitous long \"hctx-\u003eccid2htx_\"\nand \"hcrx-\u003eccid2hcrx_\" prefixes:\n * code becomes hard to read;\n * multiple-line statements are almost inevitable even for simple expressions;\nThe prefixes are not really necessary (compare with \"struct tcp_sock\").\n\nThere had been previous discussion of this on dccp@vger, but so far this was\nnot followed up (most people agreed that the prefixes are too long). \n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nSigned-off-by: Leandro Melo de Sales \u003cleandroal@gmail.com\u003e\n"
    },
    {
      "commit": "88ddac513a4e7e04234214b600401ec22abfbb46",
      "tree": "ac13a63da90853390b17cff4f3f304d72a6d5513",
      "parents": [
        "55ebe3ab2d504bd3f3eeade0262826210019abda"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:33 2008 +0200"
      },
      "message": "dccp: Special case of the MPS for client-PARTOPEN with DataAcks\n\nTo increase robustness, it is necessary to resend Confirm feature-negotiation\noptions, even though the RFC does not mandate it. But feature negotiation\noptions can take (much) more room than the options on common DataAck packets.\n\nInstead of reducing the MPS always for a case which only applies to the three\nmessages send during initial handshake, this patch devises a special case:\n\n   if the payload length of the DataAck in PARTOPEN is too large, an Ack is sent\n   to carry the options, and the feature-negotiation list is then flushed.\n\n   This means that the server gets two Acks for one Response. If both Acks get\n   lost, it is probably better to restart the connection anyway and devising yet\n   another special-case does not seem worth the extra complexity.\n\nThe patch (over-)estimates the expected overhead to be 32*4 bytes -- commonly\nseen values were 20-90 bytes for initial feature-negotiation options. \n\nIt uses sizeof(u32) to mean \"aligned units of 4 bytes\". For consistency,\nanother use of sizeof is modified.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "55ebe3ab2d504bd3f3eeade0262826210019abda",
      "tree": "6ccef1eb2aad025faa3e878cc0cc7666085e9852",
      "parents": [
        "2faae5587f692fd5c79856ca4c4b90944ee0472a"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:33 2008 +0200"
      },
      "message": "dccp: Leave headroom for options when calculating the MPS\n\nThe Maximum Packet Size (MPS) is of interest for applications which want\nto transfer data, so it is only relevant to the data transfer phase of a\nconnection (unless one wants to send data on the DCCP-Request, but that is\nnot considered here).\n\nThe strategy chosen to deal with this requirement is to leave room for only \nsuch options that may appear on data packets.\n\nA special consideration applies to Ack Vectors: this is purely guesswork,\nsince these can have any length between 3 and 1020 bytes. The strategy\nchosen here is to subtract a configurable minimum, the value of 16 bytes\n(2 bytes for type/length plus 14 Ack Vector cells) has been found by \nexperimentatation. If people experience this as too much or too little,\nthis could later be turned into a Kconfig option.\t\n\nThere are currently no CCID-specific header options which may appear on data\npackets, hence it is not necessary to define a corresponding CCID field.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nAcked-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\n"
    },
    {
      "commit": "2faae5587f692fd5c79856ca4c4b90944ee0472a",
      "tree": "637536dff5a15b5196233f38066644d19f77f23e",
      "parents": [
        "4861a354430d2ea36847ef88086c7449b4f385b6"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:32 2008 +0200"
      },
      "message": "dccp ccid-2: Use feature-negotiation to report Ack Ratio changes\n\nThis uses the new feature-negotiation framework to signal Ack Ratio changes,\nas required by RFC 4341, sec. 6.1.2.\n\nThis raises some problems for CCID-2 since it can at the moment not cope\ngracefully with Ack Ratio of e.g. 2. A FIXME has thus been added which\nreverts to the existing policy of bypassing the Ack Ratio sysctl.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nAcked-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\n"
    },
    {
      "commit": "4861a354430d2ea36847ef88086c7449b4f385b6",
      "tree": "53a40f7f81c6f683b5c998f7a295de4bef2b5abf",
      "parents": [
        "624a965a93610152b10c73d050ed44812efa8abe"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:32 2008 +0200"
      },
      "message": "dccp: Support for exchanging of NN options in established state\n\nThis patch provides support for the reception of NN options in (PART)OPEN state. \n\nIt is a combination of change_recv() and confirm_recv(), specifically geared\ntowards receiving the `fast-path\u0027 NN options.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nAcked-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\n"
    },
    {
      "commit": "624a965a93610152b10c73d050ed44812efa8abe",
      "tree": "50ad65253183b9140ff6f8a3ef43cdeb1b8feb9f",
      "parents": [
        "76f738a7950b559a23ab3c692c99a02f35a54f7f"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:32 2008 +0200"
      },
      "message": "dccp: Support for the exchange of NN options in established state\n\nIn contrast to static feature negotiation at the begin of a connection, which\nestablishes the capabilities of both endpoints, this patch introduces support\nfor dynamic exchange of feature negotiation options.\n\nSuch a dynamic exchange is necessary in at least two cases:\n * CCID-2\u0027s Ack Ratio (RFC 4341, 6.1.2) which changes during the connection;\n * Sequence Window values that, as per RFC 4340, 7.5.2, should be sent \"as\n   as the connection progresses\".\n\nBoth are NN (non-negotiable) features. Hence dynamic feature \"negotiation\" is\ndistinguished from static/pre-connection negotiation by the following:\n * no new capabilities are negotiated (those that matter for the connection\n   are negotiated prior to setting up the connection, comparable to SIP);\n * features must be understood by each endpoint: as per RFC 4340, 6.4, \n   Sequence Window is \"Req\u0027d\" and Ack Ratio must be understood when CCID-2\n   is used as per the note underneath Table 4.\n\nThese characteristics are reflected in the implementation:\n * only NN options can be exchanged after connection setup;\n * NN options are activated directly after validating them. The rationale is\n   that a peer must accept every valid NN value (RFC 4340, 6.3.2), hence it\n   will either accept the value and send a \"Confirm R\", or it will send an\n   empty Confirm (which will reset the connection according to FN rules). \n * An Ack is scheduled directly after activation to accelerate communicating\n   the update to the peer.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nAcked-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\n"
    },
    {
      "commit": "76f738a7950b559a23ab3c692c99a02f35a54f7f",
      "tree": "51d8b63cc209821f73ae3af89a151d8185967c88",
      "parents": [
        "0a4822679d94e2b0117aeead06a19fad59533905"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:32 2008 +0200"
      },
      "message": "dccp: Debugging functions for feature negotiation\n\nSince all feature-negotiation processing now takes place in feat.c, functions\nfor producing verbose debugging output are concentrated there.\n\nNew functions to print out values, entry records, and options are provided,\nand also a macro is defined to not always have the function name in the\noutput line.\n\nThanks a lot to Wei Yongjun and Giuseppe Galeota for help with errors in an\nearlier revision of this patch.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nAcked-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\n"
    },
    {
      "commit": "0a4822679d94e2b0117aeead06a19fad59533905",
      "tree": "a7df5bd77ba005e8b5a2f6be44929470d5916a74",
      "parents": [
        "51c7d4fa2675c106a980ddcdbe308b54b5151945"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:32 2008 +0200"
      },
      "message": "dccp: Initialisation and type-checking of feature sysctls\n\nThis patch takes care of initialising and type-checking sysctls related to\nfeature negotiation. Type checking is important since some of the sysctls\nnow directly act on the feature-negotiation process.\n\nThe sysctls are initialised with the known default values for each feature.\nFor the type-checking the value constraints from RFC 4340 are used:\n\n * Sequence Window uses the specified Wmin\u003d32, the maximum is ulong (4 bytes),\n   tested and confirmed that it works up to 4294967295 - for Gbps speed;\n * Ack Ratio is between 0 .. 0xffff (2-byte unsigned integer);\n * CCIDs are between 0 .. 255;\n * request_retries, retries1, retries2 also between 0..255 for good measure;\n * tx_qlen is checked to be non-negative;\n * sync_ratelimit remains as before.\n\nFurther changes:\n----------------\nPerformed s@sysctl_dccp_feat@sysctl_dccp@g since the sysctls are now in feat.c.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nAcked-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\n"
    },
    {
      "commit": "51c7d4fa2675c106a980ddcdbe308b54b5151945",
      "tree": "0c1f2b1a3323582fb8629ba7826e08710271ed49",
      "parents": [
        "09856c108956c99088ead9267ccbd1dab77f7043"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:32 2008 +0200"
      },
      "message": "dccp: Implement both feature-local and feature-remote Sequence Window feature\n\nThis adds full support for local/remote Sequence Window feature, from which the \n  * sequence-number-validity (W) and \n  * acknowledgment-number-validity (W\u0027) windows \nderive as specified in RFC 4340, 7.5.3. \n\nSpecifically, the following changes are introduced:\n  * integrated new socket fields into dccp_sk;\n  * updated the update_gsr/gss routines with regard to these fields;\n  * updated handler code: the Sequence Window feature is located at the TX side,\n    so the local feature is meant if the handler-rx flag is false;\n  * the initialisation of `rcv_wnd\u0027 in reqsk is removed, since\n    - rcv_wnd is not used by the code anywhere;\n    - sequence number checks are not done in the LISTEN state (cf. 7.5.3);\n    - dccp_check_req checks the Ack number validity more rigorously;\n  * the `struct dccp_minisock\u0027 became empty and is now removed.\n\nUntil the handshake completes with activating negotiated values, the local/remote\nSequence-Window values are undefined and thus can not reliably be estimated.\nThis issue is addressed in a separate patch.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nAcked-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\n"
    },
    {
      "commit": "09856c108956c99088ead9267ccbd1dab77f7043",
      "tree": "39e29187c87429530f83d3aa672ec5b6214c8136",
      "parents": [
        "5d3dac267a7fd0811ec777e76a81f97f5cdcb395"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:31 2008 +0200"
      },
      "message": "dccp: Auto-load (when supported) CCID plugins for negotiation\n\nThis adds auto-loading of CCIDs (when module loading is enabled) \nfor the purpose of feature negotiation. \n\nThe problem with loading the CCIDs at the end of feature negotiation is\nthat this would happen in software interrupt context. Besides, if the host\nadvertises CCIDs during negotiation, it should have them ready to use, in\ncase an agreeing peer wants to use it for the connection.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nSigned-off-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\n"
    },
    {
      "commit": "5d3dac267a7fd0811ec777e76a81f97f5cdcb395",
      "tree": "ef57f539a5be1c7776c73a4bcffe2d840e6883f5",
      "parents": [
        "b235dc4abbc1356284bd0dc730efa711f394e0e2"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:31 2008 +0200"
      },
      "message": "dccp: Initialisation framework for feature negotiation\n\nThis initialises feature negotiation from two tables, which are initialised\nfrom sysctls. \n\nAs a novel feature, specifics of the implementation (e.g. currently short\nseqnos and ECN are not supported) are advertised for robustness.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nAcked-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\n"
    },
    {
      "commit": "b235dc4abbc1356284bd0dc730efa711f394e0e2",
      "tree": "c8adf34d1904c04ab0bee54e3d60f743822a8e9f",
      "parents": [
        "68e074bfcef269bc61006c2740d7f89ccbbd93d7"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:31 2008 +0200"
      },
      "message": "dccp ccid-2: Phase out the use of boolean Ack Vector sysctl\n\nThis removes the use of the sysctl and the minisock variable for the Send Ack\nVector feature, which is now handled fully dynamically via feature negotiation;\ni.e. when CCID2 is enabled, Ack Vectors are automatically enabled (as per\nRFC 4341, 4.).\n\nUsing a sysctl in parallel to this implementation would open the door to\ncrashes, since much of the code relies on tests of the boolean minisock /\nsysctl variable. Thus, this patch replaces all tests of type\n\n\tif (dccp_msk(sk)-\u003edccpms_send_ack_vector)\n\t\t/* ... */\nwith\n\tif (dp-\u003edccps_hc_rx_ackvec !\u003d NULL)\n\t\t/* ... */\n\nThe dccps_hc_rx_ackvec is allocated by the dccp_hdlr_ackvec() when feature\nnegotiation concluded that Ack Vectors are to be used on the half-connection.\nOtherwise, it is NULL (due to dccp_init_sock/dccp_create_openreq_child),\nso that the test is a valid one.\n\nThe activation handler for Ack Vectors is called as soon as the feature\nnegotiation has concluded at the\n * server when the Ack marking the transition RESPOND \u003d\u003e OPEN arrives;\n * client after it has sent its ACK, marking the transition REQUEST \u003d\u003e PARTOPEN.\n\nAdding the sequence number of the Response packet to the Ack Vector has been \nremoved, since\n (a) connection establishment implies that the Response has been received;\n (b) the CCIDs only look at packets received in the (PART)OPEN state, i.e.\n     this entry will always be ignored;\n (c) it can not be used for anything useful - to detect loss for instance, only\n     packets received after the loss can serve as pseudo-dupacks.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nAcked-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\n"
    },
    {
      "commit": "68e074bfcef269bc61006c2740d7f89ccbbd93d7",
      "tree": "d5e43100cd59fbd7893ce730e8440a7b7d11ed0b",
      "parents": [
        "78673e24df27c76ec75565f4024d45c2c74ef148"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:31 2008 +0200"
      },
      "message": "dccp: Remove manual influence on NDP Count feature\n\nUpdating the NDP count feature is handled automatically now:\n * for CCID-2 it is disabled, since the code does not use NDP counts;\n * for CCID-3 it is enabled, as NDP counts are used to determine loss lengths.\n\nAllowing the user to change NDP values leads to unpredictable and failing\nbehaviour, since it is then possible to disable NDP counts even when they\nare needed (e.g. in CCID-3).\n\nThis means that only those user settings are sensible that agree with the\nvalues for Send NDP Count implied by the choice of CCID. But those settings\nare already activated by the feature negotiation (CCID dependency tracking),\nhence this form of support is redundant.\n\nAt startup the initialisation of the NDP count feature is with the default\nvalue of 0, which is done implicitly by the zeroing-out of the socket when\nit is allocated. If the choice of CCID or feature negotiation enables NDP\ncount, this will then be updated via the NDP activation handler.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nAcked-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\n"
    },
    {
      "commit": "78673e24df27c76ec75565f4024d45c2c74ef148",
      "tree": "cdcd2a3b9e29f40063a592ebb4dc2de1184401e0",
      "parents": [
        "23479cbfd30402c7d9fa413cc467983061073557"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:31 2008 +0200"
      },
      "message": "dccp: Remove obsolete parts of the old CCID interface\n\nThe TX/RX CCIDs of the minisock are now redundant: similar to the Ack Vector\ncase, their value equals initially that of the sysctl, but at the end of\nfeature negotiation may be something different.\n\nThe old interface removed by this patch thus has been replaced by the newer\ninterface to dynamically query the currently loaded CCIDs earlier in this\npatch set.\n\nAlso removed the constructors for the TX CCID and the RX CCID, since the\nswitch rx/non-rx is done by the handler in minisocks.c (and the handler is\nthe only place in the code where CCIDs are loaded).\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nAcked-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\n"
    },
    {
      "commit": "23479cbfd30402c7d9fa413cc467983061073557",
      "tree": "b2b9e3fa10acdaf177424172d4ea4d86f7b00edd",
      "parents": [
        "c49b22729f3da7479c4e6c572d53fdd40201d0bd"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:30 2008 +0200"
      },
      "message": "dccp: Clean up old feature-negotiation infrastructure\n\nThe code removed by this patch is no longer referenced or used, the added\nlines update documentation and copyrights.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nAcked-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\n"
    },
    {
      "commit": "c49b22729f3da7479c4e6c572d53fdd40201d0bd",
      "tree": "2c58a67f089c97a55a132697ecf2ccc438bbed7f",
      "parents": [
        "e70cacb90d76f0632f7bba69c87a62e709e84619"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:30 2008 +0200"
      },
      "message": "dccp: Integration of dynamic feature activation - part 3 (client side)\n\nThis integrates feature-activation in the client, with these details:\n\n 1. When dccp_parse_options() fails, the reset code is already set, request_sent\n    _state_process() currently overrides this with `Packet Error\u0027, which is not\n    intended - so changed to use the reset code set in dccp_parse_options();\n\n 2. There was a FIXME to change the error code when dccp_ackvec_add() fails.\n    I have looked this up and found that: \n    * the check whether ackno \u003c ISN is already made earlier,\n    * this Response is likely the 1st packet with an Ackno that the client gets,\n    * so when dccp_ackvec_add() fails, the reason is likely not a packet error.\n\n 3. When feature negotiation fails, the socket should be marked as not usable,\n    so that the application is notified that an error occurs. This is achieved\n    by a new label, which uses an error code of `Aborted\u0027 and which sets the\n    socket state to CLOSED, as well as sk_err.\n\n 4. Avoids parsing the Ack twice in Respond state by not doing option processing\n    again in dccp_rcv_respond_partopen_state_process (as option processing has\n    already been done on the request_sock in dccp_check_req).    \n\nSince this addresses congestion-control initialisation, a corresponding\nFIXME has been removed.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nAcked-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\n"
    },
    {
      "commit": "e70cacb90d76f0632f7bba69c87a62e709e84619",
      "tree": "dff5916e19dfbbc0a88f14d78b0e4a69c927d891",
      "parents": [
        "3a53a9adfa269da7fa40fc476f09e46155c0143d"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:30 2008 +0200"
      },
      "message": "dccp: Integration of dynamic feature activation - part 2 (server side)\n\nThis patch integrates the activation of features at the end of negotiation\ninto the server-side code.\n\nNote: \n  In dccp_create_openreq_child the request_sock argument is no longer constant,\n  since dccp_activate_values() uses the feature-negotiation list on dreq to sort\n  out the initialisation values for the different features of the child socket;\n  and purges this queue after use (but the `req\u0027 argument to openreq_child\n  can and does still remain constant).\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nAcked-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\n"
    },
    {
      "commit": "3a53a9adfa269da7fa40fc476f09e46155c0143d",
      "tree": "9090efbd2aa9cc24ea50c63336a029e018509529",
      "parents": [
        "c926c6aed3e444e8c88a768f063b2de8fd6ae760"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:30 2008 +0200"
      },
      "message": "dccp: Integration of dynamic feature activation - part 1 (socket setup)\n\nThis first patch out of three replaces the hardcoded default settings with\ninitialisation code for the dynamic feature negotiation.\n\nNote on retransmitting Confirm options:\n---------------------------------------\nThis patch also defers flushing the client feature-negotiation queue,\ndue to the following considerations.\n\nAs long as the client is in PARTOPEN, it needs to retransmit the Confirm\noptions for the Change options received on the DCCP-Response from the server.\n\nOtherwise, if the packet containing the Confirm options gets dropped in the \nnetwork, the connection aborts due to undefined feature negotiation state.\n\nThanks to Leandro Melo de Sales who reported a bug in an earlier revision\nof the patch set, resulting from not retransmitting the Confirm options.\n\nThe patch now ensures that the client feature-negotiation queue is flushed only\nwhen entering the OPEN state. Since confirmed Change options are removed as\nsoon as they are confirmed (in the DCCP-Response), this ensures that Confirm\noptions are retransmitted.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nAcked-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\n"
    },
    {
      "commit": "c926c6aed3e444e8c88a768f063b2de8fd6ae760",
      "tree": "c3d2507f5652aed5ff0a2908ad8147a143e09a82",
      "parents": [
        "d2150b7bff3d397692cf0dc890f198d23564de5f"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:30 2008 +0200"
      },
      "message": "dccp: Feature activation handlers\n\nThis patch provides the post-processing of feature negotiation state, after\nthe negotiation has completed.\n\nTo this purpose, handlers are used and added to the dccp_feat_table. Each\nhandler is passed a boolean flag whether the RX or TX side of the feature\nis meant.\n\nSeveral handlers are provided already, new handlers can easily be added.\n\nThe initialisation is now fully dynamic, i.e. CCIDs are activated only\nafter the feature negotiation. The integration of this dynamic activation\nis done in the subsequent patches.\n\nThanks to Wei Yongjun for pointing out the necessity of skipping over empty\nConfirm options while copying the negotiated feature values.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nAcked-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\n"
    },
    {
      "commit": "d2150b7bff3d397692cf0dc890f198d23564de5f",
      "tree": "6916928ec289c46bca21c8a99640048e308fef3e",
      "parents": [
        "5a146b97d5e93db2df075c0d820f492bb996d0e3"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:29 2008 +0200"
      },
      "message": "dccp: Processing Confirm options\n\nAnalogous to the previous patch, this adds code to interpret incoming Confirm\nfeature-negotiation options. Both functions operate on the feature-negotiation\nlist of either the request_sock (server) or the dccp_sock (client).\n\nThanks to Wei Yongjun for pointing out that it is overly restrictive to check\nthe entire list of confirmed SP values.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nAcked-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\n"
    },
    {
      "commit": "5a146b97d5e93db2df075c0d820f492bb996d0e3",
      "tree": "b21d2576cdaeffe14f28cbbce5b75b26cbf0ef91",
      "parents": [
        "c664d4f4e2963ee355b1b0e77461eb844d1b288d"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:29 2008 +0200"
      },
      "message": "dccp: Process incoming Change feature-negotiation options\n\nThis adds/replaces code for processing incoming ChangeL/R options.\nThe main difference is that:\n * mandatory FN options are now interpreted inside the function\n  (there are too many individual cases to do this externally);\n * the function returns an appropriate Reset code or 0,\n   which is then used to fill in the data for the Reset packet.\n\nOld code, which is no longer used or referenced, has been removed.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "c664d4f4e2963ee355b1b0e77461eb844d1b288d",
      "tree": "b799cbd6bc0b3764a527b1b7b71012215b67e62f",
      "parents": [
        "f8a644c07e6f38b2c3cbaf99990e867d670d207b"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:29 2008 +0200"
      },
      "message": "dccp: Preference list reconciliation\n\nThis provides two functions to\n * reconcile preference lists (with appropriate return codes) and\n * reorder the preference list if successful reconciliation changed the\n   preferred value.\n\nThe patch also removes the old code for processing SP/NN Change options, since\nnew code to process these is mostly there already; related references have been\ncommented out.\n\nThe code for processing Change options follows in the next patch.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nAcked-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\n"
    },
    {
      "commit": "f8a644c07e6f38b2c3cbaf99990e867d670d207b",
      "tree": "f73051f64757db74135e538c4643a1d305a7fa0b",
      "parents": [
        "0ef118a017919cd661cf294811d1889ac556ee80"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:29 2008 +0200"
      },
      "message": "dccp: Integrate feature-negotiation insertion code\n\nThe patch implements insertion of feature negotiation at the server (listening\nand request socket) and the client (connecting socket).\n\nIn dccp_insert_options(), several statements have been grouped together now\nto achieve (I hope) better efficiency by reducing the number of tests each\npacket has to go through:\n - Ack Vectors are sent if the packet is neither a Data or a Request packet;\n - a previous issue is corrected - feature negotiation options are allowed\n   on DataAck packets (5.8).\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nAcked-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\n"
    },
    {
      "commit": "0ef118a017919cd661cf294811d1889ac556ee80",
      "tree": "526ea36f1a921ff56d460ac09b0e07d66a385815",
      "parents": [
        "cf9ddf73b9ba21a5cd6d3fcb0a45cfa9ec452033"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:29 2008 +0200"
      },
      "message": "dccp: Insert feature-negotiation options into skb\n\nThis patch replaces the earlier insertion routine from options.c, so that\ncode specific to feature negotiation can remain in feat.c. This is possible\nby calling a function already existing in options.c.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nAcked-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\n"
    },
    {
      "commit": "cf9ddf73b9ba21a5cd6d3fcb0a45cfa9ec452033",
      "tree": "c5137cf30d6f28100e57492e5c0e64a7294add22",
      "parents": [
        "d0440ee6f6903fcde6ed4efb88c910de1dfa18e5"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:29 2008 +0200"
      },
      "message": "dccp: Header option insertion routine for feature-negotiation\n\nThe patch extends existing code:\n * Confirm options divide into the confirmed value plus an optional preference\n   list for SP values. Previously only the preference list was echoed for SP\n   values, now the confirmed value is added as per RFC 4340, 6.1;\n * length and sanity checks are added to avoid illegal memory (or NULL) access.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nAcked-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\n"
    },
    {
      "commit": "d0440ee6f6903fcde6ed4efb88c910de1dfa18e5",
      "tree": "3eacaa56f4766967365d6f944129b6b71b528d9a",
      "parents": [
        "b9aaac1c538a9c86e8ef3be2579a13ff55580908"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:28 2008 +0200"
      },
      "message": "dccp: Support for Mandatory options\n\nSupport for Mandatory options is provided by this patch, which will\nbe used by subsequent feature-negotiation patches.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nAcked-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\nAcked-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "b9aaac1c538a9c86e8ef3be2579a13ff55580908",
      "tree": "3647b3d93e22ad4fb4e31460bf81f4040a697d70",
      "parents": [
        "c8041e264b3db6944d37b87969fbe6458cb30cfd"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:28 2008 +0200"
      },
      "message": "dccp: Increase the scope of variable-length htonl/ntohl functions\n\nThis extends the scope of two available functions, encode|decode_value_var,\nto work up to 6 (8) bytes, to match maximum requirements in the RFC.\n\nThese functions are going to be used both by general option processing and \nfeature negotiation code, hence declarations have been put into feat.h.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nAcked-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\nAcked-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "c8041e264b3db6944d37b87969fbe6458cb30cfd",
      "tree": "0dd21c001bea090756710216717a73d8e409a65d",
      "parents": [
        "fade756f18d42694e3acb00e3471ab43002cba16"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:28 2008 +0200"
      },
      "message": "dccp: API to query the current TX/RX CCID\n\nThis provides function to query the current TX/RX CCID dynamically, without\nreliance on the minisock value, using dynamic information available in the\ncurrently loaded CCID module.\n\nThis query function is then used to \n (a) provide the getsockopt part for getting/setting CCIDs via sockopts;\n (b) replace the current test for \"which CCID is in use\" in probe.c.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nAcked-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\n"
    },
    {
      "commit": "fade756f18d42694e3acb00e3471ab43002cba16",
      "tree": "f2ae912af9678315b672eb292ef17de42a97fbf3",
      "parents": [
        "73bbe095bbb9ce5f94d5475bad54c7ccd8573b1b"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:28 2008 +0200"
      },
      "message": "dccp: Set per-connection CCIDs via socket options\n\nWith this patch, TX/RX CCIDs can now be changed on a per-connection basis, which\noverrides the defaults set by the global sysctl variables for TX/RX CCIDs.\n\nTo make full use of this facility, the remaining patches of this patch set are\nneeded, which track dependencies and activate negotiated feature values.\n\nNote on the maximum number of CCIDs that can be registered:\n-----------------------------------------------------------\nThe maximum number of CCIDs that can be registered on the socket is constrained\nby the space in a Confirm/Change feature negotiation option. \n\nThe space in these in turn depends on the size of header options as defined\nin RFC 4340, 5.8. Since this is a recurring constant, it has been moved from\nackvec.h into linux/dccp.h, clarifying its purpose.\n\nRelative to this size, the maximum number of CCID identifiers that can be \npresent in a Confirm option (which always consumes 1 byte more than a Change\noption, cf. 6.1) is 2 bytes less than the maximum TLV size: one for the\nCCID-feature-type and one for the selected value.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "73bbe095bbb9ce5f94d5475bad54c7ccd8573b1b",
      "tree": "f0bd33e1d28c3c5310b0321761dfc53d753d4b01",
      "parents": [
        "17c30b40ed79e9f3955e884632c8f01e577b204a"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:28 2008 +0200"
      },
      "message": "dccp: Tidy up setsockopt calls\n\nThis splits the setsockopt calls into two groups, depending on whether an\ninteger argument (val) is required and whether routines being called do\ntheir own locking.\n\nSome options (such as setting the CCID) use u8 rather than int, so that for\nthese the test with regard to integer-sizeof can not be used.\n\nThe second switch-case statement now only has those statements which need\nlocking and which make use of `val\u0027.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nAcked-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\nAcked-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nReviewed-by: Eugene Teo \u003ceugeneteo@kernel.sg\u003e\n"
    },
    {
      "commit": "17c30b40ed79e9f3955e884632c8f01e577b204a",
      "tree": "41b91885f808f0b1d48b8b87a303ea7891565a46",
      "parents": [
        "20f41eee82864e308a5499308a1722dc3181cc3a"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:28 2008 +0200"
      },
      "message": "dccp: Deprecate Ack Ratio sysctl\n\nThis patch deprecates the Ack Ratio sysctl, since\n * Ack Ratio is entirely ignored by CCID-3 and CCID-4,\n * Ack Ratio currently doesn\u0027t work in CCID-2 (i.e. is always set to 1);\n * even if it would work in CCID-2, there is no point for a user to change it:\n   - Ack Ratio is constrained by cwnd (RFC 4341, 6.1.2),\n   - if Ack Ratio \u003e cwnd, the system resorts to spurious RTO timeouts \n     (since waiting for Acks which will never arrive in this window),\n   - cwnd is not a user-configurable value.\t\n\nThe only reasonable place for Ack Ratio is to print it for debugging. It is\nplanned to do this later on, as part of e.g. dccp_probe.\n\nWith this patch Ack Ratio is now under full control of feature negotiation:\n * Ack Ratio is resolved as a dependency of the selected CCID;\n * if the chosen CCID supports it (i.e. CCID \u003d\u003d CCID-2), Ack Ratio is set to\n   the default of 2, following RFC 4340, 11.3 - \"New connections start with Ack\n   Ratio 2 for both endpoints\";\n * what happens then is part of another patch set, since it concerns the \n   dynamic update of Ack Ratio while the connection is in full flight.\n\nThanks to Tomasz Grobelny for discussion leading up to this patch.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nAcked-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "20f41eee82864e308a5499308a1722dc3181cc3a",
      "tree": "145a2d1d72f956286dfde7fe3e821049b6aa797f",
      "parents": [
        "668144f7b41716a9efe1b398e15ead32a26cd101"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:27 2008 +0200"
      },
      "message": "dccp: Feature negotiation for minimum-checksum-coverage\n\nThis provides feature negotiation for server minimum checksum coverage\nwhich so far has been missing.\n\nSince sender/receiver coverage values range only from 0...15, their\ntype has also been reduced in size from u16 to u4.\n\nFeature-negotiation options are now generated for both sender and receiver\ncoverage, i.e. when the peer has `forgotten\u0027 to enable partial coverage\nthen feature negotiation will automatically enable (negotiate) the partial\ncoverage value for this connection.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nAcked-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\n"
    },
    {
      "commit": "668144f7b41716a9efe1b398e15ead32a26cd101",
      "tree": "ed535a5e2e2dc2dd8509336d2682aeaae66e4c00",
      "parents": [
        "d4c8741c431e07cfc66eb2b4c3a17b8d4975d9c0"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:27 2008 +0200"
      },
      "message": "dccp: Deprecate old setsockopt framework\n\nThe previous setsockopt interface, which passed socket options via struct \ndccp_so_feat, is complicated/difficult to use. Continuing to support it leads to\nugly code since the old approach did not distinguish between NN and SP values.\n\nThis patch removes the old setsockopt interface and replaces it with two new\nfunctions to register NN/SP values for feature negotiation. These are \nessentially wrappers around the internal __feat_register functions, with \nchecking added to avoid\n * wrong usage (type);\n * changing values while the connection is in progress.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "d4c8741c431e07cfc66eb2b4c3a17b8d4975d9c0",
      "tree": "f7639e6ffb4ca9c71c60df14733a78341453e65e",
      "parents": [
        "093e1f46cf162913d05e1d4eeb01baa3e297b683"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:27 2008 +0200"
      },
      "message": "dccp: Mechanism to resolve CCID dependencies\n\nThis adds a hook to resolve features whose value depends on the choice of\nCCID. It is done at the server since it can only be done after the CCID\nvalues have been negotiated; i.e. the client will add its CCID preference\nlist on the Change options sent in the Request, which will be reconciled\nwith the local preference list of the server.\n\nThe concept is documented on \nhttp://www.erg.abdn.ac.uk/users/gerrit/dccp/notes/feature_negotiation/\\\n\t\t\t\timplementation_notes.html#ccid_dependencies\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nAcked-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\n"
    },
    {
      "commit": "093e1f46cf162913d05e1d4eeb01baa3e297b683",
      "tree": "4a66ebf581924936bc7850122cb6bdad1cd5383c",
      "parents": [
        "71bb49596bbf4e5a3328e1704d18604e822ba181"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:27 2008 +0200"
      },
      "message": "dccp: Resolve dependencies of features on choice of CCID\n\nThis provides a missing link in the code chain, as several features implicitly\ndepend and/or rely on the choice of CCID. Most notably, this is the Send Ack Vector\nfeature, but also Ack Ratio and Send Loss Event Rate (also taken care of).\n\nFor Send Ack Vector, the situation is as follows:\n * since CCID2 mandates the use of Ack Vectors, there is no point in allowing \n   endpoints which use CCID2 to disable Ack Vector features such a connection;\n\n * a peer with a TX CCID of CCID2 will always expect Ack Vectors, and a peer\n   with a RX CCID of CCID2 must always send Ack Vectors (RFC 4341, sec. 4);\n\n * for all other CCIDs, the use of (Send) Ack Vector is optional and thus\n   negotiable. However, this implies that the code negotiating the use of Ack\n   Vectors also supports it (i.e. is able to supply and to either parse or\n   ignore received Ack Vectors). Since this is not the case (CCID-3 has no Ack\n   Vector support), the use of Ack Vectors is here disabled, with a comment\n   in the source code.\n\nAn analogous consideration arises for the Send Loss Event Rate feature,\nsince the CCID-3 implementation does not support the loss interval options\nof RFC 4342. To make such use explicit, corresponding feature-negotiation\noptions are inserted which signal the use of the loss event rate option,\nas it is used by the CCID3 code.\n\nLastly, the values of the Ack Ratio feature are matched to the choice of CCID.\n\nThe patch implements this as a function which is called after the user has\nmade all other registrations for changing default values of features.\n\nThe table is variable-length, the reserved (and hence for feature-negotiation\ninvalid, confirmed by considering section 19.4 of RFC 4340) feature number `0\u0027\nis used to mark the end of the table.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nAcked-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\n"
    },
    {
      "commit": "71bb49596bbf4e5a3328e1704d18604e822ba181",
      "tree": "75f64f2f0fea482efc3bdcac407ab187d9e78b5a",
      "parents": [
        "86349c8d9c6892b57aff4549256ab1aa65aed0f0"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:27 2008 +0200"
      },
      "message": "dccp: Query supported CCIDs\n\nThis provides a data structure to record which CCIDs are locally supported\nand three accessor functions:\n - a test function for internal use which is used to validate CCID requests\n   made by the user;\n - a copy function so that the list can be used for feature-negotiation;   \n - documented getsockopt() support so that the user can query capabilities.\n\nThe data structure is a table which is filled in at compile-time with the\nlist of available CCIDs (which in turn depends on the Kconfig choices).\n\nUsing the copy function for cloning the list of supported CCIDs is useful for\nfeature negotiation, since the negotiation is now with the full list of available\nCCIDs (e.g. {2, 3}) instead of the default value {2}. This means negotiation \nwill not fail if the peer requests to use CCID3 instead of CCID2. \n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nAcked-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\n"
    },
    {
      "commit": "86349c8d9c6892b57aff4549256ab1aa65aed0f0",
      "tree": "7fdd7a5d44b7999c8426012c83705cd3fec92cf7",
      "parents": [
        "5591d286281fdfb57914f5fad3ca001d44ce8fc6"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:27 2008 +0200"
      },
      "message": "dccp: Registration routines for changing feature values\n\nTwo registration routines, for SP and NN features, are provided by this patch,\nreplacing a previous routine which was used for both feature types.\n\nThese are internal-only routines and therefore start with `__feat_register\u0027.\n\nIt further exports the known limits of Sequence Window and Ack Ratio as symbolic\nconstants.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nAcked-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\n"
    },
    {
      "commit": "5591d286281fdfb57914f5fad3ca001d44ce8fc6",
      "tree": "e823aa756d48f31670815be0d4a1d1813d0d54d2",
      "parents": [
        "702083839b607f390dbed5d2304eb8fc5f4c85ac"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:27 2008 +0200"
      },
      "message": "dccp: Limit feature negotiation to connection setup phase\n\nThis patch starts the new implementation of feature negotiation:\n 1. Although it is theoretically possible to perform feature negotiation at any\n    time (and RFC 4340 supports this), in practice this is prohibitively complex,\n    as it requires to put traffic on hold for each new negotiation.\n 2. As a byproduct of restricting feature negotiation to connection setup, the\n    feature-negotiation retransmit timer is no longer required. This part is now\n    mapped onto the protocol-level retransmission.\n    Details indicating why timers are no longer needed can be found on\n    http://www.erg.abdn.ac.uk/users/gerrit/dccp/notes/feature_negotiation/\\\n\t                                      implementation_notes.html\n\nThis patch disables anytime negotiation, subsequent patches work out full\nfeature negotiation support for connection setup.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "702083839b607f390dbed5d2304eb8fc5f4c85ac",
      "tree": "08e042059da89626580ceddec6bebefaf8267115",
      "parents": [
        "828755cee087e4a34f45d6c9db661ccd0631cc6d"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:26 2008 +0200"
      },
      "message": "dccp: Cleanup routines for feature negotiation\n\nThis inserts the required de-allocation routines for memory allocated by \nfeature negotiation in the socket destructors, replacing dccp_feat_clean()\nin one instance.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nAcked-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\n"
    },
    {
      "commit": "828755cee087e4a34f45d6c9db661ccd0631cc6d",
      "tree": "07e687e6f5c559a49467ca3f56117ec58d9549b3",
      "parents": [
        "3001fc0569651f2d0c3b45adc991351471b0c382"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:26 2008 +0200"
      },
      "message": "dccp: Per-socket initialisation of feature negotiation\n\nThis provides feature-negotiation initialisation for both DCCP sockets and\nDCCP request_sockets, to support feature negotiation during connection setup.\n\nIt also resolves a FIXME regarding the congestion control initialisation.\n\nThanks to Wei Yongjun for help with the IPv6 side of this patch.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nAcked-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\n"
    },
    {
      "commit": "3001fc0569651f2d0c3b45adc991351471b0c382",
      "tree": "ec89ae53bf5e345a971ee92fec8816677e46fc69",
      "parents": [
        "b4eec206370b7154dc354dc30f0a3f02ea8468b2"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:30:19 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:26 2008 +0200"
      },
      "message": "dccp: List management for new feature negotiation\n\nThis adds list fields and list management functions for the new feature\nnegotiation implementation. The new code is kept in parallel to the old\ncode, until removed at the end of the patch set.\n\nThanks to Arnaldo for suggestions to improve the code.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nAcked-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\n"
    }
  ],
  "next": "b4eec206370b7154dc354dc30f0a3f02ea8468b2"
}
