| 1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ | 
|---|
| 2 | /* SCTP kernel implementation | 
|---|
| 3 | * (C) Copyright IBM Corp. 2001, 2004 | 
|---|
| 4 | * Copyright (c) 1999-2000 Cisco, Inc. | 
|---|
| 5 | * Copyright (c) 1999-2001 Motorola, Inc. | 
|---|
| 6 | * Copyright (c) 2001 Intel Corp. | 
|---|
| 7 | * Copyright (c) 2001 Nokia, Inc. | 
|---|
| 8 | * Copyright (c) 2001 La Monte H.P. Yarroll | 
|---|
| 9 | * | 
|---|
| 10 | * These are the definitions needed for the sctp_ulpq type.  The | 
|---|
| 11 | * sctp_ulpq is the interface between the Upper Layer Protocol, or ULP, | 
|---|
| 12 | * and the core SCTP state machine.  This is the component which handles | 
|---|
| 13 | * reassembly and ordering. | 
|---|
| 14 | * | 
|---|
| 15 | * Please send any bug reports or fixes you make to the | 
|---|
| 16 | * email addresses: | 
|---|
| 17 | *    lksctp developers <linux-sctp@vger.kernel.org> | 
|---|
| 18 | * | 
|---|
| 19 | * Written or modified by: | 
|---|
| 20 | *   Jon Grimm             <jgrimm@us.ibm.com> | 
|---|
| 21 | *   La Monte H.P. Yarroll <piggy@acm.org> | 
|---|
| 22 | *   Sridhar Samudrala     <sri@us.ibm.com> | 
|---|
| 23 | */ | 
|---|
| 24 |  | 
|---|
| 25 | #ifndef __sctp_ulpqueue_h__ | 
|---|
| 26 | #define __sctp_ulpqueue_h__ | 
|---|
| 27 |  | 
|---|
| 28 | /* A structure to carry information to the ULP (e.g. Sockets API) */ | 
|---|
| 29 | struct sctp_ulpq { | 
|---|
| 30 | char pd_mode; | 
|---|
| 31 | struct sctp_association *asoc; | 
|---|
| 32 | struct sk_buff_head reasm; | 
|---|
| 33 | struct sk_buff_head reasm_uo; | 
|---|
| 34 | struct sk_buff_head lobby; | 
|---|
| 35 | }; | 
|---|
| 36 |  | 
|---|
| 37 | /* Prototypes. */ | 
|---|
| 38 | void sctp_ulpq_init(struct sctp_ulpq *ulpq, struct sctp_association *asoc); | 
|---|
| 39 | void sctp_ulpq_flush(struct sctp_ulpq *ulpq); | 
|---|
| 40 | void sctp_ulpq_free(struct sctp_ulpq *); | 
|---|
| 41 |  | 
|---|
| 42 | /* Add a new DATA chunk for processing. */ | 
|---|
| 43 | int sctp_ulpq_tail_data(struct sctp_ulpq *, struct sctp_chunk *, gfp_t); | 
|---|
| 44 |  | 
|---|
| 45 | /* Add a new event for propagation to the ULP. */ | 
|---|
| 46 | int sctp_ulpq_tail_event(struct sctp_ulpq *, struct sk_buff_head *skb_list); | 
|---|
| 47 |  | 
|---|
| 48 | /* Renege previously received chunks.  */ | 
|---|
| 49 | void sctp_ulpq_renege(struct sctp_ulpq *, struct sctp_chunk *, gfp_t); | 
|---|
| 50 |  | 
|---|
| 51 | /* Perform partial delivery. */ | 
|---|
| 52 | void sctp_ulpq_partial_delivery(struct sctp_ulpq *, gfp_t); | 
|---|
| 53 |  | 
|---|
| 54 | /* Abort the partial delivery. */ | 
|---|
| 55 | void sctp_ulpq_abort_pd(struct sctp_ulpq *, gfp_t); | 
|---|
| 56 |  | 
|---|
| 57 | /* Clear the partial data delivery condition on this socket. */ | 
|---|
| 58 | int sctp_clear_pd(struct sock *sk, struct sctp_association *asoc); | 
|---|
| 59 |  | 
|---|
| 60 | /* Skip over an SSN. */ | 
|---|
| 61 | void sctp_ulpq_skip(struct sctp_ulpq *ulpq, __u16 sid, __u16 ssn); | 
|---|
| 62 |  | 
|---|
| 63 | void sctp_ulpq_reasm_flushtsn(struct sctp_ulpq *, __u32); | 
|---|
| 64 |  | 
|---|
| 65 | __u16 sctp_ulpq_renege_list(struct sctp_ulpq *ulpq, | 
|---|
| 66 | struct sk_buff_head *list, __u16 needed); | 
|---|
| 67 |  | 
|---|
| 68 | #endif /* __sctp_ulpqueue_h__ */ | 
|---|
| 69 |  | 
|---|