)]}'
{
  "log": [
    {
      "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": "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": "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": "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": "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": "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": "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": "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": "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": "959fd992f05b7468bf30d759ac0c9fd0ef0fa80b",
      "tree": "936a599345610ce11d5070e17dc6a72f0949285e",
      "parents": [
        "432649916b0435b608fb3e1fcb97347ac294d38d"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Sat Aug 23 13:28:27 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:25 2008 +0200"
      },
      "message": "dccp ccid-3: Replace lazy BUG_ON with condition\n\nThe BUG_ON(w_tot \u003d\u003d 0) only holds if there is no more than 1 loss interval in\nthe loss history. If there is only a single loss interval, the calc_i_mean()\nroutine need in fact not be called (RFC 3448, 6.3.1). \n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "432649916b0435b608fb3e1fcb97347ac294d38d",
      "tree": "39dc5e5e491f07e7b7504a5d0346c8e386966343",
      "parents": [
        "48816322ad4d9ce195aaddd10f0ce98c944af193"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Sat Aug 23 13:28:27 2008 +0200"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Sep 04 07:45:25 2008 +0200"
      },
      "message": "dccp: Toggle debug output without module unloading\n\nThis sets the sysfs permissions so that root can toggle the `debug\u0027\nparameter available for nearly every DCCP module. This is useful \nsince there are various module inter-dependencies. The debug flag\ncan now be toggled at runtime using\n\n  echo 1 \u003e /sys/module/dccp/parameters/dccp_debug\n  echo 1 \u003e /sys/module/dccp_ccid2/parameters/ccid2_debug\n  echo 1 \u003e /sys/module/dccp_ccid3/parameters/ccid3_debug\n  echo 1 \u003e /sys/module/dccp_tfrc_lib/parameters/tfrc_debug\n\nThe last is not very useful yet, since no code at the moment calls\nthe tfrc_debug() macro.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "2eeea7ba6b4b65ed27b7646a1bdea3b45973c861",
      "tree": "da60ba323ca324789d42d8c0513be8a26d150832",
      "parents": [
        "b552c6231f19d50165bbf59e8b34d3f713ab5c01"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Sun Jul 13 11:51:40 2008 +0100"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Sun Jul 13 11:51:40 2008 +0100"
      },
      "message": "dccp ccid-3: Length of loss intervals\n\nThis corrects an error in the computation of the open loss interval I_0:\n  * the interval length is (highest_seqno - start_seqno) + 1\n  * and not (highest_seqno - start_seqno).\n\nThis condition was not fully clear in RFC 3448, but reflects the current\nrevision state of rfc3448bis and is also consistent with RFC 4340, 6.1.1.\n\nFurther changes:\n----------------\n * variable renamed due to line length constraints;\n * explicit typecast to `s64\u0027 to avoid implicit signed/unsigned casting.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "b552c6231f19d50165bbf59e8b34d3f713ab5c01",
      "tree": "7ef572ce7356789e3152120a5b9b8621954e02af",
      "parents": [
        "5b5d0e704880addfd979c262e6441f126708539c"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Sun Jul 13 11:51:40 2008 +0100"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Sun Jul 13 11:51:40 2008 +0100"
      },
      "message": "dccp ccid-3: Fix a loss detection bug\n\nThis fixes a bug in the logic of the TFRC loss detection:\n * new_loss_indicated() should not be called while a loss is pending;\n * but the code allows this;\n * thus, for two subsequent gaps in the sequence space, when loss_count\n   has not yet reached NDUPACK\u003d3, the loss_count is falsely reduced to 1.\n\nTo avoid further and similar problems, all loss handling and loss detection is\nnow done inside tfrc_rx_hist_handle_loss(), using an appropriate routine to\ntrack new losses.\n\nFurther changes:\n----------------\n * added a reminder that no RX history operations should be performed when\n   rx_handle_loss() has identified a (new) loss, since the function takes\n   care of packet reordering during loss detection;\n * made tfrc_rx_hist_loss_pending() bool (thanks to an earlier suggestion\n   by Arnaldo);\t\t \n * removed unused functions.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "5b5d0e704880addfd979c262e6441f126708539c",
      "tree": "1b3bff6cd378c858ab245de3a40c3510d4ba4745",
      "parents": [
        "2013c7e35aeba39777f9b3eef8a70207b3931152"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Sun Jul 13 11:51:40 2008 +0100"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Sun Jul 13 11:51:40 2008 +0100"
      },
      "message": "dccp: Upgrade NDP count from 3 to 6 bytes\n\nRFC 4340, 7.7 specifies up to 6 bytes for the NDP Count option, whereas the code\nis currently limited to up to 3 bytes. This seems to be a relict of an earlier \ndraft version and is brought up to date by the patch.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "2013c7e35aeba39777f9b3eef8a70207b3931152",
      "tree": "5d63ce9f8c512ffd17b8084002e6dc0e0f998b84",
      "parents": [
        "79d16385c7f287a33ea771c4dbe60ae43f791b49"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Sun Jul 13 11:51:40 2008 +0100"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Sun Jul 13 11:51:40 2008 +0100"
      },
      "message": "dccp ccid-3: Fix error in loss detection\n\nThe TFRC loss detection code used the wrong loss condition (RFC 4340, 7.7.1):\n * the difference between sequence numbers s1 and s2 instead of \n * the number of packets missing between s1 and s2 (one less than the distance).\n\nSince this condition appears in many places of the code, it has been put into a\nseparate function, dccp_loss_free().\n\nFurther changes:\n----------------\n * tidied up incorrect typing (it was using `int\u0027 for u64/s64 types);\n * optimised conditional statements for common case of non-reordered packets;\n * rewrote comments/documentation to match the changes.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "7deb0f851003287d7e259bf6b33548b144c0f2d5",
      "tree": "8ede694c4b6cd41224f7165d09d3f5935d889fd1",
      "parents": [
        "1e8a287c79f64226541f5c44aa52d4698bb84cf5"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Wed Jun 11 11:19:10 2008 +0100"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Wed Jun 11 11:19:10 2008 +0100"
      },
      "message": "dccp ccid-3: X truncated due to type conversion\n\nThis fixes a bug in computing the inter-packet-interval t_ipi \u003d s/X: \n\n scaled_div32(a, b) uses u32 for b, but in \"scaled_div32(s, X)\" the type of the\n sending rate `X\u0027 is u64. Since X is scaled by 2^6, this truncates rates greater\n than 2^26 Bps (~537 Mbps).\n\nUsing full 64-bit division now.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "1e8a287c79f64226541f5c44aa52d4698bb84cf5",
      "tree": "a280516dae548981cd9c9f981cc7bd8ec879baf2",
      "parents": [
        "65907a433ac0ca450c4408080f24c6e4743386b2"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Wed Jun 11 11:19:10 2008 +0100"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Wed Jun 11 11:19:10 2008 +0100"
      },
      "message": "dccp ccid-3: TFRC reverse-lookup Bug-Fix\n\nThis fixes a bug in the reverse lookup of p: given a value f(p), instead of p,\nthe function returned the smallest tabulated value f(p).\n\nThe smallest tabulated value of\n\t \n   10^6 * f(p) \u003d  sqrt(2*p/3) + 12 * sqrt(3*p/8) * (32 * p^3 + p) \n\nfor p\u003d0.0001 is 8172. \n\nSince this value is scaled by 10^6, the outcome of this bug is that a loss\nof 8172/10^6 \u003d 0.8172% was reported whenever the input was below the table\nresolution of 0.01%.\n\nThis means that the value was over 80 times too high, resulting in large spikes\nof the initial loss interval, thus unnecessarily reducing the throughput.\n\nAlso corrected the printk format (%u for u32).\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "1e2f0e5e8376f2a0ada8760fc9d3104e1a81382b",
      "tree": "8e0dc375e574092814d7d020292cf6df67db5bb1",
      "parents": [
        "3294f202dc1acd82223e83ef59f272bd87bb06b2"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Wed Jun 11 11:19:09 2008 +0100"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Wed Jun 11 11:19:09 2008 +0100"
      },
      "message": "dccp: Fix sparse warnings\n\nThis patch fixes the following sparse warnings:\n * nested min(max()) expression:\n   net/dccp/ccids/ccid3.c:91:21: warning: symbol \u0027__x\u0027 shadows an earlier one\n   net/dccp/ccids/ccid3.c:91:21: warning: symbol \u0027__y\u0027 shadows an earlier one\n   \n * Declaration of function prototypes in .c instead of .h file, resulting in\n   \"should it be static?\" warnings. \n\n * Declared \"struct dccpw\" static (local to dccp_probe).\n \n * Disabled dccp_delayed_ack() - not fully removed due to RFC 4340, 11.3\n   (\"Receivers SHOULD implement delayed acknowledgement timers ...\").\n\n * Used a different local variable name to avoid\n   net/dccp/ackvec.c:293:13: warning: symbol \u0027state\u0027 shadows an earlier one\n   net/dccp/ackvec.c:238:33: originally declared here\n\n * Removed unused functions `dccp_ackvector_print\u0027 and `dccp_ackvec_print\u0027.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "3294f202dc1acd82223e83ef59f272bd87bb06b2",
      "tree": "b3841a093322afbc7cd608ccc6ae60debe8c015a",
      "parents": [
        "513fd370e6832f81ab717df4645f5ce679e44f14"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Wed Jun 11 11:19:09 2008 +0100"
      },
      "committer": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Wed Jun 11 11:19:09 2008 +0100"
      },
      "message": "dccp ccid-3: Bug-Fix - Zero RTT is possible\n\nIn commit $(825de27d9e40b3117b29a79d412b7a4b78c5d815) (from 27th May, commit\nmessage `dccp ccid-3: Fix \"t_ipi explosion\" bug\u0027), the CCID-3 window counter\ncomputation was fixed to cope with RTTs \u003c 4 microseconds.\n\nSuch RTTs can be found e.g. when running CCID-3 over loopback. The fix removed\na check against RTT \u003c 4, but introduced a divide-by-zero bug.\n\nAll steady-state RTTs in DCCP are filtered using dccp_sample_rtt(), which\nensures non-zero samples. However, a zero RTT is possible on initialisation,\nwhen there is no RTT sample from the Request/Response exchange.\n\nThe fix is to use the fallback-RTT from RFC 4340, 3.4.\n\nThis is also better than just fixing update_win_count() since it allows other\nparts of the code to always assume that the RTT is non-zero during the time\nthat the CCID is used.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\n"
    },
    {
      "commit": "825de27d9e40b3117b29a79d412b7a4b78c5d815",
      "tree": "95ab0dc853b2f68d529162e5f1dfd5e0cb5e37a9",
      "parents": [
        "6079a463cf95fafcc704a4e5e92a4da12444bd3c"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Tue May 27 06:33:54 2008 -0700"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Tue May 27 06:33:54 2008 -0700"
      },
      "message": "dccp ccid-3: Fix \"t_ipi explosion\" bug\n\nThe identification of this bug is thanks to Cheng Wei and Tomasz\nGrobelny.\n\nTo avoid divide-by-zero, the implementation previously ignored RTTs\nsmaller than 4 microseconds when performing integer division RTT/4.\n\nWhen the RTT reached a value less than 4 microseconds (as observed on\nloopback), this prevented the Window Counter CCVal value from\nadvancing. As a result, the receiver stopped sending feedback. This in\nturn caused non-ending expiries of the nofeedback timer at the sender,\nso that the sending rate was progressively reduced until reaching the\nminimum of one packet per 64 seconds.\n\nThe patch fixes this bug by handling integer division more\nintelligently. Due to consistent use of dccp_sample_rtt(),\ndivide-by-zero-RTT is avoided.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "84994e16f25dabe234be4fc2d323ec9db95b87cb",
      "tree": "d30cc0144afe0f4640e432b4c0bd4a0f1f86c9ed",
      "parents": [
        "0c0b0aca66b3a58e12a216d992a0b534eff210e0"
      ],
      "author": {
        "name": "Harvey Harrison",
        "email": "harvey.harrison@gmail.com",
        "time": "Fri May 02 16:44:07 2008 -0700"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Fri May 02 16:44:07 2008 -0700"
      },
      "message": "dccp: ccid2.c, ccid3.c use clamp(), clamp_t()\n\nMakes the intention of the nested min/max clear.\n\nSigned-off-by: Harvey Harrison \u003charvey.harrison@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "c4e18dade1f878db33ed38927de22e63d550970d",
      "tree": "514e2321c39618ae4c7ad4b15f7ae0d65eefb66c",
      "parents": [
        "cf35f43e6e41b160d8dedd80a127210fd3be9ada"
      ],
      "author": {
        "name": "Ilpo Järvinen",
        "email": "ilpo.jarvinen@helsinki.fi",
        "time": "Sat Jan 05 23:13:58 2008 -0800"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 15:00:44 2008 -0800"
      },
      "message": "[CCID3]: Kill some bloat\n\nWithout a number of CONFIG.*DEBUG:\n\nnet/dccp/ccids/ccid3.c:\n  ccid3_hc_tx_update_x          | -170\n  ccid3_hc_tx_packet_sent       | -175\n  ccid3_hc_tx_packet_recv       | -169\n  ccid3_hc_tx_no_feedback_timer | -192\n  ccid3_hc_tx_send_packet       | -144\n 5 functions changed, 850 bytes removed, diff: -850\n\nnet/dccp/ccids/ccid3.c:\n  ccid3_update_send_interval | +191\n 1 function changed, 191 bytes added, diff: +191\n\nnet/dccp/ccids/ccid3.o:\n 6 functions changed, 191 bytes added, 850 bytes removed, diff: -659\n\nSigned-off-by: Ilpo Järvinen \u003cilpo.jarvinen@helsinki.fi\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "52515e77a7a69867c479db4c9efb6be832b82179",
      "tree": "d4246af065a53f7e2ae92070ec07d59ba892baf6",
      "parents": [
        "d8d1252f744cb7cebd6ba3a4b7feec31ff23ccde"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Mon Dec 17 12:57:43 2007 -0200"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 14:58:23 2008 -0800"
      },
      "message": "[CCID3]: Nofeedback timer according to rfc3448bis\n\nThis implements the changes to the nofeedback timer handling suggested\nin draft rfc3448bis00, section 4.4. In particular, these changes mean:\n\n * better handling of the lossless case (p \u003d\u003d 0)\n * the timestamp for computing t_ld becomes obsolete\n * much more recent document (RFC 3448 is almost 5 years old)\n * concepts in rfc3448bis arose from a real, working implementation\n   (cf. sec. 12)\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nSigned-off-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "d8d1252f744cb7cebd6ba3a4b7feec31ff23ccde",
      "tree": "acb47c9a5e654a6b5ca3ebf60c8c60d783fb3a65",
      "parents": [
        "5bd370a63daf62bb5520c258f04e91a4d9d274dd"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Mon Dec 17 12:48:47 2007 -0200"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 14:58:22 2008 -0800"
      },
      "message": "[CCID3]: Implement rfc3448bis changes to feedback reception\n\nThis implements the algorithm to update the allowed sending rate X upon\nreceiving feedback packets, as described in draft rfc3448bis, 4.2/4.3.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nSigned-off-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "5bd370a63daf62bb5520c258f04e91a4d9d274dd",
      "tree": "acec316f81c7d2b4e87373a229875a2f78b6ca96",
      "parents": [
        "8e138e7949490eebdccbd65b1f660a0488149a6b"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Mon Dec 17 10:25:06 2007 -0200"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 14:58:22 2008 -0800"
      },
      "message": "[CCID3]: Remove two irrelevant states in TX feedback handling\n\n * the NO_SENT state is only triggered in bidirectional mode,\n   costing unnecessary processing.\n * the TERM (terminating) state is irrelevant.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nSigned-off-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "8e138e7949490eebdccbd65b1f660a0488149a6b",
      "tree": "8013f8f699f3bac8daa9747183a704854150c496",
      "parents": [
        "17159b0b494ad27f397f914d6eab1b91faf57630"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Mon Dec 17 10:07:44 2007 -0200"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 14:58:21 2008 -0800"
      },
      "message": "[CCID3]: Use a function to update p_inv, and p is never used\n\nThis patch\n 1) concentrates previously scattered computation of p_inv into one function;\n 2) removes the `p\u0027 element of the CCID3 RX sock (it is redundant);\n 3) makes the tfrc_rx_info structure standalone, only used on demand.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nSigned-off-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "84a97b0af8c29aa5a47cc5271968a9c6004fb91e",
      "tree": "8fb3da66a7c0cc0933b714de884f210f0ecb90e0",
      "parents": [
        "9cb2345a8c49ea380437d02bb9fd9f291c0a005d"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Dec 13 23:33:25 2007 -0200"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 14:57:58 2008 -0800"
      },
      "message": "[CCID]: More informative registration\n\nThe patch makes the registration messages of CCID 2/3 a bit more\ninformative: instead of repeating the CCID number as currently done,\n\n        \"CCID: Registered CCID 2 (ccid2)\"  or\n        \"CCID: Registered CCID 3 (ccid3)\",\n\nthe descriptive names of the CCID\u0027s (from RFCs) are now used:\n\n\t\"CCID: Registered CCID 2 (TCP-like)\" and\n\t\"CCID: Registered CCID 3 (TCP-Friendly Rate Control)\".\n\nTo allow spaces in the name, the slab name string has been changed to\nrefer to the numeric CCID identifier, using the same format as before.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nSigned-off-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "3f71c81ac37b27b824e9ce18fe17438dc2af4a16",
      "tree": "0291ca60c033aec233443faec78777f603e5e419",
      "parents": [
        "954c2db868ce896325dced91d5fba5e2226897a4"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Wed Dec 12 14:23:08 2007 -0200"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 14:57:20 2008 -0800"
      },
      "message": "[TFRC]: Remove previous loss intervals implementation\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nSigned-off-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "954c2db868ce896325dced91d5fba5e2226897a4",
      "tree": "d74b480530878c25eb770293d786f2e78ace90e7",
      "parents": [
        "de0d411cb8ea51175f52d935faead5c542b6e007"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Wed Dec 12 14:06:14 2007 -0200"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 14:57:20 2008 -0800"
      },
      "message": "[CCID3]: Interface CCID3 code with newer Loss Intervals Database\n\nThis hooks up the TFRC Loss Interval database with CCID 3 packet reception.\nIn addition, it makes the CCID-specific computation of the first loss\ninterval (which requires access to all the guts of CCID3) local to ccid3.c.\n\nThe patch also fixes an omission in the DCCP code, that of a default /\nfallback RTT value (defined in section 3.4 of RFC 4340 as 0.2 sec); while\nat it, the  upper bound of 4 seconds for an RTT sample has  been reduced to\nmatch the initial TCP RTO value of 3 seconds from[RFC 1122, 4.2.3.1].\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nSigned-off-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "de0d411cb8ea51175f52d935faead5c542b6e007",
      "tree": "d26398b1da10d52a4138728ff11e955d9d1fba04",
      "parents": [
        "db64196038e79b0460245d558e54ff4a21a52d1f"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Wed Dec 12 14:03:01 2007 -0200"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 14:57:19 2008 -0800"
      },
      "message": "[TFRC]: CCID3 (and CCID4) needs to access these inlines\n\nThis moves two inlines back to packet_history.h: these are not private\nto packet_history.c, but are needed by CCID3/4 to detect whether a new\nloss is indicated, or whether a loss is already pending.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "db64196038e79b0460245d558e54ff4a21a52d1f",
      "tree": "c24ee13b726832a85a95a2824f01293fe84dcc75",
      "parents": [
        "8a9c7e92e0ca97632126feee32ba2698b4eb6c8f"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Wed Dec 12 13:57:14 2007 -0200"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 14:57:18 2008 -0800"
      },
      "message": "[CCID3]: Redundant debugging output / documentation\n\nEach time feedback is sent two lines are printed:\n\n\tccid3_hc_rx_send_feedback: client ... - entry\n\tccid3_hc_rx_send_feedback: Interval ...usec, X_recv\u003d..., 1/p\u003d...\n\nThe first line is redundant and thus removed.\n\nFurther, documentation of ccid3_hc_rx_sock (capitalisation) is made consistent.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "8a9c7e92e0ca97632126feee32ba2698b4eb6c8f",
      "tree": "b569d6e39f3630f7a973814a925502035c63904b",
      "parents": [
        "8995a238ef6869bc5c80240440bc58452c7af283"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Wed Dec 12 13:50:51 2007 -0200"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 14:57:18 2008 -0800"
      },
      "message": "[TFRC]: Ringbuffer to track loss interval history\n\nA ringbuffer-based implementation of loss interval history is easier to\nmaintain, allocate, and update.\n\nThe `swap\u0027 routine to keep the RX history sorted is due to and was written\nby Arnaldo Carvalho de Melo, simplifying an earlier macro-based variant.\n\nDetails:\n * access to the Loss Interval Records via macro wrappers (with safety checks);\n * simplified, on-demand allocation of entries (no extra memory consumption on\n   lossless links); cache allocation is local to the module / exported as service;\n * provision of RFC-compliant algorithm to re-compute average loss interval;\n * provision of comprehensive, new loss detection algorithm\n \t- support for all cases of loss, including re-ordered/duplicate packets;\n \t- waiting for NDUPACK\u003d3 packets to fill the hole;\n\t- updating loss records when a late-arriving packet fills a hole.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nSigned-off-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "8995a238ef6869bc5c80240440bc58452c7af283",
      "tree": "40850acfd1042ecdf9bf3f745358871ef42772bb",
      "parents": [
        "df8f83fdd6369e1ba85f089fd6fe26bb2ddcb36f"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Wed Dec 12 12:28:40 2007 -0200"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 14:57:16 2008 -0800"
      },
      "message": "[TFRC]: Loss interval code needs the macros/inlines that were moved\n\nThis moves the inlines (which were previously declared as macros) back into\npacket_history.h since the loss detection code needs to be able to read entries\nfrom the RX history in order to create the relevant loss entries: it needs at\nleast tfrc_rx_hist_loss_prev() and tfrc_rx_hist_last_rcv(), which in turn\nrequire the definition of the other inlines (macros).\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "df8f83fdd6369e1ba85f089fd6fe26bb2ddcb36f",
      "tree": "8ddb2e0b70d5ed99837919ada6664e70c876f119",
      "parents": [
        "2aaef4e47fef8a6c0bc7fc5d9d3eea4af290e04c"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Wed Dec 12 12:24:49 2007 -0200"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 14:57:15 2008 -0800"
      },
      "message": "[TFRC]: Put RX/TX initialisation into tfrc.c\n\nThis separates RX/TX initialisation and puts all packet history / loss intervals\ninitialisation into tfrc.c.\nThe organisation is uniform: slab declaration -\u003e {rx,tx}_init() -\u003e {rx,tx}_exit()\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "385ac2e3f226c09cb71733df1899658e33a7850f",
      "tree": "d3b9754ec75c550b784ef51ab02b25e00aa70c34",
      "parents": [
        "797eba424d4332f6aff5b741600b61e3d4b3d3f2"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Sat Dec 08 16:26:59 2007 -0200"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 14:57:04 2008 -0800"
      },
      "message": "[CCID3]: HC-receiver should not insert timestamps as HC-sender doesn\u0027t uses it\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "797eba424d4332f6aff5b741600b61e3d4b3d3f2",
      "tree": "f29150076bb9032eb1e11a9a83c974b7875b3553",
      "parents": [
        "78282d2af598a1840934e2049a5c196885647f6a"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Sat Dec 08 16:08:41 2007 -0200"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 14:57:03 2008 -0800"
      },
      "message": "[TFRC]: The function tfrc_rx_hist_entry_delete() is not used anymore\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "78282d2af598a1840934e2049a5c196885647f6a",
      "tree": "19f2a626bc2a8741b3740a44ccaa9f0e02e21d34",
      "parents": [
        "c69bce20dda7f79160856a338298d65a284ba303"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Sat Dec 08 15:08:08 2007 -0200"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 14:57:03 2008 -0800"
      },
      "message": "[TFRC]: Move comment.\n\nMoved up the comment \"Receiver routines\" above the first occurrence of\nRX history routines.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "b84a2189c4e1835c51fd6b974a0497be9bc4ba87",
      "tree": "d488b0a45618ac37c605b10b093f8f03a050a7fc",
      "parents": [
        "30a0eacd479f1c7c15fe0496585ff29f76de3378"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Dec 06 13:18:11 2007 -0200"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 14:56:43 2008 -0800"
      },
      "message": "[TFRC]: New rx history code\n\nCredit here goes to Gerrit Renker, that provided the initial implementation for\nthis new codebase.\n\nI modified it just to try to make it closer to the existing API, renaming some\nfunctions, add namespacing and fix one bug where the tfrc_rx_hist_alloc was not\nfreeing the allocated ring entries on the error path.\n\nOriginal changeset comment from Gerrit:\n      -----------\nThis provides a new, self-contained and generic RX history service for TFRC\nbased protocols.\n\nDetails:\n * new data structure, initialisation and cleanup routines;\n * allocation of dccp_rx_hist entries local to packet_history.c,\n   as a service exported by the dccp_tfrc_lib module.\n * interface to automatically track highest-received seqno;\n * receiver-based RTT estimation (needed for instance by RFC 3448, 6.3.1);\n * a generic function to test for `data packets\u0027 as per  RFC 4340, sec. 7.7.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "30a0eacd479f1c7c15fe0496585ff29f76de3378",
      "tree": "eed98813afd0814e0d0999428b50477c5d36471e",
      "parents": [
        "d58d1af03a6a3ddf296ae3aeb4ff234af4b15958"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Dec 06 12:29:07 2007 -0200"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 14:56:43 2008 -0800"
      },
      "message": "[CCID3]: The receiver of a half-connection does not set window counter values\n\nOnly the sender sets window counters [RFC 4342, sections 5 and 8.1].\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nSigned-off-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "d58d1af03a6a3ddf296ae3aeb4ff234af4b15958",
      "tree": "44194b47b1c1b188f300ec1d1f6f0eed6e9a8849",
      "parents": [
        "34a9e7ea91bb4acb45ae5331e7403304029329b2"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Dec 06 12:28:39 2007 -0200"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 14:56:42 2008 -0800"
      },
      "message": "[TFRC]: Rename dccp_rx_ to tfrc_rx_\n\nThis is in preparation for merging the new rx history code written by Gerrit Renker.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "34a9e7ea91bb4acb45ae5331e7403304029329b2",
      "tree": "196c60bbe79f4d480cefa9d141a6096f3450fa75",
      "parents": [
        "e9c8b24a6ade50315f3c080799da45ddadf42269"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Dec 06 12:28:13 2007 -0200"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 14:56:41 2008 -0800"
      },
      "message": "[TFRC]: Make the rx history slab be global\n\nThis is in preparation for merging the new rx history code written by Gerrit Renker.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "e9c8b24a6ade50315f3c080799da45ddadf42269",
      "tree": "bf7c9aabba852c4f54f3f38223e0c41445bb2f50",
      "parents": [
        "2180c41ca5c1a36c67f4140e80154699333109d2"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Dec 06 12:27:49 2007 -0200"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 14:56:40 2008 -0800"
      },
      "message": "[TFRC]: Rename tfrc_tx_hist to tfrc_tx_hist_slab, for consistency\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "c40616c597bf02a2346cbf2f120283734b436245",
      "tree": "2fb6f82ed8fec01038f4607b489086a8f2a719f9",
      "parents": [
        "f8b33fdfafea0f909712a55fbb3d83b89f70f3f5"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Thu Dec 06 12:26:38 2007 -0200"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 14:56:39 2008 -0800"
      },
      "message": "[TFRC]: Provide central source file and debug facility\n\nThis patch changes the tfrc_lib module in the following manner:\n\n (1) a dedicated tfrc source file to call the packet history \u0026\n     loss interval init/exit functions.\n (2) a dedicated tfrc_pr_debug macro with toggle switch `tfrc_debug\u0027.\n\nCommiter note: renamed tfrc_module.c to tfrc.c, and made CONFIG_IP_DCCP_CCID3\nselect IP_DCCP_TFRC_LIB.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nSigned-off-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "9108d5f4b2cd82f55ad178caa0be66a866a06dcc",
      "tree": "c706ab8146fa93ab56c72037b7daa2a6f78e4062",
      "parents": [
        "95bdfccb2bf4ea21c0065772c6a2c75cbaf6ad0d"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Nov 29 22:47:15 2007 -0200"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 14:55:19 2008 -0800"
      },
      "message": "[TFRC]: Hide tx history details from the CCIDs\n\nBased on a previous patch by Gerrit Renker.\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "276f2edc52e309b38a216245952e05880e182c83",
      "tree": "3f581eb831a6f7f16ab30bd0f8e8d80b5b97fe50",
      "parents": [
        "ea4f76ae13b4240dac304ed50636391d6b22e9c5"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Wed Nov 28 11:15:40 2007 -0200"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 14:55:11 2008 -0800"
      },
      "message": "[TFRC]: Migrate TX history to singly-linked lis\n\nThis patch was based on another made by Gerrit Renker, his changelog was:\n\n    ------------------------------------------------------\nThe patch set migrates TFRC TX history to a singly-linked list.\n\nThe details are:\n * use of a consistent naming scheme (all TFRC functions now begin with `tfrc_\u0027);\n * allocation and cleanup are taken care of internally;\n * provision of a lookup function, which is used by the CCID TX infrastructure\n   to determine the time a packet was sent (in turn used for RTT sampling);\n * integration of the new interface with the present use in CCID3.\n    ------------------------------------------------------\n\nSimplifications I did:\n\n. removing the tfrc_tx_hist_head that had a pointer to the list head and\n  another for the slabcache.\n. No need for creating a slabcache for each CCID that wants to use the TFRC\n  tx history routines, create a single slabcache when the dccp_tfrc_lib module\n  init routine is called.\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "dcfbc7e97a2e3a0d73a2e41e1bddb988dcca701e",
      "tree": "72f3e847a2cff031e8d9d7728065716da3ca0be9",
      "parents": [
        "a302002516a094015e5d004b8d939a8a34559c82"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Sat Nov 24 22:12:06 2007 -0200"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 14:55:01 2008 -0800"
      },
      "message": "[CCID2]: Remove misleading comment\n\nThis removes a comment which identifies an `issue\u0027 with dccp_write_xmit() where there is none.\nThe comment assumes it is possible that a packet is sent between the calls to\n\n\tccid_hc_tx_send_packet(),\n\tdccp_transmit_skb(),\n\tccid_hc_tx_packet_sent()\n\n(in the above order) in dccp_write_xmit().\n\nI think that this is impossible, since dccp_write_xmit() is always called under lock:\n\n * when called as dccp_write_xmit(sk, 1) from dccp_send_close(), the socket is locked\n   (see code comment above dccp_send_close());\n * when called as dccp_write_xmit(sk, 0) from dccp_send_msg(), it is after lock_sock() has been called;\n * when called as dccp_write_xmit(sk, 0) from dccp_write_xmit_timer(), bh_lock_sock() has been called\n   and the if/else statement has made sure that sk_lock.owner is not set;\n * there are no other places where dccp_write_xmit() is called.\n\nFurthermore, the debug statement for printing the sequence number of the packet just sent has been\nremoved, since the entire list is being printed anyway and so the entry of that number appears last.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nAcked-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "a302002516a094015e5d004b8d939a8a34559c82",
      "tree": "681d5be6c6e283f6889152d3e97af3e833f473ba",
      "parents": [
        "83399361c30f2ffae20ee348ba9ada9a856d499a"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Sat Nov 24 22:10:29 2007 -0200"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 14:55:00 2008 -0800"
      },
      "message": "[CCID2]: Remove redundant ack-counting variable\n\nThe code used two different variables to count Acks, one of them redundant.\nThis patch reduces the number of Ack counters to one.\n\nThe type of the Ack counter has also been changed to u32 (twice the range of int);\nand the variable has been renamed into `packets_acked\u0027 - for consistency with\nRFC 3465 (and similarly named variables are used by TCP and SCTP).\n\nLastly, a slightly less aggressive `maxincr\u0027 increment is used (for even Ack Ratios,\nmaxincr was Ack Ratio/2 + 1 instead of Ack Ratio/2).\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nAcked-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "83399361c30f2ffae20ee348ba9ada9a856d499a",
      "tree": "51f5399c9d394ab4ec1483d7bb908566a19e8792",
      "parents": [
        "da98e0b5d4c1f88b7c9e63e8918783cd4905be2b"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Sat Nov 24 22:09:35 2007 -0200"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 14:54:59 2008 -0800"
      },
      "message": "[CCID2]: Remove redundant synchronisation variable\n\nThis removes the synchronisation variable `ccid2hctx_sendwait\u0027, which is set to 1\nwhen the CCID2 sender may send a new packet, and which is set to 0 otherwise\n\nThe variable is redundant, since it is only used in combination with the hc_tx_send_packet/\nhc_tx_packet_sent function pair. Both functions are called under socket lock, so the\nfollowing happens when the CCID2 may send a new packet:\n\n * it sets sendwait \u003d 1 in tx_send_packet and returns 0;\n * the subsequent call to tx_packet_sent clears the sendwait flag;\n * since tx_send_packet returns 0 if and only if sendwait \u003d\u003d 1, the BUG_ON condition\n   in tx_packet_sent is never satisfied, since that function is never called when\n   tx_send_packet returns a value different from 0 (cf. dccp_write_xmit);\n * the call to tx_packet_sent clears the flag so that the condition \"!sendwait\" is\n   true the next time tx_packet_sent is called.\n\nIn other words, it is sufficient to just return 0 / not-0 to synchronise tx_send_packet\nand tx_packet_sent -- which is what the patch does.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nAcked-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "da98e0b5d4c1f88b7c9e63e8918783cd4905be2b",
      "tree": "4a0dcc5d424b325b67c3b9f7d9a90dea9a4b1780",
      "parents": [
        "95b21d7e9d099f1cffca08e40f292d6658a88b3c"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Sat Nov 24 22:08:27 2007 -0200"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 14:54:59 2008 -0800"
      },
      "message": "[CCID2]: Redundant debugging output\n\nThis reduces the amount of redundant debugging messages:\n\n * pipe/cwnd are printed in both tx_send_packet() and tx_packet_sent().\n   Both functions are called immediately after one another, so one occurrence is sufficient.\n\n * Since tx_packet_sent() prints pipe/cwnd already, the second printk for pipe is redundant.\n\n * In tx_packet_sent() the check_sanity function is called twice (at the begin and at the end).\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nAcked-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "95b21d7e9d099f1cffca08e40f292d6658a88b3c",
      "tree": "23f30c58c1bbe6344c6077552b4220a442b94624",
      "parents": [
        "3deeadd74bbf916b502d307222833ffcf68db557"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Sat Nov 24 22:06:52 2007 -0200"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 14:54:58 2008 -0800"
      },
      "message": "[CCID2]: Replace pipe assignment-function with assignment\n\nThe function ccid2_change_pipe only does an assignment. This patch simplifies the code by\nreplacing the function with the assignment it performs.\n\nFurthermore, the type of pipe is promoted from `signed\u0027 to unsigned (increasing the range).\nAs a result, a BUG_ON test for negative values now becomes obsolete (for safety not removed,\nbut replaced with a less annoying `DCCP_BUG\u0027).\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nSigned-off-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "3deeadd74bbf916b502d307222833ffcf68db557",
      "tree": "86f33bdcbab3a6b48157e6aa381a5a1668935ed7",
      "parents": [
        "63df18ad7fb91c65dafc89d3cf94a58a486ad416"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Sat Nov 24 22:05:51 2007 -0200"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 14:54:57 2008 -0800"
      },
      "message": "[CCID2]: Replace cwnd assignment-function with assignment\n\nThe current function ccid2_change_cwnd in effect makes only an assignment, as\nthe test whether cwnd has reached 0 is only required when cwnd is halved.\n\nThis patch simplifies the code by replacing the function with the assignment\nit performs.\n\nFurthermore, since ssthresh derives from cwnd and appears in many assignments and\ncomparisons, the type of ssthresh has also been changed to match that of cwnd.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nSigned-off-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "63df18ad7fb91c65dafc89d3cf94a58a486ad416",
      "tree": "63172fb7125c990516430ef8b4e50648079d89fd",
      "parents": [
        "7792cd8885954eb7ac38e781a7a9faae5a80a3d8"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Sat Nov 24 22:04:35 2007 -0200"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 14:54:57 2008 -0800"
      },
      "message": "[CCID2]: Replace read-only variable with constant\n\nThis replaces the field member `numdupack\u0027, which was used as a read-only\nconstant in the code, with a #define.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nSigned-off-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "7792cd8885954eb7ac38e781a7a9faae5a80a3d8",
      "tree": "4f96ef45b1ab85eb4b1d79d16d11e2bc8bc27051",
      "parents": [
        "900bfed4718126e6c32244903b6f43e0990d04ad"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Sat Nov 24 22:01:56 2007 -0200"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 14:54:56 2008 -0800"
      },
      "message": "[CCID2]: Remove unused variable\n\nThis removes a variable `ccid2hctx_sent\u0027 which is incremented but\nnever referenced/read (i.e., dead code).\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nSigned-off-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "900bfed4718126e6c32244903b6f43e0990d04ad",
      "tree": "d4644ea4770657046d762d9997d7a8e1d794ff94",
      "parents": [
        "b00d2bbc45a287c9a72374582ce42205f3412419"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Sat Nov 24 21:58:33 2007 -0200"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 14:54:55 2008 -0800"
      },
      "message": "[CCID2]: Disable broken Ack Ratio adaptation algorithm\n\nThis comments out a problematic section comprising a half-finished algorithm:\n\n - The variable `ccid2hctx_ackloss\u0027 is never initialised to a value different from 0 and\n   hence in fact is a read-only constant.\n - The `arsent\u0027 variable counts packets other than Acks (it is incremented for every packet),\n   and there is no test for Ack Loss.\n - The concept of counting Acks as such leads to a complex calculation, and the calculation\n   at the moment is inconsistent with this concept.\n   The problem is that the number of Acks - rather than the number of windows - is counted,\n   which leads to a complex (cubic/quadratic) expression - this is not even implemented.\n\nIn its current state, the commented-out algorithm interfers with normal processing by\nchanging Ack Ratio incorrectly, and at the wrong times.\n\nA new algorithm is necessary, which will not necessarily use the same variables as used by\nthe unfinished one; hence the old variables have been removed.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nAcked-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "b00d2bbc45a287c9a72374582ce42205f3412419",
      "tree": "22a301fc6d05fe98b142cf53ec75967e847ac02e",
      "parents": [
        "e18d7a9857cb620a8f70622c4e400be477c264cf"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Sat Nov 24 21:44:30 2007 -0200"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 14:54:55 2008 -0800"
      },
      "message": "[CCID2]: Larger initial windows also for CCID2\n\nRFC 4341, sec. 5 states that \"The cwnd parameter is initialized to at most\nfour packets for new connections, following the rules from [RFC3390]\", which\nis implemented by this patch.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nAcked-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "d50ad163e6db2dcc365b8d02b30350220f86df04",
      "tree": "56998d89dcf4b748c09b4f5fe82bd2b7742ea3cb",
      "parents": [
        "df054e1d00fdafa2e2920319df326ddb3f0d0413"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Sat Nov 24 21:40:24 2007 -0200"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 14:54:53 2008 -0800"
      },
      "message": "[CCID2]: Deadlock and spurious timeouts when Ack Ratio \u003e cwnd\n\nThis patch removes a bug in the current code. I agree with Andrea\u0027s comment\nthat there is a problem here but the way it is treated does not fix it.\n\nThe problem is that whenever Ack Ratio \u003e cwnd, starvation/deadlock occurs:\n * the receiver will not send an Ack until (Ack Ratio - cwnd) data packets\n   have arrived;\n * the sender will not send any data packet before the receipt of an Ack\n   advances the send window.\nThe only way that the connection then progresses was via RTO timeout. In one\nextreme case (bulk transfer), it was observed that this happened for every single\npacket; i.e. hundreds of packets, each a RTO timeout of 1..3 seconds apart:\na transfer which normally would take a fraction of a second thus grew to\nseveral minutes.\n\nThe solution taken by this approach is to observe the relation\n\n                   \"Ack Ratio \u003c\u003d cwnd\"\n\nby using the constraint (1) from RFC 4341, 6.1.2; i.e. set\n\n                 Ack Ratio \u003d ceil(cwnd / 2)\n\nand update it whenever either Ack Ratio or cwnd change. This ensures that\nthe deadlock problem can not arise.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nAcked-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "df054e1d00fdafa2e2920319df326ddb3f0d0413",
      "tree": "4c5178212391dc2b1fe0d329da5e8552bcab4a55",
      "parents": [
        "cfbbeabc8864902c4af1c0cadf0972b352930a26"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Sat Nov 24 21:32:53 2007 -0200"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 14:54:53 2008 -0800"
      },
      "message": "[CCID2]: Don\u0027t assign negative values to Ack Ratio\n\nSince it makes not sense to assign negative values to Ack Ratio, this\npatch disallows this possibility.\n\nAs a consequence, a Bug test for negative Ack Ratio values becomes obsolete.\n\nFurthermore, a check against overflow (as Ack Ratio may not exceed 2 bytes,\ndue to RFC 4340, 11.3) has been added.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nAcked-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "cfbbeabc8864902c4af1c0cadf0972b352930a26",
      "tree": "90b544b5ad57bd49c25715a595ccd23d227dd714",
      "parents": [
        "3de5489f47febe0333b142e0eb6389b9924b2634"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Sat Nov 24 20:43:59 2007 -0200"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 14:54:52 2008 -0800"
      },
      "message": "[CCID2]: Fix sequence number arithmetic/comparisons\n\nThis replaces use of normal subtraction with modulo-48 subtraction.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nAcked-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "3de5489f47febe0333b142e0eb6389b9924b2634",
      "tree": "6ac340c65f64245d14c21a4bca03580c3d9789fe",
      "parents": [
        "a47c51044a77124ce66cd8513bba6f4d7673e43d"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Sat Nov 24 20:37:48 2007 -0200"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 14:54:51 2008 -0800"
      },
      "message": "[CCID2]: Bug in reading Ack Vectors\n\nIn CCID2 the receiver-history is sorted in ascending order of sequence number,\nbut the processing of received Ack Vectors requires the list traversal in the\nopposite direction.\n\nThe current code has a bug in this regard: the list traversal is upwards. As a\nconsequence, only Ack Vectors with a run length of 1 will pass, in all other\nAck Vectors the remaining (acked) sequence numbers are missed, and may later\nfalsely be identified as lost.\n\nNote: This bug is only visible when Ack Ratio \u003e 1, since otherwise the run\n      lengths of Ack Vectors are 0.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nSigned-off-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "6d57b43bf810cd66ccf252c04ba65c3e8e56cbb1",
      "tree": "cd3ed95ee320ce230ce1c94f5fed52af4df4c452",
      "parents": [
        "e333b3edc489151afda2a4f6c798842c64cb67a4"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Wed Nov 21 10:11:52 2007 -0200"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 14:54:46 2008 -0800"
      },
      "message": "[DCCP]: Remove redundant dependency on IP_DCCP\n\nThis cleans up the consequences of an earlier patch which\nintroduced the `if IP_DCCP\u0027 clause into net/dccp/Kconfig.\n\nThe CCID Kconfig menu is sourced within this clause; as a\nconsequence, all tests of type `depends on IP_DCCP\u0027 are now\nredundant.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nSigned-off-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "e333b3edc489151afda2a4f6c798842c64cb67a4",
      "tree": "b392052fe3a4c8cdc4d0026709d1b9cd5e215921",
      "parents": [
        "ebe6f7e73c3efec1de295205806b4550fcb468cd"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Wed Nov 21 10:09:56 2007 -0200"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 14:54:46 2008 -0800"
      },
      "message": "[DCCP]: Promote CCID2 as default CCID\n\nThis patch addresses the following problems:\n\n 1. DCCP relies for its proper functioning on having at least one CCID module\n    enabled (as in TCP plugable congestion control). Currently it is possible to\n    disable both CCIDs and thus leave the DCCP module in a compiled, but entirely\n    non-functional state: no sockets can be created when no CCID is available.\n    Furthermore, the protocol is (again like TCP) not intended to be used without\n    CCIDs. Last, a non-empty CCID list is needed for doing CCID feature negotiation.\n\n 2. Internally the default CCID that is advertised by the Linux host is set to CCID2\n    (DCCPF_INITIAL_CCID in include/linux/dccp.h). Disabling CCID2 in the Kconfig\n    menu without changing the defaults leads to a failure `module not found\u0027 when\n    trying to load the dccp module (which internally tries to load the default CCID).\n\n 3. The specification (RFC 4340, sec. 10) treats CCID2 somewhat like a\n    `minimum common denominator\u0027; the specification says that:\n\n    * \"New connections start with CCID 2 for both endpoints\"\n\n    * \"A DCCP implementation intended for general use, such as an implementation in a\n       general-purpose operating system kernel, SHOULD implement at least CCID 2.\n       The intent is to make CCID 2 broadly available for interoperability [...]\"\n\n    Providing CCID2 as minimum-required CCID (like Reno/Cubic in TCP) thus seems reasonable.\n\nHence this patch automatically selects CCID2 when DCCP is enabled. Documentation also added.\n\nDiscussions with Ian McDonald on this subject are gratefully acknowledged.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nSigned-off-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "c3ada46a009001e144b29736880962f24ee2afdf",
      "tree": "a475095e2ef5bff2f0d94a24ca94776578fe1c75",
      "parents": [
        "a5358fdc9c52e44d79dcd144375e089e166508d7"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Tue Nov 20 18:09:59 2007 -0200"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 14:54:43 2008 -0800"
      },
      "message": "[CCID3]: Inline for moving average\n\nThe moving average computation occurs so frequently in the CCID 3 code that\nit merits an inline function  of its own. This is uses a suggestion by\nArnaldo as per http://www.mail-archive.com/dccp@vger.kernel.org/msg01662.html\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nSigned-off-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "a5358fdc9c52e44d79dcd144375e089e166508d7",
      "tree": "ddd84d7a6115700ff93f24d367d59c8ad03a9adc",
      "parents": [
        "eb279b79c46be767ecffadaa8ed6be3e3555e93d"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Tue Nov 20 18:01:59 2007 -0200"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 14:54:42 2008 -0800"
      },
      "message": "[CCID3]: Accurately determine idle \u0026 application-limited periods\n\nThis fixes/updates the handling of idle and application-limited periods in CCID3,\nwhich currently is broken: there is no detection as to how long a sender has been\nidle - there is only one flag which is toggled in between function calls.\n\nBeing obsolete now, the `idle\u0027 flag is removed.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nSigned-off-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "eb279b79c46be767ecffadaa8ed6be3e3555e93d",
      "tree": "f7695df96e2d129beb65263617ac7ed533e1689a",
      "parents": [
        "6c08b2cf4843788e66a5e69b5512538e686ae3e3"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Tue Nov 20 18:00:39 2007 -0200"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 14:54:42 2008 -0800"
      },
      "message": "[CCID3]: Ignore trivial amounts of elapsed time\n\nThis patch fixes a previously undiscovered bug; the problem is in computing\nthe elapsed time as the time between `receiving\u0027 the packet (i.e. skb enters\nCCID module) and sending feedback:\n\n     - there is no layer-processing, queueing, or delay involved,\n     - hence the elapsed time is in the order of 1 function call\n     - this is in the dimension of maximally 50..100usec\n     - which renders the use of elapsed time almost entirely useless.\n\nThe fix is simply to ignore such trivial amounts of elapsed time.\n\nAs a further advantage, the now useless elapsed_time field can be removed from\nthe socket, which reduces the socket structure by another four bytes.\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nSigned-off-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "6c08b2cf4843788e66a5e69b5512538e686ae3e3",
      "tree": "ec4ddefc1600d0fed860670e4d1457632d37b1f1",
      "parents": [
        "ebb53d75657f86587ac8cf3e38ab0c860a8e3d4f"
      ],
      "author": {
        "name": "Gerrit Renker",
        "email": "gerrit@erg.abdn.ac.uk",
        "time": "Tue Nov 20 17:33:17 2007 -0200"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 14:54:41 2008 -0800"
      },
      "message": "[CCID3]: Revert use of MSS instead of s\n\nThis updates the CCID3 code with regard to two instances of using `MSS\u0027 in place of `s\u0027:\n\n 1. The RFC3390-based initial rate: both rfc3448bis as well as the Faster Restart\n    draft now consistently use `s\u0027 instead of MSS.\n\n 2. Now agrees with section 4.2 of rfc3448bis: \"If the sender is ready to send data when\n    it does not yet have a round trip sample, the value of X is set to s bytes per\n    second, for segment size s [...]\"\n\nSigned-off-by: Gerrit Renker \u003cgerrit@erg.abdn.ac.uk\u003e\nSigned-off-by: Ian McDonald \u003cian.mcdonald@jandi.co.nz\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "b24b8a247ff65c01b252025926fe564209fae4fc",
      "tree": "8a9e0ea1e24b4733d8b9433d41877659505e9da4",
      "parents": [
        "a92aa318b4b369091fd80433c80e62838db8bc1c"
      ],
      "author": {
        "name": "Pavel Emelyanov",
        "email": "xemul@openvz.org",
        "time": "Wed Jan 23 21:20:07 2008 -0800"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 14:53:35 2008 -0800"
      },
      "message": "[NET]: Convert init_timer into setup_timer\n\nMany-many code in the kernel initialized the timer-\u003efunction\nand  timer-\u003edata together with calling init_timer(timer). There\nis already a helper for this. Use it for networking code.\n\nThe patch is HUGE, but makes the code 130 lines shorter\n(98 insertions(+), 228 deletions(-)).\n\nSigned-off-by: Pavel Emelyanov \u003cxemul@openvz.org\u003e\nAcked-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "5e8e034cc5154abd639aa5c05d13e24e535c6a9c",
      "tree": "4d28c765f9fc0a6e909038339f2f13388be6673c",
      "parents": [
        "f4ab2f72e9340207ae95e2a7622a74220a61f46a"
      ],
      "author": {
        "name": "Joe Perches",
        "email": "joe@perches.com",
        "time": "Thu Dec 20 13:59:39 2007 -0800"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Thu Dec 20 13:59:39 2007 -0800"
      },
      "message": "[DCCP]: Spelling fixes\n\nSigned-off-by: Joe Perches \u003cjoe@perches.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "4756daa3b63e806d8ef093c8b4b5f56ee34250a2",
      "tree": "55a3d11dfd4615f02142aa3e94123e77db4797a2",
      "parents": [
        "5487796f0c9475586277a0a7a91211ce5746fa6a"
      ],
      "author": {
        "name": "Joe Perches",
        "email": "joe@perches.com",
        "time": "Mon Nov 19 23:46:02 2007 -0800"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Nov 19 23:46:02 2007 -0800"
      },
      "message": "[DCCP]: Add missing \"space\"\n\nSigned-off-by: Joe Perches \u003cjoe@perches.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    }
  ],
  "next": "24c667db59a9cc4caaafe4f77f6f4ef85899a454"
}
