idm_so.h revision 8348:4137e18bfaf0
1/* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21/* 22 * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 */ 25 26#ifndef _IDM_SO_H 27#define _IDM_SO_H 28 29#ifdef __cplusplus 30extern "C" { 31#endif 32 33#include <sys/idm/idm_transport.h> 34#include <sys/ksocket.h> 35/* 36 * Define TCP window size (send and receive buffer sizes) 37 */ 38 39#define IDM_RCVBUF_SIZE (256 * 1024) 40#define IDM_SNDBUF_SIZE (256 * 1024) 41 42/* sockets-specific portion of idm_svc_t */ 43typedef struct idm_so_svc_s { 44 ksocket_t is_so; 45 kthread_t *is_thread; 46 kt_did_t is_thread_did; 47 boolean_t is_thread_running; 48} idm_so_svc_t; 49 50/* sockets-specific portion of idm_conn_t */ 51typedef struct idm_so_conn_s { 52 ksocket_t ic_so; 53 54 kthread_t *ic_tx_thread; 55 kt_did_t ic_tx_thread_did; 56 boolean_t ic_tx_thread_running; 57 kmutex_t ic_tx_mutex; 58 kcondvar_t ic_tx_cv; 59 list_t ic_tx_list; /* List of PDUs for transmit */ 60 61 kthread_t *ic_rx_thread; 62 kt_did_t ic_rx_thread_did; 63 boolean_t ic_rx_thread_running; 64} idm_so_conn_t; 65 66void idm_so_init(idm_transport_t *it); 67void idm_so_fini(); 68 69/* Socket functions */ 70 71ksocket_t 72idm_socreate(int domain, int type, int protocol); 73 74void idm_soshutdown(ksocket_t so); 75 76void idm_sodestroy(ksocket_t so); 77 78int idm_get_ipaddr(idm_addr_list_t **); 79 80int idm_sorecv(ksocket_t so, void *msg, size_t len); 81 82int idm_sosendto(ksocket_t so, void *buff, size_t len, 83 struct sockaddr *name, socklen_t namelen); 84 85int idm_iov_sosend(ksocket_t so, iovec_t *iop, int iovlen, 86 size_t total_len); 87 88int idm_iov_sorecv(ksocket_t so, iovec_t *iop, int iovlen, 89 size_t total_len); 90 91void idm_sotx_thread(void *arg); 92void idm_sorx_thread(void *arg); 93 94 95int idm_sotx_pdu_constructor(void *hdl, void *arg, int flags); 96 97void idm_sotx_pdu_destructor(void *pdu_void, void *arg); 98 99int idm_sorx_pdu_constructor(void *hdl, void *arg, int flags); 100 101void idm_sorx_pdu_destructor(void *pdu_void, void *arg); 102 103void idm_so_svc_port_watcher(void *arg); 104 105 106#ifdef __cplusplus 107} 108#endif 109 110#endif /* _IDM_SO_H */ 111