18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */ 28c2ecf20Sopenharmony_ci/* SCTP kernel implementation 38c2ecf20Sopenharmony_ci * (C) Copyright Red Hat Inc. 2017 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * These are definitions used by the stream schedulers, defined in RFC 68c2ecf20Sopenharmony_ci * draft ndata (https://tools.ietf.org/html/draft-ietf-tsvwg-sctp-ndata-11) 78c2ecf20Sopenharmony_ci * 88c2ecf20Sopenharmony_ci * Please send any bug reports or fixes you make to the 98c2ecf20Sopenharmony_ci * email addresses: 108c2ecf20Sopenharmony_ci * lksctp developers <linux-sctp@vger.kernel.org> 118c2ecf20Sopenharmony_ci * 128c2ecf20Sopenharmony_ci * Written or modified by: 138c2ecf20Sopenharmony_ci * Marcelo Ricardo Leitner <marcelo.leitner@gmail.com> 148c2ecf20Sopenharmony_ci */ 158c2ecf20Sopenharmony_ci 168c2ecf20Sopenharmony_ci#ifndef __sctp_stream_sched_h__ 178c2ecf20Sopenharmony_ci#define __sctp_stream_sched_h__ 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_cistruct sctp_sched_ops { 208c2ecf20Sopenharmony_ci /* Property handling for a given stream */ 218c2ecf20Sopenharmony_ci int (*set)(struct sctp_stream *stream, __u16 sid, __u16 value, 228c2ecf20Sopenharmony_ci gfp_t gfp); 238c2ecf20Sopenharmony_ci int (*get)(struct sctp_stream *stream, __u16 sid, __u16 *value); 248c2ecf20Sopenharmony_ci 258c2ecf20Sopenharmony_ci /* Init the specific scheduler */ 268c2ecf20Sopenharmony_ci int (*init)(struct sctp_stream *stream); 278c2ecf20Sopenharmony_ci /* Init a stream */ 288c2ecf20Sopenharmony_ci int (*init_sid)(struct sctp_stream *stream, __u16 sid, gfp_t gfp); 298c2ecf20Sopenharmony_ci /* free a stream */ 308c2ecf20Sopenharmony_ci void (*free_sid)(struct sctp_stream *stream, __u16 sid); 318c2ecf20Sopenharmony_ci /* Frees the entire thing */ 328c2ecf20Sopenharmony_ci void (*free)(struct sctp_stream *stream); 338c2ecf20Sopenharmony_ci 348c2ecf20Sopenharmony_ci /* Enqueue a chunk */ 358c2ecf20Sopenharmony_ci void (*enqueue)(struct sctp_outq *q, struct sctp_datamsg *msg); 368c2ecf20Sopenharmony_ci /* Dequeue a chunk */ 378c2ecf20Sopenharmony_ci struct sctp_chunk *(*dequeue)(struct sctp_outq *q); 388c2ecf20Sopenharmony_ci /* Called only if the chunk fit the packet */ 398c2ecf20Sopenharmony_ci void (*dequeue_done)(struct sctp_outq *q, struct sctp_chunk *chunk); 408c2ecf20Sopenharmony_ci /* Sched all chunks already enqueued */ 418c2ecf20Sopenharmony_ci void (*sched_all)(struct sctp_stream *steam); 428c2ecf20Sopenharmony_ci /* Unched all chunks already enqueued */ 438c2ecf20Sopenharmony_ci void (*unsched_all)(struct sctp_stream *steam); 448c2ecf20Sopenharmony_ci}; 458c2ecf20Sopenharmony_ci 468c2ecf20Sopenharmony_ciint sctp_sched_set_sched(struct sctp_association *asoc, 478c2ecf20Sopenharmony_ci enum sctp_sched_type sched); 488c2ecf20Sopenharmony_ciint sctp_sched_get_sched(struct sctp_association *asoc); 498c2ecf20Sopenharmony_ciint sctp_sched_set_value(struct sctp_association *asoc, __u16 sid, 508c2ecf20Sopenharmony_ci __u16 value, gfp_t gfp); 518c2ecf20Sopenharmony_ciint sctp_sched_get_value(struct sctp_association *asoc, __u16 sid, 528c2ecf20Sopenharmony_ci __u16 *value); 538c2ecf20Sopenharmony_civoid sctp_sched_dequeue_done(struct sctp_outq *q, struct sctp_chunk *ch); 548c2ecf20Sopenharmony_ci 558c2ecf20Sopenharmony_civoid sctp_sched_dequeue_common(struct sctp_outq *q, struct sctp_chunk *ch); 568c2ecf20Sopenharmony_ciint sctp_sched_init_sid(struct sctp_stream *stream, __u16 sid, gfp_t gfp); 578c2ecf20Sopenharmony_cistruct sctp_sched_ops *sctp_sched_ops_from_stream(struct sctp_stream *stream); 588c2ecf20Sopenharmony_ci 598c2ecf20Sopenharmony_civoid sctp_sched_ops_register(enum sctp_sched_type sched, 608c2ecf20Sopenharmony_ci struct sctp_sched_ops *sched_ops); 618c2ecf20Sopenharmony_civoid sctp_sched_ops_prio_init(void); 628c2ecf20Sopenharmony_civoid sctp_sched_ops_rr_init(void); 638c2ecf20Sopenharmony_ci 648c2ecf20Sopenharmony_ci#endif /* __sctp_stream_sched_h__ */ 65