diff options
Diffstat (limited to 'include/net/sctp/ulpevent.h')
-rw-r--r-- | include/net/sctp/ulpevent.h | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/include/net/sctp/ulpevent.h b/include/net/sctp/ulpevent.h new file mode 100644 index 000000000000..1019d83a580a --- /dev/null +++ b/include/net/sctp/ulpevent.h | |||
@@ -0,0 +1,162 @@ | |||
1 | /* SCTP kernel reference Implementation | ||
2 | * (C) Copyright IBM Corp. 2001, 2004 | ||
3 | * Copyright (c) 1999-2000 Cisco, Inc. | ||
4 | * Copyright (c) 1999-2001 Motorola, Inc. | ||
5 | * Copyright (c) 2001 Intel Corp. | ||
6 | * Copyright (c) 2001 Nokia, Inc. | ||
7 | * Copyright (c) 2001 La Monte H.P. Yarroll | ||
8 | * | ||
9 | * These are the definitions needed for the sctp_ulpevent type. The | ||
10 | * sctp_ulpevent type is used to carry information from the state machine | ||
11 | * upwards to the ULP. | ||
12 | * | ||
13 | * This file is part of the SCTP kernel reference Implementation | ||
14 | * | ||
15 | * The SCTP reference implementation is free software; | ||
16 | * you can redistribute it and/or modify it under the terms of | ||
17 | * the GNU General Public License as published by | ||
18 | * the Free Software Foundation; either version 2, or (at your option) | ||
19 | * any later version. | ||
20 | * | ||
21 | * The SCTP reference implementation is distributed in the hope that it | ||
22 | * will be useful, but WITHOUT ANY WARRANTY; without even the implied | ||
23 | * ************************ | ||
24 | * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | ||
25 | * See the GNU General Public License for more details. | ||
26 | * | ||
27 | * You should have received a copy of the GNU General Public License | ||
28 | * along with GNU CC; see the file COPYING. If not, write to | ||
29 | * the Free Software Foundation, 59 Temple Place - Suite 330, | ||
30 | * Boston, MA 02111-1307, USA. | ||
31 | * | ||
32 | * Please send any bug reports or fixes you make to the | ||
33 | * email address(es): | ||
34 | * lksctp developers <lksctp-developers@lists.sourceforge.net> | ||
35 | * | ||
36 | * Or submit a bug report through the following website: | ||
37 | * http://www.sf.net/projects/lksctp | ||
38 | * | ||
39 | * Written or modified by: | ||
40 | * Jon Grimm <jgrimm@us.ibm.com> | ||
41 | * La Monte H.P. Yarroll <piggy@acm.org> | ||
42 | * Karl Knutson <karl@athena.chicago.il.us> | ||
43 | * Sridhar Samudrala <sri@us.ibm.com> | ||
44 | * | ||
45 | * Any bugs reported given to us we will try to fix... any fixes shared will | ||
46 | * be incorporated into the next SCTP release. | ||
47 | */ | ||
48 | |||
49 | #ifndef __sctp_ulpevent_h__ | ||
50 | #define __sctp_ulpevent_h__ | ||
51 | |||
52 | /* A structure to carry information to the ULP (e.g. Sockets API) */ | ||
53 | /* Warning: This sits inside an skb.cb[] area. Be very careful of | ||
54 | * growing this structure as it is at the maximum limit now. | ||
55 | */ | ||
56 | struct sctp_ulpevent { | ||
57 | struct sctp_association *asoc; | ||
58 | __u16 stream; | ||
59 | __u16 ssn; | ||
60 | __u16 flags; | ||
61 | __u32 ppid; | ||
62 | __u32 tsn; | ||
63 | __u32 cumtsn; | ||
64 | int msg_flags; | ||
65 | int iif; | ||
66 | }; | ||
67 | |||
68 | /* Retrieve the skb this event sits inside of. */ | ||
69 | static inline struct sk_buff *sctp_event2skb(struct sctp_ulpevent *ev) | ||
70 | { | ||
71 | return container_of((void *)ev, struct sk_buff, cb); | ||
72 | } | ||
73 | |||
74 | /* Retrieve & cast the event sitting inside the skb. */ | ||
75 | static inline struct sctp_ulpevent *sctp_skb2event(struct sk_buff *skb) | ||
76 | { | ||
77 | return (struct sctp_ulpevent *)skb->cb; | ||
78 | } | ||
79 | |||
80 | void sctp_ulpevent_free(struct sctp_ulpevent *); | ||
81 | int sctp_ulpevent_is_notification(const struct sctp_ulpevent *); | ||
82 | void sctp_queue_purge_ulpevents(struct sk_buff_head *list); | ||
83 | |||
84 | struct sctp_ulpevent *sctp_ulpevent_make_assoc_change( | ||
85 | const struct sctp_association *asoc, | ||
86 | __u16 flags, | ||
87 | __u16 state, | ||
88 | __u16 error, | ||
89 | __u16 outbound, | ||
90 | __u16 inbound, | ||
91 | int gfp); | ||
92 | |||
93 | struct sctp_ulpevent *sctp_ulpevent_make_peer_addr_change( | ||
94 | const struct sctp_association *asoc, | ||
95 | const struct sockaddr_storage *aaddr, | ||
96 | int flags, | ||
97 | int state, | ||
98 | int error, | ||
99 | int gfp); | ||
100 | |||
101 | struct sctp_ulpevent *sctp_ulpevent_make_remote_error( | ||
102 | const struct sctp_association *asoc, | ||
103 | struct sctp_chunk *chunk, | ||
104 | __u16 flags, | ||
105 | int gfp); | ||
106 | struct sctp_ulpevent *sctp_ulpevent_make_send_failed( | ||
107 | const struct sctp_association *asoc, | ||
108 | struct sctp_chunk *chunk, | ||
109 | __u16 flags, | ||
110 | __u32 error, | ||
111 | int gfp); | ||
112 | |||
113 | struct sctp_ulpevent *sctp_ulpevent_make_shutdown_event( | ||
114 | const struct sctp_association *asoc, | ||
115 | __u16 flags, | ||
116 | int gfp); | ||
117 | |||
118 | struct sctp_ulpevent *sctp_ulpevent_make_pdapi( | ||
119 | const struct sctp_association *asoc, | ||
120 | __u32 indication, int gfp); | ||
121 | |||
122 | struct sctp_ulpevent *sctp_ulpevent_make_adaption_indication( | ||
123 | const struct sctp_association *asoc, int gfp); | ||
124 | |||
125 | struct sctp_ulpevent *sctp_ulpevent_make_rcvmsg(struct sctp_association *asoc, | ||
126 | struct sctp_chunk *chunk, | ||
127 | int gfp); | ||
128 | |||
129 | void sctp_ulpevent_read_sndrcvinfo(const struct sctp_ulpevent *event, | ||
130 | struct msghdr *); | ||
131 | __u16 sctp_ulpevent_get_notification_type(const struct sctp_ulpevent *event); | ||
132 | |||
133 | /* Is this event type enabled? */ | ||
134 | static inline int sctp_ulpevent_type_enabled(__u16 sn_type, | ||
135 | struct sctp_event_subscribe *mask) | ||
136 | { | ||
137 | char *amask = (char *) mask; | ||
138 | return amask[sn_type - SCTP_SN_TYPE_BASE]; | ||
139 | } | ||
140 | |||
141 | /* Given an event subscription, is this event enabled? */ | ||
142 | static inline int sctp_ulpevent_is_enabled(const struct sctp_ulpevent *event, | ||
143 | struct sctp_event_subscribe *mask) | ||
144 | { | ||
145 | __u16 sn_type; | ||
146 | int enabled = 1; | ||
147 | |||
148 | if (sctp_ulpevent_is_notification(event)) { | ||
149 | sn_type = sctp_ulpevent_get_notification_type(event); | ||
150 | enabled = sctp_ulpevent_type_enabled(sn_type, mask); | ||
151 | } | ||
152 | return enabled; | ||
153 | } | ||
154 | |||
155 | #endif /* __sctp_ulpevent_h__ */ | ||
156 | |||
157 | |||
158 | |||
159 | |||
160 | |||
161 | |||
162 | |||