09 Jul, 2019

1 commit


24 May, 2019

1 commit

  • Based on 1 normalized pattern(s):

    this sctp implementation is free software you can redistribute it
    and or modify it under the terms of the gnu general public license
    as published by the free software foundation either version 2 or at
    your option any later version this sctp implementation is
    distributed in the hope that it will be useful but without any
    warranty without even the implied warranty of merchantability or
    fitness for a particular purpose see the gnu general public license
    for more details you should have received a copy of the gnu general
    public license along with gnu cc see the file copying if not see
    http www gnu org licenses

    extracted by the scancode license scanner the SPDX license identifier

    GPL-2.0-or-later

    has been chosen to replace the boilerplate/reference in 42 file(s).

    Signed-off-by: Thomas Gleixner
    Reviewed-by: Kate Stewart
    Reviewed-by: Richard Fontana
    Reviewed-by: Allison Randal
    Cc: linux-spdx@vger.kernel.org
    Link: https://lkml.kernel.org/r/20190523091649.683323110@linutronix.de
    Signed-off-by: Greg Kroah-Hartman

    Thomas Gleixner
     

12 Aug, 2018

1 commit

  • This patch introduces wrappers for accessing in/out streams indirectly.
    This will enable to replace physically contiguous memory arrays
    of streams with flexible arrays (or maybe any other appropriate
    mechanism) which do memory allocation on a per-page basis.

    Signed-off-by: Oleg Babin
    Signed-off-by: Konstantin Khorenko
    Signed-off-by: David S. Miller

    Konstantin Khorenko
     

16 Dec, 2017

1 commit

  • As Marcelo said in the stream scheduler patch:

    Support for I-DATA chunks, also described in RFC8260, with user message
    interleaving is straightforward as it just requires the schedulers to
    probe for the feature and ignore datamsg boundaries when dequeueing.

    All needs to do is just to ignore datamsg boundaries when dequeueing.

    Signed-off-by: Xin Long
    Acked-by: Marcelo R. Leitner
    Signed-off-by: David S. Miller

    Xin Long
     

29 Nov, 2017

1 commit

  • Now each stream sched ops is defined in different .c file and
    added into the global ops in another .c file, it uses extern
    to make this work.

    However extern is not good coding style to get them in and
    even make C=2 reports errors for this.

    This patch adds sctp_sched_ops_xxx_init for each stream sched
    ops in their .c file, then get them into the global ops by
    calling them when initializing sctp module.

    Fixes: 637784ade221 ("sctp: introduce priority based stream scheduler")
    Fixes: ac1ed8b82cd6 ("sctp: introduce round robin stream scheduler")
    Signed-off-by: Xin Long
    Acked-by: Marcelo Ricardo Leitner
    Signed-off-by: David S. Miller

    Xin Long
     

12 Oct, 2017

1 commit

  • The array sctp_sched_ops is local to the source and
    does not need to be in global scope, so make it static.

    Cleans up sparse warning:
    symbol 'sctp_sched_ops' was not declared. Should it be static?

    Signed-off-by: Colin Ian King
    Acked-by: Neil Horman
    Signed-off-by: David S. Miller

    Colin Ian King
     

04 Oct, 2017

3 commits

  • This patch introduces RFC Draft ndata section 3.2 Priority Based
    Scheduler (SCTP_SS_RR).

    Works by maintaining a list of enqueued streams and tracking the last
    one used to send data. When the datamsg is done, it switches to the next
    stream.

    See-also: https://tools.ietf.org/html/draft-ietf-tsvwg-sctp-ndata-13
    Tested-by: Xin Long
    Signed-off-by: Marcelo Ricardo Leitner
    Signed-off-by: David S. Miller

    Marcelo Ricardo Leitner
     
  • This patch introduces RFC Draft ndata section 3.4 Priority Based
    Scheduler (SCTP_SS_PRIO).

    It works by having a struct sctp_stream_priority for each priority
    configured. This struct is then enlisted on a queue ordered per priority
    if, and only if, there is a stream with data queued, so that dequeueing
    is very straightforward: either finish current datamsg or simply dequeue
    from the highest priority queued, which is the next stream pointed, and
    that's it.

    If there are multiple streams assigned with the same priority and with
    data queued, it will do round robin amongst them while respecting
    datamsgs boundaries (when not using idata chunks), to be reasonably
    fair.

    We intentionally don't maintain a list of priorities nor a list of all
    streams with the same priority to save memory. The first would mean at
    least 2 other pointers per priority (which, for 1000 priorities, that
    can mean 16kB) and the second would also mean 2 other pointers but per
    stream. As SCTP supports up to 65535 streams on a given asoc, that's
    1MB. This impacts when giving a priority to some stream, as we have to
    find out if the new priority is already being used and if we can free
    the old one, and also when tearing down.

    The new fields in struct sctp_stream_out_ext and sctp_stream are added
    under a union because that memory is to be shared with other schedulers.

    See-also: https://tools.ietf.org/html/draft-ietf-tsvwg-sctp-ndata-13
    Tested-by: Xin Long
    Signed-off-by: Marcelo Ricardo Leitner
    Signed-off-by: David S. Miller

    Marcelo Ricardo Leitner
     
  • This patch introduces the hooks necessary to do stream scheduling, as
    per RFC Draft ndata. It also introduces the first scheduler, which is
    what we do today but now factored out: first come first served (FCFS).

    With stream scheduling now we have to track which chunk was enqueued on
    which stream and be able to select another other than the in front of
    the main outqueue. So we introduce a list on sctp_stream_out_ext
    structure for this purpose.

    We reuse sctp_chunk->transmitted_list space for the list above, as the
    chunk cannot belong to the two lists at the same time. By using the
    union in there, we can have distinct names for these moments.

    sctp_sched_ops are the operations expected to be implemented by each
    scheduler. The dequeueing is a bit particular to this implementation but
    it is to match how we dequeue packets today. We first dequeue and then
    check if it fits the packet and if not, we requeue it at head. Thus why
    we don't have a peek operation but have dequeue_done instead, which is
    called once the chunk can be safely considered as transmitted.

    The check removed from sctp_outq_flush is now performed by
    sctp_stream_outq_migrate, which is only called during assoc setup.
    (sctp_sendmsg() also checks for it)

    The only operation that is foreseen but not yet added here is a way to
    signalize that a new packet is starting or that the packet is done, for
    round robin scheduler per packet, but is intentionally left to the
    patch that actually implements it.

    Support for I-DATA chunks, also described in this RFC, with user message
    interleaving is straightforward as it just requires the schedulers to
    probe for the feature and ignore datamsg boundaries when dequeueing.

    See-also: https://tools.ietf.org/html/draft-ietf-tsvwg-sctp-ndata-13
    Tested-by: Xin Long
    Signed-off-by: Marcelo Ricardo Leitner
    Signed-off-by: David S. Miller

    Marcelo Ricardo Leitner