xref: /titanic_53/usr/src/uts/common/sys/ksocket.h (revision 0f1702c5201310f0529cd5abb77652e5e9b241b6)
1*0f1702c5SYu Xiangning /*
2*0f1702c5SYu Xiangning  * CDDL HEADER START
3*0f1702c5SYu Xiangning  *
4*0f1702c5SYu Xiangning  * The contents of this file are subject to the terms of the
5*0f1702c5SYu Xiangning  * Common Development and Distribution License (the "License").
6*0f1702c5SYu Xiangning  * You may not use this file except in compliance with the License.
7*0f1702c5SYu Xiangning  *
8*0f1702c5SYu Xiangning  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*0f1702c5SYu Xiangning  * or http://www.opensolaris.org/os/licensing.
10*0f1702c5SYu Xiangning  * See the License for the specific language governing permissions
11*0f1702c5SYu Xiangning  * and limitations under the License.
12*0f1702c5SYu Xiangning  *
13*0f1702c5SYu Xiangning  * When distributing Covered Code, include this CDDL HEADER in each
14*0f1702c5SYu Xiangning  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*0f1702c5SYu Xiangning  * If applicable, add the following below this CDDL HEADER, with the
16*0f1702c5SYu Xiangning  * fields enclosed by brackets "[]" replaced with your own identifying
17*0f1702c5SYu Xiangning  * information: Portions Copyright [yyyy] [name of copyright owner]
18*0f1702c5SYu Xiangning  *
19*0f1702c5SYu Xiangning  * CDDL HEADER END
20*0f1702c5SYu Xiangning  */
21*0f1702c5SYu Xiangning /*
22*0f1702c5SYu Xiangning  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
23*0f1702c5SYu Xiangning  * Use is subject to license terms.
24*0f1702c5SYu Xiangning  */
25*0f1702c5SYu Xiangning 
26*0f1702c5SYu Xiangning #ifndef _SYS_KSOCKET_H_
27*0f1702c5SYu Xiangning #define	_SYS_KSOCKET_H_
28*0f1702c5SYu Xiangning 
29*0f1702c5SYu Xiangning #ifdef	__cplusplus
30*0f1702c5SYu Xiangning extern "C" {
31*0f1702c5SYu Xiangning #endif
32*0f1702c5SYu Xiangning 
33*0f1702c5SYu Xiangning /* Opaque kernel socket type */
34*0f1702c5SYu Xiangning typedef struct __ksocket *ksocket_t;
35*0f1702c5SYu Xiangning struct nmsghdr;
36*0f1702c5SYu Xiangning 
37*0f1702c5SYu Xiangning /* flag bit for each Callback Event */
38*0f1702c5SYu Xiangning #define	KSOCKET_CB_CONNECTED		0x00000001
39*0f1702c5SYu Xiangning #define	KSOCKET_CB_CONNECTFAILED	0x00000002
40*0f1702c5SYu Xiangning #define	KSOCKET_CB_DISCONNECTED		0x00000004
41*0f1702c5SYu Xiangning #define	KSOCKET_CB_NEWDATA		0x00000008
42*0f1702c5SYu Xiangning #define	KSOCKET_CB_NEWCONN		0x00000010
43*0f1702c5SYu Xiangning #define	KSOCKET_CB_CANSEND		0x00000020
44*0f1702c5SYu Xiangning #define	KSOCKET_CB_OOBDATA		0x00000040
45*0f1702c5SYu Xiangning #define	KSOCKET_CB_CANTSENDMORE		0x00000080
46*0f1702c5SYu Xiangning #define	KSOCKET_CB_CANTRECVMORE		0x00000100
47*0f1702c5SYu Xiangning #define	KSOCKET_CB_ERROR		0x00000200
48*0f1702c5SYu Xiangning 
49*0f1702c5SYu Xiangning /*
50*0f1702c5SYu Xiangning  * Kernel Socket Callback Events
51*0f1702c5SYu Xiangning  */
52*0f1702c5SYu Xiangning typedef enum ksocket_event {
53*0f1702c5SYu Xiangning 	KSOCKET_EV_CONNECTED,
54*0f1702c5SYu Xiangning 	KSOCKET_EV_CONNECTFAILED,
55*0f1702c5SYu Xiangning 	KSOCKET_EV_DISCONNECTED,
56*0f1702c5SYu Xiangning 	KSOCKET_EV_OOBDATA,
57*0f1702c5SYu Xiangning 	KSOCKET_EV_NEWDATA,
58*0f1702c5SYu Xiangning 	KSOCKET_EV_NEWCONN,
59*0f1702c5SYu Xiangning 	KSOCKET_EV_CANSEND,
60*0f1702c5SYu Xiangning 	KSOCKET_EV_CANTSENDMORE,
61*0f1702c5SYu Xiangning 	KSOCKET_EV_CANTRECVMORE,
62*0f1702c5SYu Xiangning 	KSOCKET_EV_ERROR
63*0f1702c5SYu Xiangning } ksocket_callback_event_t;
64*0f1702c5SYu Xiangning 
65*0f1702c5SYu Xiangning typedef	void (*ksocket_callback_t)(ksocket_t, ksocket_callback_event_t,
66*0f1702c5SYu Xiangning     void *, uintptr_t);
67*0f1702c5SYu Xiangning 
68*0f1702c5SYu Xiangning typedef struct ksocket_callbacks {
69*0f1702c5SYu Xiangning 	uint32_t		ksock_cb_flags;
70*0f1702c5SYu Xiangning 	ksocket_callback_t	ksock_cb_connected;
71*0f1702c5SYu Xiangning 	ksocket_callback_t	ksock_cb_connectfailed;
72*0f1702c5SYu Xiangning 	ksocket_callback_t	ksock_cb_disconnected;
73*0f1702c5SYu Xiangning 	ksocket_callback_t	ksock_cb_newdata;
74*0f1702c5SYu Xiangning 	ksocket_callback_t	ksock_cb_newconn;
75*0f1702c5SYu Xiangning 	ksocket_callback_t	ksock_cb_cansend;
76*0f1702c5SYu Xiangning 	ksocket_callback_t	ksock_cb_oobdata;
77*0f1702c5SYu Xiangning 	ksocket_callback_t	ksock_cb_cantsendmore;
78*0f1702c5SYu Xiangning 	ksocket_callback_t	ksock_cb_cantrecvmore;
79*0f1702c5SYu Xiangning 	ksocket_callback_t	ksock_cb_error;
80*0f1702c5SYu Xiangning } ksocket_callbacks_t;
81*0f1702c5SYu Xiangning 
82*0f1702c5SYu Xiangning #define	KSOCKET_SLEEP	SOCKET_SLEEP
83*0f1702c5SYu Xiangning #define	KSOCKET_NOSLEEP	SOCKET_NOSLEEP
84*0f1702c5SYu Xiangning 
85*0f1702c5SYu Xiangning extern int 	ksocket_socket(ksocket_t *, int, int, int, int, struct cred *);
86*0f1702c5SYu Xiangning extern int 	ksocket_bind(ksocket_t, struct sockaddr *, socklen_t,
87*0f1702c5SYu Xiangning 		    struct cred *);
88*0f1702c5SYu Xiangning extern int 	ksocket_listen(ksocket_t, int, struct cred *);
89*0f1702c5SYu Xiangning extern int 	ksocket_accept(ksocket_t, struct sockaddr *, socklen_t *,
90*0f1702c5SYu Xiangning 		    ksocket_t *, struct cred *);
91*0f1702c5SYu Xiangning extern int 	ksocket_connect(ksocket_t, const struct sockaddr *, socklen_t,
92*0f1702c5SYu Xiangning 		    struct cred *);
93*0f1702c5SYu Xiangning extern int 	ksocket_send(ksocket_t, void *, size_t, int, size_t *,
94*0f1702c5SYu Xiangning 		    struct cred *);
95*0f1702c5SYu Xiangning extern int	ksocket_sendto(ksocket_t, void *, size_t, int,
96*0f1702c5SYu Xiangning 		    struct sockaddr *, socklen_t, size_t *, struct cred *);
97*0f1702c5SYu Xiangning extern int 	ksocket_sendmsg(ksocket_t, struct nmsghdr *, int, size_t *,
98*0f1702c5SYu Xiangning 		    struct cred *);
99*0f1702c5SYu Xiangning extern int	ksocket_sendmblk(ksocket_t, struct nmsghdr *, int, mblk_t **,
100*0f1702c5SYu Xiangning 		    struct cred *);
101*0f1702c5SYu Xiangning extern int 	ksocket_recv(ksocket_t, void *, size_t, int, size_t *,
102*0f1702c5SYu Xiangning 		    struct cred *);
103*0f1702c5SYu Xiangning extern int	ksocket_recvfrom(ksocket_t, void *, size_t, int,
104*0f1702c5SYu Xiangning 		    struct sockaddr *, socklen_t *, size_t *, struct cred *);
105*0f1702c5SYu Xiangning extern int	ksocket_recvmsg(ksocket_t, struct nmsghdr *, int, size_t *,
106*0f1702c5SYu Xiangning 		    struct cred *);
107*0f1702c5SYu Xiangning extern int	ksocket_shutdown(ksocket_t, int, struct cred *);
108*0f1702c5SYu Xiangning extern int 	ksocket_setsockopt(ksocket_t, int, int, const void *, int,
109*0f1702c5SYu Xiangning 		    struct cred *);
110*0f1702c5SYu Xiangning extern int 	ksocket_getsockopt(ksocket_t, int, int, void *, int *,
111*0f1702c5SYu Xiangning 		    struct cred *);
112*0f1702c5SYu Xiangning extern int 	ksocket_getpeername(ksocket_t, struct sockaddr *, socklen_t *,
113*0f1702c5SYu Xiangning 		    struct cred *);
114*0f1702c5SYu Xiangning extern int 	ksocket_getsockname(ksocket_t, struct sockaddr *, socklen_t *,
115*0f1702c5SYu Xiangning 		    struct cred *);
116*0f1702c5SYu Xiangning extern int	ksocket_ioctl(ksocket_t, int, intptr_t, int *, struct cred *);
117*0f1702c5SYu Xiangning extern int	ksocket_setcallbacks(ksocket_t, ksocket_callbacks_t *, void *,
118*0f1702c5SYu Xiangning 		    struct cred *);
119*0f1702c5SYu Xiangning extern int 	ksocket_close(ksocket_t, struct cred *);
120*0f1702c5SYu Xiangning extern void	ksocket_hold(ksocket_t);
121*0f1702c5SYu Xiangning extern void	ksocket_rele(ksocket_t);
122*0f1702c5SYu Xiangning 
123*0f1702c5SYu Xiangning #ifdef	__cplusplus
124*0f1702c5SYu Xiangning }
125*0f1702c5SYu Xiangning #endif
126*0f1702c5SYu Xiangning 
127*0f1702c5SYu Xiangning #endif /* _SYS_KSOCKET_H_ */
128