147505b8bSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */ 260c778b2SVlad Yasevich /* SCTP kernel implementation 31da177e4SLinus Torvalds * (C) Copyright IBM Corp. 2001, 2004 41da177e4SLinus Torvalds * Copyright (c) 1999-2000 Cisco, Inc. 51da177e4SLinus Torvalds * Copyright (c) 1999-2001 Motorola, Inc. 61da177e4SLinus Torvalds * Copyright (c) 2001 Intel Corp. 71da177e4SLinus Torvalds * Copyright (c) 2001 Nokia, Inc. 81da177e4SLinus Torvalds * Copyright (c) 2001 La Monte H.P. Yarroll 91da177e4SLinus Torvalds * 101da177e4SLinus Torvalds * These are the definitions needed for the sctp_ulpq type. The 111da177e4SLinus Torvalds * sctp_ulpq is the interface between the Upper Layer Protocol, or ULP, 121da177e4SLinus Torvalds * and the core SCTP state machine. This is the component which handles 131da177e4SLinus Torvalds * reassembly and ordering. 141da177e4SLinus Torvalds * 151da177e4SLinus Torvalds * Please send any bug reports or fixes you make to the 161da177e4SLinus Torvalds * email addresses: 1791705c61SDaniel Borkmann * lksctp developers <linux-sctp@vger.kernel.org> 181da177e4SLinus Torvalds * 191da177e4SLinus Torvalds * Written or modified by: 201da177e4SLinus Torvalds * Jon Grimm <jgrimm@us.ibm.com> 211da177e4SLinus Torvalds * La Monte H.P. Yarroll <piggy@acm.org> 221da177e4SLinus Torvalds * Sridhar Samudrala <sri@us.ibm.com> 231da177e4SLinus Torvalds */ 241da177e4SLinus Torvalds 251da177e4SLinus Torvalds #ifndef __sctp_ulpqueue_h__ 261da177e4SLinus Torvalds #define __sctp_ulpqueue_h__ 271da177e4SLinus Torvalds 281da177e4SLinus Torvalds /* A structure to carry information to the ULP (e.g. Sockets API) */ 291da177e4SLinus Torvalds struct sctp_ulpq { 301da177e4SLinus Torvalds char pd_mode; 311da177e4SLinus Torvalds struct sctp_association *asoc; 321da177e4SLinus Torvalds struct sk_buff_head reasm; 3313228238SXin Long struct sk_buff_head reasm_uo; 341da177e4SLinus Torvalds struct sk_buff_head lobby; 351da177e4SLinus Torvalds }; 361da177e4SLinus Torvalds 371da177e4SLinus Torvalds /* Prototypes. */ 38*6fdfdef7SAlexey Kodanev void sctp_ulpq_init(struct sctp_ulpq *ulpq, struct sctp_association *asoc); 390b58a811SVlad Yasevich void sctp_ulpq_flush(struct sctp_ulpq *ulpq); 401da177e4SLinus Torvalds void sctp_ulpq_free(struct sctp_ulpq *); 411da177e4SLinus Torvalds 421da177e4SLinus Torvalds /* Add a new DATA chunk for processing. */ 43dd0fc66fSAl Viro int sctp_ulpq_tail_data(struct sctp_ulpq *, struct sctp_chunk *, gfp_t); 441da177e4SLinus Torvalds 451da177e4SLinus Torvalds /* Add a new event for propagation to the ULP. */ 46013b96ecSDavid Miller int sctp_ulpq_tail_event(struct sctp_ulpq *, struct sk_buff_head *skb_list); 471da177e4SLinus Torvalds 481da177e4SLinus Torvalds /* Renege previously received chunks. */ 49dd0fc66fSAl Viro void sctp_ulpq_renege(struct sctp_ulpq *, struct sctp_chunk *, gfp_t); 501da177e4SLinus Torvalds 511da177e4SLinus Torvalds /* Perform partial delivery. */ 52b26ddd81SNeil Horman void sctp_ulpq_partial_delivery(struct sctp_ulpq *, gfp_t); 531da177e4SLinus Torvalds 541da177e4SLinus Torvalds /* Abort the partial delivery. */ 55dd0fc66fSAl Viro void sctp_ulpq_abort_pd(struct sctp_ulpq *, gfp_t); 561da177e4SLinus Torvalds 571da177e4SLinus Torvalds /* Clear the partial data delivery condition on this socket. */ 58b6e1331fSVlad Yasevich int sctp_clear_pd(struct sock *sk, struct sctp_association *asoc); 591da177e4SLinus Torvalds 601da177e4SLinus Torvalds /* Skip over an SSN. */ 611da177e4SLinus Torvalds void sctp_ulpq_skip(struct sctp_ulpq *ulpq, __u16 sid, __u16 ssn); 621da177e4SLinus Torvalds 63ea2dfb37SVlad Yasevich void sctp_ulpq_reasm_flushtsn(struct sctp_ulpq *, __u32); 6494014e8dSXin Long 6594014e8dSXin Long __u16 sctp_ulpq_renege_list(struct sctp_ulpq *ulpq, 6694014e8dSXin Long struct sk_buff_head *list, __u16 needed); 6794014e8dSXin Long 681da177e4SLinus Torvalds #endif /* __sctp_ulpqueue_h__ */ 69