0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning/*
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning * CDDL HEADER START
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning *
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning * The contents of this file are subject to the terms of the
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning * Common Development and Distribution License (the "License").
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning * You may not use this file except in compliance with the License.
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning *
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning * or http://www.opensolaris.org/os/licensing.
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning * See the License for the specific language governing permissions
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning * and limitations under the License.
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning *
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning * When distributing Covered Code, include this CDDL HEADER in each
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning * If applicable, add the following below this CDDL HEADER, with the
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning * fields enclosed by brackets "[]" replaced with your own identifying
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning * information: Portions Copyright [yyyy] [name of copyright owner]
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning *
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning * CDDL HEADER END
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning */
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning/*
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning * Use is subject to license terms.
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning */
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning#ifndef _INET_KSOCKET_KSOCKET_IMPL_H
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning#define _INET_KSOCKET_KSOCKET_IMPL_H
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning#define KSTOSO(ks) ((struct sonode *)(ks))
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning#define SOTOKS(so) ((ksocket_t)(uintptr_t)(so))
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning#define IS_KERNEL_SOCKET(so) ((so)->so_mode & SM_KERNEL)
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning#define KSOCKET_MOD_VERSION "kernel socket module"
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning#define __KSOCKET_EV_connected KSOCKET_EV_CONNECTED
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning#define __KSOCKET_EV_connectfailed KSOCKET_EV_CONNECTFAILED
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning#define __KSOCKET_EV_disconnected KSOCKET_EV_DISCONNECTED
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning#define __KSOCKET_EV_oobdata KSOCKET_EV_OOBDATA
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning#define __KSOCKET_EV_newdata KSOCKET_EV_NEWDATA
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning#define __KSOCKET_EV_newconn KSOCKET_EV_NEWCONN
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning#define __KSOCKET_EV_cansend KSOCKET_EV_CANSEND
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning#define __KSOCKET_EV_cantsendmore KSOCKET_EV_CANTSENDMORE
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning#define __KSOCKET_EV_cantrecvmore KSOCKET_EV_CANTRECVMORE
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning#define __KSOCKET_EV_error KSOCKET_EV_ERROR
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning#define KSOCKET_CALLBACK(so, cbfn, arg) \
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning if ((so)->so_ksock_callbacks.ksock_cb_##cbfn != NULL) { \
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning (*(so)->so_ksock_callbacks.ksock_cb_##cbfn)(SOTOKS(so), \
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning __KSOCKET_EV_##cbfn, (so)->so_ksock_cb_arg, (arg)); \
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning }
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning#define KSOCKET_FMODE(so) FREAD|FWRITE| \
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning ((KSTOSO(so)->so_state & (SS_NDELAY|SS_NONBLOCK)) ? FNDELAY : 0)
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning#define KSOCKET_VALID(ks) \
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning ((ks) != NULL && (KSTOSO(ks))->so_mode & SM_KERNEL && \
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning !((KSTOSO(ks))->so_state & SS_CLOSING))
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning#define SETCALLBACK(so, cb, cbfn, cbflg) \
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning if ((cb)->ksock_cb_flags & (cbflg)) { \
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning (so)->so_ksock_callbacks.ksock_cb_##cbfn \
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning = (cb)->ksock_cb_##cbfn; \
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning if ((cb)->ksock_cb_##cbfn == NULL) \
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning (so)->so_ksock_callbacks.ksock_cb_flags \
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning &= ~(cbflg); \
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning else \
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning (so)->so_ksock_callbacks.ksock_cb_flags \
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning |= (cbflg); \
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning }
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning
0f1702c5201310f0529cd5abb77652e5e9b241b6Yu Xiangning#endif /* _INET_KSOCKET_KSOCKET_IMPL_H */