20 Oct, 2013

1 commit

  • There are a mix of function prototypes with and without extern
    in the kernel sources. Standardize on not using extern for
    function prototypes.

    Function prototypes don't need to be written with extern.
    extern is assumed by the compiler. Its use is as unnecessary as
    using auto to declare automatic/local variables in a block.

    Signed-off-by: Joe Perches
    Signed-off-by: David S. Miller

    Joe Perches
     

11 Jul, 2012

1 commit


15 Nov, 2010

4 commits

  • This patch replaces an almost identical replication of code: large parts
    of dccp_parse_options() re-appeared as ccid2_ackvector() in ccid2.c.

    Apart from the duplication, this caused two more problems:
    1. CCIDs should not need to be concerned with parsing header options;
    2. one can not assume that Ack Vectors appear as a contiguous area within an
    skb, it is legal to insert other options and/or padding in between. The
    current code would throw an error and stop reading in such a case.

    Since Ack Vectors provide CCID-specific information, they are now processed
    by the CCID directly, separating this functionality from the main DCCP code.

    Signed-off-by: Gerrit Renker

    Gerrit Renker
     
  • This removes
    * functions for which updates have been provided in the preceding patches and
    * the @av_vec_len field - it is no longer necessary since the buffer length is
    now always computed dynamically.

    Signed-off-by: Gerrit Renker

    Gerrit Renker
     
  • This patch updates the code which registers new packets as received, using the
    new circular buffer interface. It contributes a new algorithm which
    * supports both tail/head pointers and buffer wrap-around and
    * deals with overflow (head/tail move in lock-step).

    Signed-off-by: Gerrit Renker

    Gerrit Renker
     
  • This provides a routine to consistently update the buffer state when the
    peer acknowledges receipt of Ack Vectors; updating state in the list of Ack
    Vectors as well as in the circular buffer.

    While based on RFC 4340, several additional (and necessary) precautions were
    added to protect the consistency of the buffer state. These additions are
    essential, since analysis and experience showed that the basic algorithm was
    insufficient for this task (which lead to problems that were hard to debug).

    The algorithm now
    * deals with HC-sender acknowledging to HC-receiver and vice versa,
    * keeps track of the last unacknowledged but received seqno in tail_ackno,
    * has special cases to reset the overflow condition when appropriate,
    * is protected against receiving older information (would mess up buffer state).

    Signed-off-by: Gerrit Renker

    Gerrit Renker
     

11 Nov, 2010

3 commits

  • This completes the implementation of a circular buffer for Ack Vectors, by
    extending the current (linear array-based) implementation. The changes are:

    (a) An `overflow' flag to deal with the case of overflow. As before, dynamic
    growth of the buffer will not be supported; but code will be added to deal
    robustly with overflowing Ack Vector buffers.

    (b) A `tail_seqno' field. When naively implementing the algorithm of Appendix A
    in RFC 4340, problems arise whenever subsequent Ack Vector records overlap,
    which can bring the entire run length calculation completely out of synch.
    (This is documented on http://www.erg.abdn.ac.uk/users/gerrit/dccp/notes/\
    ack_vectors/tracking_tail_ackno/ .)
    (c) The buffer length is now computed dynamically (i.e. current fill level),
    as the span between head to tail.

    As a result, dccp_ackvec_pending() is now simpler - the #ifdef is no longer
    necessary since buf_empty is always true when IP_DCCP_ACKVEC is not configured.

    Signed-off-by: Gerrit Renker

    Gerrit Renker
     
  • This patch
    * separates Ack Vector housekeeping code from option-insertion code;
    * shifts option-specific code from ackvec.c into options.c;
    * introduces a dedicated routine to take care of the Ack Vector records;
    * simplifies the dccp_ackvec_insert_avr() routine: the BUG_ON was redundant,
    since the list is automatically arranged in descending order of ack_seqno.

    Signed-off-by: Gerrit Renker

    Gerrit Renker
     
  • This patch brings the Ack Vector interface up to date. Its main purpose is
    to lay the basis for the subsequent patches of this set, which will use the
    new data structure fields and routines.

    There are no real algorithmic changes, rather an adaptation:

    (1) Replaced the static Ack Vector size (2) with a #define so that it can
    be adapted (with low loss / Ack Ratio, a value of 1 works, so 2 seems
    to be sufficient for the moment) and added a solution so that computing
    the ECN nonce will continue to work - even with larger Ack Vectors.

    (2) Replaced the #defines for Ack Vector states with a complete enum.

    (3) Replaced #defines to compute Ack Vector length and state with general
    purpose routines (inlines), and updated code to use these.

    (4) Added a `tail' field (conversion to circular buffer in subsequent patch).

    (5) Updated the (outdated) documentation for Ack Vector struct.

    (6) All sequence number containers now trimmed to 48 bits.

    (7) Removal of unused bits:
    * removed dccpav_ack_nonce from struct dccp_ackvec, since this is already
    redundantly stored in the `dccpavr_ack_nonce' (of Ack Vector record);
    * removed Elapsed Time for Ack Vectors (it was nowhere used);
    * replaced semantics of dccpavr_sent_len with dccpavr_ack_runlen, since
    the code needs to be able to remember the old run length;
    * reduced the de-/allocation routines (redundant / duplicate tests).

    Signed-off-by: Gerrit Renker

    Gerrit Renker
     

