20 Dec, 2011

1 commit

  • DaveM said:
    Please, this kind of stuff rots forever and not using bool properly
    drives me crazy.

    Joe Perches gave me the spatch script:

    @@
    bool b;
    @@
    -b = 0
    +b = false
    @@
    bool b;
    @@
    -b = 1
    +b = true

    I merely installed coccinelle, read the documentation and took credit.

    Signed-off-by: Rusty Russell
    Signed-off-by: David S. Miller

    Rusty Russell
     

01 Aug, 2011

3 commits

  • If a connection is in the OPEN state, remove feature negotiation Confirm
    options from the list of options after sending them once; as such options
    are NOT supposed to be retransmitted and are ONLY supposed to be sent in
    response to a Change option (RFC 4340 6.2).

    Signed-off-by: Samuel Jero
    Acked-by: Gerrit Renker

    Samuel Jero
     
  • This patch adds the receiver side and the (fast-path) activation part for
    dynamic changes of non-negotiable (NN) parameters in (PART)OPEN state.

    Signed-off-by: Gerrit Renker
    Signed-off-by: Samuel Jero
    Acked-by: Ian McDonald

    Gerrit Renker
     
  • In contrast to static feature negotiation at the begin of a connection, this
    patch introduces support for exchange of dynamically changing options.

    Such an update/exchange is necessary in at least two cases:
    * CCID-2's Ack Ratio (RFC 4341, 6.1.2) which changes during the connection;
    * Sequence Window values that, as per RFC 4340, 7.5.2, should be sent "as
    the connection progresses".

    Both are non-negotiable (NN) features, which means that no new capabilities
    are negotiated, but rather that changes in known parameters are brought
    up-to-date at either end.

    Thse characteristics are reflected by the implementation:
    * only NN options can be exchanged after connection setup;
    * an ack is scheduled directly after activation to speed up the update;
    * CCIDs may request changes to an NN feature even if a negotiation for that
    feature is already underway: this is required by CCID-2, where changes in
    cwnd necessitate Ack Ratio changes, such that the previous Ack Ratio (which
    is still being negotiated) would cause irrecoverable RTO timeouts (thanks
    to work by Samuel Jero).

    Signed-off-by: Gerrit Renker
    Signed-off-by: Samuel Jero
    Acked-by: Ian McDonald

    Gerrit Renker
     

07 Oct, 2010

1 commit


30 Mar, 2010

