1. 12 12月, 2017 1 次提交
    • X
      sctp: implement make_datafrag for sctp_stream_interleave · 0c3f6f65
      Xin Long 提交于
      To avoid hundreds of checks for the different process on I-DATA chunk,
      struct sctp_stream_interleave is defined as a group of functions used
      to replace the codes in some place where it needs to do different job
      according to if the asoc intl_enabled is set.
      
      With these ops, it only needs to initialize asoc->stream.si with
      sctp_stream_interleave_0 for normal data if asoc intl_enable is 0,
      or sctp_stream_interleave_1 for idata if asoc intl_enable is set in
      sctp_stream_init.
      
      After that, the members in asoc->stream.si can be used directly in
      some special places without checking asoc intl_enable.
      
      make_datafrag is the first member for sctp_stream_interleave, it's
      used to make data or idata frags, called in sctp_datamsg_from_user.
      The old function sctp_make_datafrag_empty needs to be adjust some
      to fit in this ops.
      
      Note that as idata and data chunks have different length, it also
      defines data_chunk_len for sctp_stream_interleave to describe the
      chunk size.
      Signed-off-by: NXin Long <lucien.xin@gmail.com>
      Acked-by: NMarcelo Ricardo Leitner <marcelo.leitner@gmail.com>
      Acked-by: NNeil Horman <nhorman@tuxdriver.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      0c3f6f65