02 Mar, 2009

1 commit

  • This patch resolves a long-standing FIXME to dynamically update the Maximum
    Packet Size depending on actual options usage.

    It uses the flags set by the feature-negotiation infrastructure to compute
    the required header option size.

    Most options are fixed-size, a notable exception are Ack Vectors (required
    currently only by CCID-2). These can have any length between 3 and 1020
    bytes. As a result of testing, 16 bytes (2 bytes for type/length plus 14 Ack
    Vector cells) have been found to be sufficient for loss-free situations.

    There are currently no CCID-specific header options which may appear on data
    packets, thus it is not necessary to define a corresponding CCID field as
    suggested in the old comment.

    Further changes:
    ----------------
    Adjusted the type of 'cur_mps' to match the unsigned return type of the
    function.

    Signed-off-by: Gerrit Renker
    Acked-by: Ian McDonald
    Signed-off-by: David S. Miller

    Gerrit Renker
     

05 Jan, 2009

2 commits

  • This patch cleans up after integrating the CCID modules and, in addition,

    * moves the if/else cases from ccid_delete() into ccid_hc_{tx,rx}_delete();
    * removes the 'gfp' argument to ccid_new() - since it is always gfp_any().

    Signed-off-by: Gerrit Renker
    Signed-off-by: David S. Miller

    Gerrit Renker
     
  • Based on Arnaldo's earlier patch, this patch integrates the standardised
    CCID congestion control plugins (CCID-2 and CCID-3) of DCCP with dccp.ko:

    * enables a faster connection path by eliminating the need to always go
    through the CCID registration lock;

    * updates the implementation to use only a single array whose size equals
    the number of configured CCIDs instead of the maximum (256);

    * since the CCIDs are now fixed array elements, synchronization is no
    longer needed, simplifying use and implementation.

    CCID-2 is suggested as minimum for a basic DCCP implementation (RFC 4340, 10);
    CCID-3 is a standards-track CCID supported by RFC 4342 and RFC 5348.

    Signed-off-by: Gerrit Renker
    Signed-off-by: David S. Miller

    Gerrit Renker
     

24 Nov, 2008

1 commit

  • With this patch, TX/RX CCIDs can now be changed on a per-connection
    basis, which overrides the defaults set by the global sysctl variables
    for TX/RX CCIDs.

    To make full use of this facility, the remaining patches of this patch
    set are needed, which track dependencies and activate negotiated
    feature values.

    Signed-off-by: Gerrit Renker
    Signed-off-by: David S. Miller

    Gerrit Renker
     

29 Jan, 2008

1 commit

  • This is reduces the length of the struct ackvec/ackvec_record fields. It is
    a purely text-based replacement:

    s#dccpavr_#avr_#g;
    s#dccpav_#av_#g;

    and increases readability somewhat.

    Signed-off-by: Gerrit Renker
    Signed-off-by: Arnaldo Carvalho de Melo
    Signed-off-by: David S. Miller

    Gerrit Renker
     

21 Dec, 2007

1 commit


11 Oct, 2007

1 commit


03 Dec, 2006

2 commits


25 Oct, 2006

1 commit

  • Updates the references to spec documents throughout the code, taking into
    account that

    * the DCCP, CCID 2, and CCID 3 drafts all became RFCs in March this year

    * RFC 1063 was obsoleted by RFC 1191

    * draft-ietf-tcpimpl-pmtud-0x.txt was published as an Informational
    RFC, RFC 2923 on 2000-09-22.

    All references verified.

    Signed-off-by: Gerrit Renker
    Signed-off-by: Arnaldo Carvalho de Melo
    Signed-off-by: David S. Miller

    Gerrit Renker
     

23 Sep, 2006

1 commit


01 Jul, 2006

1 commit


21 Mar, 2006

3 commits


04 Jan, 2006

1 commit


09 Oct, 2005

1 commit

  • - added typedef unsigned int __nocast gfp_t;

    - replaced __nocast uses for gfp flags with gfp_t - it gives exactly
    the same warnings as far as sparse is concerned, doesn't change
    generated code (from gcc point of view we replaced unsigned int with
    typedef) and documents what's going on far better.

    Signed-off-by: Al Viro
    Signed-off-by: Linus Torvalds

    Al Viro
     

18 Sep, 2005

1 commit