18348SEric.Yu@Sun.COM /* 28348SEric.Yu@Sun.COM * CDDL HEADER START 38348SEric.Yu@Sun.COM * 48348SEric.Yu@Sun.COM * The contents of this file are subject to the terms of the 58348SEric.Yu@Sun.COM * Common Development and Distribution License (the "License"). 68348SEric.Yu@Sun.COM * You may not use this file except in compliance with the License. 78348SEric.Yu@Sun.COM * 88348SEric.Yu@Sun.COM * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 98348SEric.Yu@Sun.COM * or http://www.opensolaris.org/os/licensing. 108348SEric.Yu@Sun.COM * See the License for the specific language governing permissions 118348SEric.Yu@Sun.COM * and limitations under the License. 128348SEric.Yu@Sun.COM * 138348SEric.Yu@Sun.COM * When distributing Covered Code, include this CDDL HEADER in each 148348SEric.Yu@Sun.COM * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 158348SEric.Yu@Sun.COM * If applicable, add the following below this CDDL HEADER, with the 168348SEric.Yu@Sun.COM * fields enclosed by brackets "[]" replaced with your own identifying 178348SEric.Yu@Sun.COM * information: Portions Copyright [yyyy] [name of copyright owner] 188348SEric.Yu@Sun.COM * 198348SEric.Yu@Sun.COM * CDDL HEADER END 208348SEric.Yu@Sun.COM */ 218348SEric.Yu@Sun.COM /* 22*12643SAnders.Persson@Sun.COM * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. 238348SEric.Yu@Sun.COM */ 248348SEric.Yu@Sun.COM 258348SEric.Yu@Sun.COM #ifndef _SYS_KSOCKET_H_ 268348SEric.Yu@Sun.COM #define _SYS_KSOCKET_H_ 278348SEric.Yu@Sun.COM 288348SEric.Yu@Sun.COM #ifdef __cplusplus 298348SEric.Yu@Sun.COM extern "C" { 308348SEric.Yu@Sun.COM #endif 318348SEric.Yu@Sun.COM 328348SEric.Yu@Sun.COM /* Opaque kernel socket type */ 338348SEric.Yu@Sun.COM typedef struct __ksocket *ksocket_t; 348348SEric.Yu@Sun.COM struct nmsghdr; 358348SEric.Yu@Sun.COM 368348SEric.Yu@Sun.COM /* flag bit for each Callback Event */ 378348SEric.Yu@Sun.COM #define KSOCKET_CB_CONNECTED 0x00000001 388348SEric.Yu@Sun.COM #define KSOCKET_CB_CONNECTFAILED 0x00000002 398348SEric.Yu@Sun.COM #define KSOCKET_CB_DISCONNECTED 0x00000004 408348SEric.Yu@Sun.COM #define KSOCKET_CB_NEWDATA 0x00000008 418348SEric.Yu@Sun.COM #define KSOCKET_CB_NEWCONN 0x00000010 428348SEric.Yu@Sun.COM #define KSOCKET_CB_CANSEND 0x00000020 438348SEric.Yu@Sun.COM #define KSOCKET_CB_OOBDATA 0x00000040 448348SEric.Yu@Sun.COM #define KSOCKET_CB_CANTSENDMORE 0x00000080 458348SEric.Yu@Sun.COM #define KSOCKET_CB_CANTRECVMORE 0x00000100 468348SEric.Yu@Sun.COM #define KSOCKET_CB_ERROR 0x00000200 478348SEric.Yu@Sun.COM 488348SEric.Yu@Sun.COM /* 498348SEric.Yu@Sun.COM * Kernel Socket Callback Events 508348SEric.Yu@Sun.COM */ 518348SEric.Yu@Sun.COM typedef enum ksocket_event { 528348SEric.Yu@Sun.COM KSOCKET_EV_CONNECTED, 538348SEric.Yu@Sun.COM KSOCKET_EV_CONNECTFAILED, 548348SEric.Yu@Sun.COM KSOCKET_EV_DISCONNECTED, 558348SEric.Yu@Sun.COM KSOCKET_EV_OOBDATA, 568348SEric.Yu@Sun.COM KSOCKET_EV_NEWDATA, 578348SEric.Yu@Sun.COM KSOCKET_EV_NEWCONN, 588348SEric.Yu@Sun.COM KSOCKET_EV_CANSEND, 598348SEric.Yu@Sun.COM KSOCKET_EV_CANTSENDMORE, 608348SEric.Yu@Sun.COM KSOCKET_EV_CANTRECVMORE, 618348SEric.Yu@Sun.COM KSOCKET_EV_ERROR 628348SEric.Yu@Sun.COM } ksocket_callback_event_t; 638348SEric.Yu@Sun.COM 648348SEric.Yu@Sun.COM typedef void (*ksocket_callback_t)(ksocket_t, ksocket_callback_event_t, 658348SEric.Yu@Sun.COM void *, uintptr_t); 668348SEric.Yu@Sun.COM 678348SEric.Yu@Sun.COM typedef struct ksocket_callbacks { 688348SEric.Yu@Sun.COM uint32_t ksock_cb_flags; 698348SEric.Yu@Sun.COM ksocket_callback_t ksock_cb_connected; 708348SEric.Yu@Sun.COM ksocket_callback_t ksock_cb_connectfailed; 718348SEric.Yu@Sun.COM ksocket_callback_t ksock_cb_disconnected; 728348SEric.Yu@Sun.COM ksocket_callback_t ksock_cb_newdata; 738348SEric.Yu@Sun.COM ksocket_callback_t ksock_cb_newconn; 748348SEric.Yu@Sun.COM ksocket_callback_t ksock_cb_cansend; 758348SEric.Yu@Sun.COM ksocket_callback_t ksock_cb_oobdata; 768348SEric.Yu@Sun.COM ksocket_callback_t ksock_cb_cantsendmore; 778348SEric.Yu@Sun.COM ksocket_callback_t ksock_cb_cantrecvmore; 788348SEric.Yu@Sun.COM ksocket_callback_t ksock_cb_error; 798348SEric.Yu@Sun.COM } ksocket_callbacks_t; 808348SEric.Yu@Sun.COM 818348SEric.Yu@Sun.COM #define KSOCKET_SLEEP SOCKET_SLEEP 828348SEric.Yu@Sun.COM #define KSOCKET_NOSLEEP SOCKET_NOSLEEP 838348SEric.Yu@Sun.COM 848348SEric.Yu@Sun.COM extern int ksocket_socket(ksocket_t *, int, int, int, int, struct cred *); 858348SEric.Yu@Sun.COM extern int ksocket_bind(ksocket_t, struct sockaddr *, socklen_t, 868348SEric.Yu@Sun.COM struct cred *); 878348SEric.Yu@Sun.COM extern int ksocket_listen(ksocket_t, int, struct cred *); 888348SEric.Yu@Sun.COM extern int ksocket_accept(ksocket_t, struct sockaddr *, socklen_t *, 898348SEric.Yu@Sun.COM ksocket_t *, struct cred *); 90*12643SAnders.Persson@Sun.COM extern int ksocket_connect(ksocket_t, struct sockaddr *, socklen_t, 918348SEric.Yu@Sun.COM struct cred *); 928348SEric.Yu@Sun.COM extern int ksocket_send(ksocket_t, void *, size_t, int, size_t *, 938348SEric.Yu@Sun.COM struct cred *); 948348SEric.Yu@Sun.COM extern int ksocket_sendto(ksocket_t, void *, size_t, int, 958348SEric.Yu@Sun.COM struct sockaddr *, socklen_t, size_t *, struct cred *); 968348SEric.Yu@Sun.COM extern int ksocket_sendmsg(ksocket_t, struct nmsghdr *, int, size_t *, 978348SEric.Yu@Sun.COM struct cred *); 988348SEric.Yu@Sun.COM extern int ksocket_sendmblk(ksocket_t, struct nmsghdr *, int, mblk_t **, 998348SEric.Yu@Sun.COM struct cred *); 1008348SEric.Yu@Sun.COM extern int ksocket_recv(ksocket_t, void *, size_t, int, size_t *, 1018348SEric.Yu@Sun.COM struct cred *); 1028348SEric.Yu@Sun.COM extern int ksocket_recvfrom(ksocket_t, void *, size_t, int, 1038348SEric.Yu@Sun.COM struct sockaddr *, socklen_t *, size_t *, struct cred *); 1048348SEric.Yu@Sun.COM extern int ksocket_recvmsg(ksocket_t, struct nmsghdr *, int, size_t *, 1058348SEric.Yu@Sun.COM struct cred *); 1068348SEric.Yu@Sun.COM extern int ksocket_shutdown(ksocket_t, int, struct cred *); 1078348SEric.Yu@Sun.COM extern int ksocket_setsockopt(ksocket_t, int, int, const void *, int, 1088348SEric.Yu@Sun.COM struct cred *); 1098348SEric.Yu@Sun.COM extern int ksocket_getsockopt(ksocket_t, int, int, void *, int *, 1108348SEric.Yu@Sun.COM struct cred *); 1118348SEric.Yu@Sun.COM extern int ksocket_getpeername(ksocket_t, struct sockaddr *, socklen_t *, 1128348SEric.Yu@Sun.COM struct cred *); 1138348SEric.Yu@Sun.COM extern int ksocket_getsockname(ksocket_t, struct sockaddr *, socklen_t *, 1148348SEric.Yu@Sun.COM struct cred *); 1158348SEric.Yu@Sun.COM extern int ksocket_ioctl(ksocket_t, int, intptr_t, int *, struct cred *); 1168348SEric.Yu@Sun.COM extern int ksocket_setcallbacks(ksocket_t, ksocket_callbacks_t *, void *, 1178348SEric.Yu@Sun.COM struct cred *); 1188348SEric.Yu@Sun.COM extern int ksocket_close(ksocket_t, struct cred *); 1198348SEric.Yu@Sun.COM extern void ksocket_hold(ksocket_t); 1208348SEric.Yu@Sun.COM extern void ksocket_rele(ksocket_t); 1218348SEric.Yu@Sun.COM 1228348SEric.Yu@Sun.COM #ifdef __cplusplus 1238348SEric.Yu@Sun.COM } 1248348SEric.Yu@Sun.COM #endif 1258348SEric.Yu@Sun.COM 1268348SEric.Yu@Sun.COM #endif /* _SYS_KSOCKET_H_ */ 127