1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */ 2*4882a593Smuzhiyun /* SCTP kernel implementation 3*4882a593Smuzhiyun * (C) Copyright Red Hat Inc. 2017 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * These are definitions used by the stream schedulers, defined in RFC 6*4882a593Smuzhiyun * draft ndata (https://tools.ietf.org/html/draft-ietf-tsvwg-sctp-ndata-11) 7*4882a593Smuzhiyun * 8*4882a593Smuzhiyun * Please send any bug reports or fixes you make to the 9*4882a593Smuzhiyun * email addresses: 10*4882a593Smuzhiyun * lksctp developers <linux-sctp@vger.kernel.org> 11*4882a593Smuzhiyun * 12*4882a593Smuzhiyun * Written or modified by: 13*4882a593Smuzhiyun * Xin Long <lucien.xin@gmail.com> 14*4882a593Smuzhiyun */ 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun #ifndef __sctp_stream_interleave_h__ 17*4882a593Smuzhiyun #define __sctp_stream_interleave_h__ 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun struct sctp_stream_interleave { 20*4882a593Smuzhiyun __u16 data_chunk_len; 21*4882a593Smuzhiyun __u16 ftsn_chunk_len; 22*4882a593Smuzhiyun /* (I-)DATA process */ 23*4882a593Smuzhiyun struct sctp_chunk *(*make_datafrag)(const struct sctp_association *asoc, 24*4882a593Smuzhiyun const struct sctp_sndrcvinfo *sinfo, 25*4882a593Smuzhiyun int len, __u8 flags, gfp_t gfp); 26*4882a593Smuzhiyun void (*assign_number)(struct sctp_chunk *chunk); 27*4882a593Smuzhiyun bool (*validate_data)(struct sctp_chunk *chunk); 28*4882a593Smuzhiyun int (*ulpevent_data)(struct sctp_ulpq *ulpq, 29*4882a593Smuzhiyun struct sctp_chunk *chunk, gfp_t gfp); 30*4882a593Smuzhiyun int (*enqueue_event)(struct sctp_ulpq *ulpq, 31*4882a593Smuzhiyun struct sctp_ulpevent *event); 32*4882a593Smuzhiyun void (*renege_events)(struct sctp_ulpq *ulpq, 33*4882a593Smuzhiyun struct sctp_chunk *chunk, gfp_t gfp); 34*4882a593Smuzhiyun void (*start_pd)(struct sctp_ulpq *ulpq, gfp_t gfp); 35*4882a593Smuzhiyun void (*abort_pd)(struct sctp_ulpq *ulpq, gfp_t gfp); 36*4882a593Smuzhiyun /* (I-)FORWARD-TSN process */ 37*4882a593Smuzhiyun void (*generate_ftsn)(struct sctp_outq *q, __u32 ctsn); 38*4882a593Smuzhiyun bool (*validate_ftsn)(struct sctp_chunk *chunk); 39*4882a593Smuzhiyun void (*report_ftsn)(struct sctp_ulpq *ulpq, __u32 ftsn); 40*4882a593Smuzhiyun void (*handle_ftsn)(struct sctp_ulpq *ulpq, 41*4882a593Smuzhiyun struct sctp_chunk *chunk); 42*4882a593Smuzhiyun }; 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun void sctp_stream_interleave_init(struct sctp_stream *stream); 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun #endif /* __sctp_stream_interleave_h__ */ 47