1 commit

  • …it slab.h inclusion from percpu.h

    percpu.h is included by sched.h and module.h and thus ends up being
    included when building most .c files. percpu.h includes slab.h which
    in turn includes gfp.h making everything defined by the two files
    universally available and complicating inclusion dependencies.

    percpu.h -> slab.h dependency is about to be removed. Prepare for
    this change by updating users of gfp and slab facilities include those
    headers directly instead of assuming availability. As this conversion
    needs to touch large number of source files, the following script is
    used as the basis of conversion.

    http://userweb.kernel.org/~tj/misc/slabh-sweep.py

    The script does the followings.

    * Scan files for gfp and slab usages and update includes such that
    only the necessary includes are there. ie. if only gfp is used,
    gfp.h, if slab is used, slab.h.

    * When the script inserts a new include, it looks at the include
    blocks and try to put the new include such that its order conforms
    to its surrounding. It's put in the include block which contains
    core kernel includes, in the same order that the rest are ordered -
    alphabetical, Christmas tree, rev-Xmas-tree or at the end if there
    doesn't seem to be any matching order.

    * If the script can't find a place to put a new include (mostly
    because the file doesn't have fitting include block), it prints out
    an error message indicating which .h file needs to be added to the
    file.

    The conversion was done in the following steps.

    1. The initial automatic conversion of all .c files updated slightly
    over 4000 files, deleting around 700 includes and adding ~480 gfp.h
    and ~3000 slab.h inclusions. The script emitted errors for ~400
    files.

    2. Each error was manually checked. Some didn't need the inclusion,
    some needed manual addition while adding it to implementation .h or
    embedding .c file was more appropriate for others. This step added
    inclusions to around 150 files.

    3. The script was run again and the output was compared to the edits
    from #2 to make sure no file was left behind.

    4. Several build tests were done and a couple of problems were fixed.
    e.g. lib/decompress_*.c used malloc/free() wrappers around slab
    APIs requiring slab.h to be added manually.

    5. The script was run on all .h files but without automatically
    editing them as sprinkling gfp.h and slab.h inclusions around .h
    files could easily lead to inclusion dependency hell. Most gfp.h
    inclusion directives were ignored as stuff from gfp.h was usually
    wildly available and often used in preprocessor macros. Each
    slab.h inclusion directive was examined and added manually as
    necessary.

    6. percpu.h was updated not to include slab.h.

    7. Build test were done on the following configurations and failures
    were fixed. CONFIG_GCOV_KERNEL was turned off for all tests (as my
    distributed build env didn't work with gcov compiles) and a few
    more options had to be turned off depending on archs to make things
    build (like ipr on powerpc/64 which failed due to missing writeq).

    * x86 and x86_64 UP and SMP allmodconfig and a custom test config.
    * powerpc and powerpc64 SMP allmodconfig
    * sparc and sparc64 SMP allmodconfig
    * ia64 SMP allmodconfig
    * s390 SMP allmodconfig
    * alpha SMP allmodconfig
    * um on x86_64 SMP allmodconfig

    8. percpu.h modifications were reverted so that it could be applied as
    a separate patch and serve as bisection point.

    Given the fact that I had only a couple of failures from tests on step
    6, I'm fairly confident about the coverage of this conversion patch.
    If there is a breakage, it's likely to be something in one of the arch
    headers which should be easily discoverable easily on most builds of
    the specific arch.

    Signed-off-by: Tejun Heo <tj@kernel.org>
    Guess-its-ok-by: Christoph Lameter <cl@linux-foundation.org>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Lee Schermerhorn <Lee.Schermerhorn@hp.com>

    Tejun Heo
     

06 Aug, 2009

1 commit


22 Jan, 2009

4 commits

  • Since all feature-negotiation processing now takes place in feat.c,
    functions for producing verbose debugging output are concentrated
    there.

    New functions to print out values, entry records, and options are
    provided, and also a macro is defined to not always have the function
    name in the output line.

    Thanks a lot to Wei Yongjun and Giuseppe Galeota for help and
    discussion with an earlier revision of this patch.

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

    Gerrit Renker
     
  • This patch takes care of initialising and type-checking sysctls
    related to feature negotiation. Type checking is important since some
    of the sysctls now directly impact the feature-negotiation process.

    The sysctls are initialised with the known default values for each
    feature. For the type-checking the value constraints from RFC 4340
    are used:

    * Sequence Window uses the specified Wmin=32, the maximum is ulong (4 bytes),
    tested and confirmed that it works up to 4294967295 - for Gbps speed;
    * Ack Ratio is between 0 .. 0xffff (2-byte unsigned integer);
    * CCIDs are between 0 .. 255;
    * request_retries, retries1, retries2 also between 0..255 for good measure;
    * tx_qlen is checked to be non-negative;
    * sync_ratelimit remains as before.

    Notes:
    ------
    1. Die s@sysctl_dccp_feat@sysctl_dccp@g since the sysctls are now in feat.c.
    2. As pointed out by Arnaldo, the pattern of type-checking repeats itself in
    other places, sometimes with exactly the same kind of definitions (e.g.
    "static int zero;"). It may be a good idea (kernel janitors?) to consolidate
    type checking. For the sake of keeping the changeset small and in order not
    to affect other subsystems, I have not strived to generalise here.

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

    Gerrit Renker
     
  • This adds full support for local/remote Sequence Window feature, from which the
    * sequence-number-validity (W) and
    * acknowledgment-number-validity (W') windows
    derive as specified in RFC 4340, 7.5.3.

    Specifically, the following is contained in this patch:
    * integrated new socket fields into dccp_sk;
    * updated the update_gsr/gss routines with regard to these fields;
    * updated handler code: the Sequence Window feature is located at the TX side,
    so the local feature is meant if the handler-rx flag is false;
    * the initialisation of `rcv_wnd' in reqsk is removed, since
    - rcv_wnd is not used by the code anywhere;
    - sequence number checks are not done in the LISTEN state (cf. 7.5.3);
    - dccp_check_req checks the Ack number validity more rigorously;
    * the `struct dccp_minisock' became empty and is now removed.

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

    Gerrit Renker
     
  • This initialises feature negotiation from two tables, which are in
    turn are initialised from sysctls.

    As a novel feature, specifics of the implementation (e.g. that short
    seqnos and ECN are not yet available) are advertised for robustness.

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

    Gerrit Renker
     

05 Jan, 2009

2 commits


08 Dec, 2008

3 commits

  • Updating the NDP count feature is handled automatically now:
    * for CCID-2 it is disabled, since the code does not use NDP counts;
    * for CCID-3 it is enabled, as NDP counts are used to determine loss lengths.

    Allowing the user to change NDP values leads to unpredictable and failing
    behaviour, since it is then possible to disable NDP counts even when they
    are needed (e.g. in CCID-3).

    This means that only those user settings are sensible that agree with the
    values for Send NDP Count implied by the choice of CCID. But those settings
    are already activated by the feature negotiation (CCID dependency tracking),
    hence this form of support is redundant.

    At startup the initialisation of the NDP count feature uses the default
    value of 0, which is done implicitly by the zeroing-out of the socket when
    it is allocated. If the choice of CCID or feature negotiation enables NDP
    count, this will then be updated via the NDP activation handler.

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

    Gerrit Renker
     
  • The TX/RX CCIDs of the minisock are now redundant: similar to the Ack Vector
    case, their value equals initially that of the sysctl, but at the end of
    feature negotiation may be something different.

    The old interface removed by this patch thus has been replaced by the newer
    interface to dynamically query the currently loaded CCIDs.

    Also removed are the constructors for the TX CCID and the RX CCID, since the
    switch "rx non-rx" is done by the handler in minisocks.c (and the handler
    is the only place in the code where CCIDs are loaded).

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

    Gerrit Renker
     
  • The code removed by this patch is no longer referenced or used, the added
    lines update documentation and copyrights.

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

    Gerrit Renker
     

02 Dec, 2008

5 commits

  • This patch provides the post-processing of feature negotiation state, after
    the negotiation has completed.

    To this purpose, handlers are used and added to the dccp_feat_table. Each
    handler is passed a boolean flag whether the RX or TX side of the feature
    is meant.

    Several handlers are provided already, new handlers can easily be added.

    The initialisation is now fully dynamic, i.e. CCIDs are activated only
    after the feature negotiation. The integration of this dynamic activation
    is done in the subsequent patches.

    Thanks to Wei Yongjun for pointing out the necessity of skipping over empty
    Confirm options while copying the negotiated feature values.

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

    Gerrit Renker
     
  • Analogous to the previous patch, this adds code to interpret incoming Confirm
    feature-negotiation options. Both functions operate on the feature-negotiation
    list of either the request_sock (server) or the dccp_sock (client).

    Thanks to Wei Yongjun for pointing out that it is overly restrictive to check
    the entire list of confirmed SP values.

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

    Gerrit Renker
     
  • This adds/replaces code for processing incoming ChangeL/R options.
    The main difference is that:
    * mandatory FN options are now interpreted inside the function
    (there are too many individual cases to do this externally);
    * the function returns an appropriate Reset code or 0,
    which is then used to fill in the data for the Reset packet.

    Old code, which is no longer used or referenced, has been removed.

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

    Gerrit Renker
     
  • This provides two functions to
    * reconcile preference lists (with appropriate return codes) and
    * reorder the preference list if successful reconciliation changed the
    preferred value.

    The patch also removes the old code for processing SP/NN Change options, since
    new code to process these is mostly there already; related references have been
    commented out.

    The code for processing Change options follows in the next patch.

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

    Gerrit Renker
     
  • This patch replaces the earlier insertion routine from options.c, so that
    code specific to feature negotiation can remain in feat.c. This is possible
    by calling a function already existing in options.c.

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

    Gerrit Renker
     

20 Nov, 2008

1 commit


17 Nov, 2008

2 commits

  • The previous setsockopt interface, which passed socket options via struct
    dccp_so_feat, is complicated/difficult to use. Continuing to support it leads to
    ugly code since the old approach did not distinguish between NN and SP values.

    This patch removes the old setsockopt interface and replaces it with two new
    functions to register NN/SP values for feature negotiation.
    These are essentially wrappers around the internal __feat_register functions,
    with checking added to avoid

    * wrong usage (type);
    * changing values while the connection is in progress.

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

    Gerrit Renker
     
  • This adds a hook to resolve features whose value depends on the choice of
    CCID. It is done at the server since it can only be done after the CCID
    values have been negotiated; i.e. the client will add its CCID preference
    list on the Change options sent in the Request, which will be reconciled
    with the local preference list of the server.

    The concept is documented on
    http://www.erg.abdn.ac.uk/users/gerrit/dccp/notes/feature_negotiation/\
    implementation_notes.html#ccid_dependencies

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

    Gerrit Renker
     

12 Nov, 2008

4 commits

  • This provides a missing link in the code chain, as several features implicitly
    depend and/or rely on the choice of CCID. Most notably, this is the Send Ack Vector
    feature, but also Ack Ratio and Send Loss Event Rate (also taken care of).

    For Send Ack Vector, the situation is as follows:
    * since CCID2 mandates the use of Ack Vectors, there is no point in allowing
    endpoints which use CCID2 to disable Ack Vector features such a connection;

    * a peer with a TX CCID of CCID2 will always expect Ack Vectors, and a peer
    with a RX CCID of CCID2 must always send Ack Vectors (RFC 4341, sec. 4);

    * for all other CCIDs, the use of (Send) Ack Vector is optional and thus
    negotiable. However, this implies that the code negotiating the use of Ack
    Vectors also supports it (i.e. is able to supply and to either parse or
    ignore received Ack Vectors). Since this is not the case (CCID-3 has no Ack
    Vector support), the use of Ack Vectors is here disabled, with a comment
    in the source code.

    An analogous consideration arises for the Send Loss Event Rate feature,
    since the CCID-3 implementation does not support the loss interval options
    of RFC 4342. To make such use explicit, corresponding feature-negotiation
    options are inserted which signal the use of the loss event rate option,
    as it is used by the CCID3 code.

    Lastly, the values of the Ack Ratio feature are matched to the choice of CCID.

    The patch implements this as a function which is called after the user has
    made all other registrations for changing default values of features.

    The table is variable-length, the reserved (and hence for feature-negotiation
    invalid, confirmed by considering section 19.4 of RFC 4340) feature number `0'
    is used to mark the end of the table.

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

    Gerrit Renker
     
  • This provides a data structure to record which CCIDs are locally supported
    and three accessor functions:
    - a test function for internal use which is used to validate CCID requests
    made by the user;
    - a copy function so that the list can be used for feature-negotiation;
    - documented getsockopt() support so that the user can query capabilities.

    The data structure is a table which is filled in at compile-time with the
    list of available CCIDs (which in turn depends on the Kconfig choices).

    Using the copy function for cloning the list of supported CCIDs is useful for
    feature negotiation, since the negotiation is now with the full list of available
    CCIDs (e.g. {2, 3}) instead of the default value {2}. This means negotiation
    will not fail if the peer requests to use CCID3 instead of CCID2.

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

    Gerrit Renker
     
  • Two registration routines, for SP and NN features, are provided by this patch,
    replacing a previous routine which was used for both feature types.

    These are internal-only routines and therefore start with `__feat_register'.

    It further exports the known limits of Sequence Window and Ack Ratio as symbolic
    constants.

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

    Gerrit Renker
     
  • This patch limits feature (capability) negotation to the connection setup phase:

    1. Although it is theoretically possible to perform feature negotiation at any
    time (and RFC 4340 supports this), in practice this is prohibitively complex,
    as it requires to put traffic on hold for each new negotiation.
    2. As a byproduct of restricting feature negotiation to connection setup, the
    feature-negotiation retransmit timer is no longer required. This part is now
    mapped onto the protocol-level retransmission.
    Details indicating why timers are no longer needed can be found on
    http://www.erg.abdn.ac.uk/users/gerrit/dccp/notes/feature_negotiation/\
    implementation_notes.html

    This patch disables anytime negotiation, subsequent patches work out full
    feature negotiation support for connection setup.

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

    Gerrit Renker
     

05 Nov, 2008

3 commits

  • This provides feature-negotiation initialisation for both DCCP sockets
    and DCCP request_sockets, to support feature negotiation during
    connection setup.

    It also resolves a FIXME regarding the congestion control
    initialisation.

    Thanks to Wei Yongjun for help with the IPv6 side of this patch.

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

    Gerrit Renker
     
  • This adds list initial fields and list management functions for the
    new feature negotiation implementation.

    Thanks to Arnaldo for suggestions and improvements.

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

    Gerrit Renker
     
  • A lookup table for feature-negotiation information, extracted from RFC
    4340/42, is provided by this patch. All currently known features can
    be found in this table, along with their feature location, their
    default value, and type.

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

    Gerrit Renker
     

06 May, 2008

1 commit

  • dccp_feat_change() validates length and on error is returning 1.
    This happens to work since call chain is checking for 0 == success,
    but this is returned to userspace, so make it a real error value.

    Signed-off-by: Chris Wright
    Acked-by: Arnaldo Carvalho de Melo
    Signed-off-by: David S. Miller

    Chris Wright
     

29 Jan, 2008

2 commits

  • This removes several `XXX' references which indicate a missing support
    for non-1-byte feature values: this is unnecessary, as all currently known
    (standardised) SP feature values are 1-byte quantities.

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

    Gerrit Renker
     
  • This removes two inlines which were both called in a single function only:

    1) dccp_feat_change() is always called with either DCCPO_CHANGE_L or DCCPO_CHANGE_R as argument
    * from dccp_set_socktopt_change() via do_dccp_setsockopt() with DCCP_SOCKOPT_CHANGE_R/L
    * from __dccp_feat_init() via dccp_feat_init() also with DCCP_SOCKOPT_CHANGE_R/L.

    Hence the dccp_feat_is_valid_type() is completely unnecessary and always returns true.

    2) Due to (1), the length test reduces to 'len >= 4', which in turn makes
    dccp_feat_is_valid_length() unnecessary.

    Furthermore, the inline function dccp_feat_is_reserved() was unfolded,
    since only called in a single place.

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

    Gerrit Renker
     

14 Aug, 2007

1 commit

  • There's a memory leak in net/dccp/feat.c::dccp_feat_empty_confirm(). If we
    hit the 'default:' case of the 'switch' statement, then we return without
    freeing 'opt', thus leaking 'struct dccp_opt_pend' bytes.

    The leak is fixed easily enough by adding a kfree(opt); before the return
    statement.

    The patch also changes the layout of the 'switch' to be more in line with
    CodingStyle.

    Signed-off-by: Jesper Juhl
    Acked-by: Ian McDonald
    Signed-off-by: Andrew Morton
    Signed-off-by: David S. Miller

    Jesper Juhl
     

11 Feb, 2007

1 commit


12 Dec, 2006

1 commit


03 Dec, 2006

3 commits

  • This reaps the benefit of the earlier patch, which changed the type of
    CCID 3 states to use enums, in that many conditions are now simplified
    and the number of possible (unexpected) values is greatly reduced.

    In a few instances, this also allowed to simplify pre-conditions; where
    care has been taken to retain logical equivalence.

    [DCCP]: Introduce a consistent BUG/WARN message scheme

    This refines the existing set of DCCP messages so that
    * BUG(), BUG_ON(), WARN_ON() have meaningful DCCP-specific counterparts
    * DCCP_CRIT (for severe warnings) is not rate-limited
    * DCCP_WARN() is introduced as rate-limited wrapper

    Using these allows a faster and cleaner transition to their original
    counterparts once the code has matured into a full DCCP implementation.

    Signed-off-by: Gerrit Renker
    Signed-off-by: Arnaldo Carvalho de Melo

    Gerrit Renker
     
  • Code diff stats:

    [acme@newtoy net-2.6.20]$ codiff /tmp/dccp.ko.before /tmp/dccp.ko.after
    /pub/scm/linux/kernel/git/acme/net-2.6.20/net/dccp/feat.c:
    __dccp_feat_init | -16
    dccp_feat_change_recv | -55
    dccp_feat_clone | -56
    3 functions changed, 127 bytes removed
    [acme@newtoy net-2.6.20]$

    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     
  • This patch replaces cryptic feature negotiation messages of type

    Oct 31 15:42:20 kernel: dccp_feat_change: feat change type=32 feat=1
    Oct 31 15:42:21 kernel: dccp_feat_change: feat change type=34 feat=1
    Oct 31 15:42:21 kernel: dccp_feat_change: feat change type=32 feat=5

    into ones of type:

    Nov 2 13:54:45 kernel: dccp_feat_change: ChangeL(CCID (1), 3)
    Nov 2 13:54:45 kernel: dccp_feat_change: ChangeR(CCID (1), 3)
    Nov 2 13:54:45 kernel: dccp_feat_change: ChangeL(Ack Ratio (5), 2)

    Also,
    * completed the feature number list wrt RFC 4340 sec. 6.4
    * annotating which ones have been implemented so far
    * implemented rudimentary sanity checking in feat.c (FIXMEs)
    * some minor fixes

    Commiter note: uninlined dccp_feat_name and dccp_feat_typename, for
    consistency with dccp_{state,packet}_name, that, BTW,
    should be compiled only if CONFIG_IP_DCCP_DEBUG is
    selected, leaving this to another cset tho. Also
    shortened dccp_feat_negotiation_debug to dccp_feat_debug.

    Signed-off-by: Gerrit Renker
    Signed-off-by: Arnaldo Carvalho de Melo

    Gerrit Renker