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