docs/how-to-build.md: use proper markup for directory names
[unleashed/tickless.git] / include / sys / sockfilter.h
blobf5a41b3f04d0f8d732593a3ca04da0ab120bb6a8
1 /*
2 * CDDL HEADER START
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
19 * CDDL HEADER END
22 * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
25 #ifndef _SYS_SOCKFILTER_H
26 #define _SYS_SOCKFILTER_H
28 #include <sys/cred.h>
29 #include <sys/errno.h>
30 #include <sys/socket.h>
32 #ifdef __cplusplus
33 extern "C" {
34 #endif
37 * Opaque socket filter handle
39 typedef struct __sof_handle *sof_handle_t;
42 * Return values for callback functions.
44 * A - Attach (passive/active) only
45 * P - Passive attach only
47 typedef enum {
48 SOF_RVAL_DEFER = -3, /* defer notification (P) */
49 SOF_RVAL_DETACH = -2, /* detach filter, continue proc. (A) */
50 SOF_RVAL_CONTINUE = -1, /* continue processing */
51 SOF_RVAL_RETURN = 0, /* stop proc, does not return error */
52 SOF_RVAL_EINVAL = EINVAL, /* stop proc., returns error */
53 SOF_RVAL_EACCES = EACCES, /* stop proc., returns error */
54 SOF_RVAL_ENOMEM = ENOMEM, /* stop proc., returns error */
55 SOF_RVAL_ECONNABORTED = ECONNABORTED /* stop proc, returns error */
56 } sof_rval_t;
59 * Events generated by the sofop_notify callback.
61 typedef enum { /* socket ... */
62 SOF_EV_CLOSING, /* ... is closing */
63 SOF_EV_CONNECTED, /* ... is connected */
64 SOF_EV_CONNECTFAILED, /* ... failed to connect */
65 SOF_EV_DISCONNECTED, /* ... was disconnected */
66 SOF_EV_CANTRECVMORE, /* ... cannot receive any more data */
67 SOF_EV_CANTSENDMORE, /* ... cannot send any more data */
68 SOF_EV_INJECT_DATA_IN_OK, /* ... has cleared rcv flow ctrl */
69 SOF_EV_INJECT_DATA_OUT_OK, /* ... has cleared snd flow ctrl */
70 } sof_event_t;
72 /* Filter callbacks */
73 typedef sof_rval_t (*sof_attach_active_fn_t)(sof_handle_t, int, int, int,
74 cred_t *, void **);
75 typedef sof_rval_t (*sof_attach_passive_fn_t)(sof_handle_t, sof_handle_t,
76 void *, struct sockaddr *, socklen_t, struct sockaddr *, socklen_t,
77 void **);
78 typedef void (*sof_detach_fn_t)(sof_handle_t, void *, cred_t *);
79 typedef mblk_t *(*sof_data_in_fn_t)(sof_handle_t, void *, mblk_t *,
80 int, size_t *);
81 typedef mblk_t *(*sof_data_in_proc_fn_t)(sof_handle_t, void *,
82 mblk_t *, cred_t *, size_t *);
83 typedef mblk_t *(*sof_data_out_fn_t)(sof_handle_t, void *, mblk_t *,
84 struct msghdr *, cred_t *, sof_rval_t *);
85 typedef sof_rval_t (*sof_bind_fn_t)(sof_handle_t, void *,
86 struct sockaddr *, socklen_t *, cred_t *);
87 typedef sof_rval_t (*sof_listen_fn_t)(sof_handle_t, void *, int *,
88 cred_t *);
89 typedef sof_rval_t (*sof_accept_fn_t)(sof_handle_t, void *, cred_t *);
90 typedef sof_rval_t (*sof_connect_fn_t)(sof_handle_t, void *,
91 struct sockaddr *, socklen_t *, cred_t *);
92 typedef sof_rval_t (*sof_shutdown_fn_t)(sof_handle_t, void *, int *,
93 cred_t *);
94 typedef sof_rval_t (*sof_getsockname_fn_t)(sof_handle_t, void *,
95 struct sockaddr *, socklen_t *, cred_t *);
96 typedef sof_rval_t (*sof_getpeername_fn_t)(sof_handle_t, void *,
97 struct sockaddr *, socklen_t *, cred_t *);
98 typedef sof_rval_t (*sof_setsockopt_fn_t)(sof_handle_t, void *,
99 int, int, void *, socklen_t *, cred_t *);
100 typedef sof_rval_t (*sof_getsockopt_fn_t)(sof_handle_t, void *,
101 int, int, void *, socklen_t *, cred_t *);
102 typedef sof_rval_t (*sof_ioctl_fn_t)(sof_handle_t, void *, int, intptr_t,
103 int, int32_t *, cred_t *);
104 typedef void (*sof_mblk_prop_fn_t)(sof_handle_t, void *, ssize_t *,
105 ushort_t *, ushort_t *);
106 typedef void (*sof_notify_fn_t)(sof_handle_t, void *, sof_event_t,
107 uintptr_t);
109 typedef struct sof_ops {
110 sof_attach_active_fn_t sofop_attach_active;
111 sof_attach_passive_fn_t sofop_attach_passive;
112 sof_detach_fn_t sofop_detach;
113 sof_data_in_fn_t sofop_data_in;
114 sof_data_in_proc_fn_t sofop_data_in_proc;
115 sof_data_out_fn_t sofop_data_out;
116 sof_bind_fn_t sofop_bind;
117 sof_listen_fn_t sofop_listen;
118 sof_connect_fn_t sofop_connect;
119 sof_accept_fn_t sofop_accept;
120 sof_shutdown_fn_t sofop_shutdown;
121 sof_getsockname_fn_t sofop_getsockname;
122 sof_getpeername_fn_t sofop_getpeername;
123 sof_setsockopt_fn_t sofop_setsockopt;
124 sof_getsockopt_fn_t sofop_getsockopt;
125 sof_ioctl_fn_t sofop_ioctl;
126 sof_mblk_prop_fn_t sofop_mblk_prop;
127 sof_notify_fn_t sofop_notify;
128 } sof_ops_t;
130 #define SOF_VERSION 1
132 extern int sof_register(int, const char *, const sof_ops_t *, int);
133 extern int sof_unregister(const char *);
135 extern void sof_newconn_ready(sof_handle_t);
136 extern void sof_bypass(sof_handle_t);
137 extern void *sof_get_cookie(sof_handle_t);
138 extern void *sof_cas_cookie(sof_handle_t, void *, void *);
139 extern int sof_inject_data_out(sof_handle_t, mblk_t *, struct msghdr *,
140 boolean_t *);
141 extern int sof_inject_data_in(sof_handle_t, mblk_t *, size_t, int,
142 boolean_t *);
143 extern void sof_rcv_flowctrl(sof_handle_t, boolean_t);
144 extern void sof_snd_flowctrl(sof_handle_t, boolean_t);
146 #ifdef __cplusplus
148 #endif
150 #endif /* _SYS_SOCKFILTER_H */