10f1702c5SYu Xiangning /* 20f1702c5SYu Xiangning * CDDL HEADER START 30f1702c5SYu Xiangning * 40f1702c5SYu Xiangning * The contents of this file are subject to the terms of the 50f1702c5SYu Xiangning * Common Development and Distribution License (the "License"). 60f1702c5SYu Xiangning * You may not use this file except in compliance with the License. 70f1702c5SYu Xiangning * 80f1702c5SYu Xiangning * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 90f1702c5SYu Xiangning * or http://www.opensolaris.org/os/licensing. 100f1702c5SYu Xiangning * See the License for the specific language governing permissions 110f1702c5SYu Xiangning * and limitations under the License. 120f1702c5SYu Xiangning * 130f1702c5SYu Xiangning * When distributing Covered Code, include this CDDL HEADER in each 140f1702c5SYu Xiangning * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 150f1702c5SYu Xiangning * If applicable, add the following below this CDDL HEADER, with the 160f1702c5SYu Xiangning * fields enclosed by brackets "[]" replaced with your own identifying 170f1702c5SYu Xiangning * information: Portions Copyright [yyyy] [name of copyright owner] 180f1702c5SYu Xiangning * 190f1702c5SYu Xiangning * CDDL HEADER END 200f1702c5SYu Xiangning */ 210f1702c5SYu Xiangning 220f1702c5SYu Xiangning /* 230f1702c5SYu Xiangning * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 240f1702c5SYu Xiangning * Use is subject to license terms. 25*907c2824SRobert Mustacchi * Copyright 2015, Joyent, Inc. 260f1702c5SYu Xiangning */ 270f1702c5SYu Xiangning 280f1702c5SYu Xiangning #ifndef _INET_KSOCKET_KSOCKET_IMPL_H 290f1702c5SYu Xiangning #define _INET_KSOCKET_KSOCKET_IMPL_H 300f1702c5SYu Xiangning 31*907c2824SRobert Mustacchi /* 32*907c2824SRobert Mustacchi * Note that if this relationship ever changes, the logic in ksocket_krecv_set 33*907c2824SRobert Mustacchi * must be updated and we must maintain local state about this on whatever the 34*907c2824SRobert Mustacchi * new ksocket object is. 35*907c2824SRobert Mustacchi */ 360f1702c5SYu Xiangning #define KSTOSO(ks) ((struct sonode *)(ks)) 370f1702c5SYu Xiangning #define SOTOKS(so) ((ksocket_t)(uintptr_t)(so)) 380f1702c5SYu Xiangning 390f1702c5SYu Xiangning #define IS_KERNEL_SOCKET(so) ((so)->so_mode & SM_KERNEL) 400f1702c5SYu Xiangning 410f1702c5SYu Xiangning #define KSOCKET_MOD_VERSION "kernel socket module" 420f1702c5SYu Xiangning 430f1702c5SYu Xiangning #define __KSOCKET_EV_connected KSOCKET_EV_CONNECTED 440f1702c5SYu Xiangning #define __KSOCKET_EV_connectfailed KSOCKET_EV_CONNECTFAILED 450f1702c5SYu Xiangning #define __KSOCKET_EV_disconnected KSOCKET_EV_DISCONNECTED 460f1702c5SYu Xiangning #define __KSOCKET_EV_oobdata KSOCKET_EV_OOBDATA 470f1702c5SYu Xiangning #define __KSOCKET_EV_newdata KSOCKET_EV_NEWDATA 480f1702c5SYu Xiangning #define __KSOCKET_EV_newconn KSOCKET_EV_NEWCONN 490f1702c5SYu Xiangning #define __KSOCKET_EV_cansend KSOCKET_EV_CANSEND 500f1702c5SYu Xiangning #define __KSOCKET_EV_cantsendmore KSOCKET_EV_CANTSENDMORE 510f1702c5SYu Xiangning #define __KSOCKET_EV_cantrecvmore KSOCKET_EV_CANTRECVMORE 520f1702c5SYu Xiangning #define __KSOCKET_EV_error KSOCKET_EV_ERROR 530f1702c5SYu Xiangning 54*907c2824SRobert Mustacchi #define KSOCKET_CALLBACK(so, cbfn, arg) \ 550f1702c5SYu Xiangning if ((so)->so_ksock_callbacks.ksock_cb_##cbfn != NULL) { \ 560f1702c5SYu Xiangning (*(so)->so_ksock_callbacks.ksock_cb_##cbfn)(SOTOKS(so), \ 570f1702c5SYu Xiangning __KSOCKET_EV_##cbfn, (so)->so_ksock_cb_arg, (arg)); \ 580f1702c5SYu Xiangning } 590f1702c5SYu Xiangning 600f1702c5SYu Xiangning #define KSOCKET_FMODE(so) FREAD|FWRITE| \ 610f1702c5SYu Xiangning ((KSTOSO(so)->so_state & (SS_NDELAY|SS_NONBLOCK)) ? FNDELAY : 0) 620f1702c5SYu Xiangning 630f1702c5SYu Xiangning #define KSOCKET_VALID(ks) \ 640f1702c5SYu Xiangning ((ks) != NULL && (KSTOSO(ks))->so_mode & SM_KERNEL && \ 650f1702c5SYu Xiangning !((KSTOSO(ks))->so_state & SS_CLOSING)) 660f1702c5SYu Xiangning 670f1702c5SYu Xiangning #define SETCALLBACK(so, cb, cbfn, cbflg) \ 680f1702c5SYu Xiangning if ((cb)->ksock_cb_flags & (cbflg)) { \ 690f1702c5SYu Xiangning (so)->so_ksock_callbacks.ksock_cb_##cbfn \ 700f1702c5SYu Xiangning = (cb)->ksock_cb_##cbfn; \ 710f1702c5SYu Xiangning if ((cb)->ksock_cb_##cbfn == NULL) \ 720f1702c5SYu Xiangning (so)->so_ksock_callbacks.ksock_cb_flags \ 730f1702c5SYu Xiangning &= ~(cbflg); \ 740f1702c5SYu Xiangning else \ 750f1702c5SYu Xiangning (so)->so_ksock_callbacks.ksock_cb_flags \ 760f1702c5SYu Xiangning |= (cbflg); \ 770f1702c5SYu Xiangning } 780f1702c5SYu Xiangning 790f1702c5SYu Xiangning 800f1702c5SYu Xiangning #endif /* _INET_KSOCKET_KSOCKET_IMPL_H */ 81