328f2d0ff7316d39a58af45b49e554e4536ed6dd
[dragonfly.git] / sys / net / netmsg.h
1 /*
2  * Copyright (c) 2003 Jeffrey Hsu
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  * 3. All advertising materials mentioning features or use of this software
14  *    must display the following acknowledgement:
15  *      This product includes software developed by Jeffrey M. Hsu.
16  * 4. The name of the author may not be used to endorse or promote products
17  *    derived from this software without specific prior written permission.
18  * 
19  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
20  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
21  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
22  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
23  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
24  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
28  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  *
30  * $DragonFly: src/sys/net/netmsg.h,v 1.10 2008/10/27 02:56:30 sephe Exp $
31  */
32
33 #ifndef _NET_NETMSG_H_
34 #define _NET_NETMSG_H_
35
36 #ifndef _SYS_THREAD_H_
37 #include <sys/thread.h>
38 #endif
39 #ifndef _SYS_PROTOSW_H_
40 #include <sys/protosw.h>
41 #endif
42
43 struct netmsg;
44
45 typedef void (*netisr_fn_t)(struct netmsg *);
46 typedef void (*netisr_ru_t)(void);
47 typedef void (*netisr_cpufn_t)(struct mbuf **, int);
48
49 /*
50  * Base netmsg
51  */
52 typedef struct netmsg {
53         struct lwkt_msg         nm_lmsg;
54         netisr_fn_t             nm_dispatch;
55         struct socket           *nm_so;
56 } *netmsg_t;
57
58 #if defined(_KERNEL) || defined(_KERNEL_STRUCTURES)
59
60 /*
61  * User protocol requests messages.
62  */
63 struct netmsg_pru_abort {
64         struct netmsg           nm_netmsg;
65         pru_abort_fn_t          nm_prufn;
66 };
67
68 struct netmsg_pru_accept {
69         struct netmsg           nm_netmsg;
70         pru_accept_fn_t         nm_prufn;
71         struct sockaddr         **nm_nam;
72 };
73
74 struct netmsg_pru_attach {
75         struct netmsg           nm_netmsg;
76         pru_attach_fn_t         nm_prufn;
77         int                     nm_proto;
78         struct pru_attach_info  *nm_ai;
79 };
80
81 struct netmsg_pru_bind {
82         struct netmsg           nm_netmsg;
83         pru_bind_fn_t           nm_prufn;
84         struct sockaddr         *nm_nam;
85         struct thread           *nm_td;
86 };
87
88 struct netmsg_pru_connect {
89         struct netmsg           nm_netmsg;
90         pru_connect_fn_t        nm_prufn;
91         struct sockaddr         *nm_nam;
92         struct thread           *nm_td;
93 };
94
95 struct netmsg_pru_connect2 {
96         struct netmsg           nm_netmsg;
97         pru_connect2_fn_t       nm_prufn;
98         struct socket           *nm_so1;
99         struct socket           *nm_so2;
100 };
101
102 struct netmsg_pru_control {
103         struct netmsg           nm_netmsg;
104         pru_control_fn_t        nm_prufn;
105         u_long                  nm_cmd;
106         caddr_t                 nm_data;
107         struct ifnet            *nm_ifp;
108         struct thread           *nm_td;
109 };
110
111 struct netmsg_pru_detach {
112         struct netmsg           nm_netmsg;
113         pru_detach_fn_t         nm_prufn;
114 };
115
116 struct netmsg_pru_disconnect {
117         struct netmsg           nm_netmsg;
118         pru_disconnect_fn_t     nm_prufn;
119 };
120
121 struct netmsg_pru_listen {
122         struct netmsg           nm_netmsg;
123         pru_listen_fn_t         nm_prufn;
124         struct thread           *nm_td;
125 };
126
127 struct netmsg_pru_peeraddr {
128         struct netmsg           nm_netmsg;
129         pru_peeraddr_fn_t       nm_prufn;
130         struct sockaddr         **nm_nam;
131 };
132
133 struct netmsg_pru_rcvd {
134         struct netmsg           nm_netmsg;
135         pru_rcvd_fn_t           nm_prufn;
136         int                     nm_flags;
137 };
138
139 struct netmsg_pru_rcvoob {
140         struct netmsg           nm_netmsg;
141         pru_rcvoob_fn_t         nm_prufn;
142         struct mbuf             *nm_m;
143         int                     nm_flags;
144 };
145
146 struct netmsg_pru_send {
147         struct netmsg           nm_netmsg;
148         pru_send_fn_t           nm_prufn;
149         int                     nm_flags;
150         struct mbuf             *nm_m;
151         struct sockaddr         *nm_addr;
152         struct mbuf             *nm_control;
153         struct thread           *nm_td;
154 };
155
156 struct netmsg_pru_sense {
157         struct netmsg           nm_netmsg;
158         pru_sense_fn_t          nm_prufn;
159         struct stat             *nm_stat;
160 };
161
162 struct netmsg_pru_shutdown {
163         struct netmsg           nm_netmsg;
164         pru_shutdown_fn_t       nm_prufn;
165 };
166
167 struct netmsg_pru_sockaddr {
168         struct netmsg           nm_netmsg;
169         pru_sockaddr_fn_t       nm_prufn;
170         struct sockaddr         **nm_nam;
171 };
172
173 struct netmsg_pru_sosend {
174         struct netmsg           nm_netmsg;
175         pru_sosend_fn_t         nm_prufn;
176         struct sockaddr         *nm_addr;
177         struct uio              *nm_uio;
178         struct mbuf             *nm_top;
179         struct mbuf             *nm_control;
180         int                     nm_flags;
181         struct thread           *nm_td;
182 };
183
184 struct netmsg_pru_soreceive {
185         struct netmsg           nm_netmsg;
186         struct sockaddr         *nm_addr;
187         struct sockaddr         **nm_paddr;
188         struct uio              *nm_uio;
189         struct sockbuf          *nm_sio;
190         struct mbuf             **nm_controlp;
191         int                     *nm_flagsp;
192 };
193
194 struct netmsg_pru_ctloutput {
195         struct netmsg           nm_netmsg;
196         pru_ctloutput_fn_t      nm_prufn;
197         struct sockopt          *nm_sopt;
198 };
199
200 struct netmsg_pru_ctlinput {
201         struct netmsg           nm_netmsg;
202         pru_ctlinput_fn_t       nm_prufn;
203         int                     nm_cmd;
204         struct sockaddr         *nm_arg;
205         void                    *nm_extra;
206 };
207
208 #endif  /* _KERNEL || _KERNEL_STRUCTURES */
209
210 #endif  /* !_NET_NETMSG_H_ */