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 2009 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 30 extern "C" { 31 #endif 32 33 #include <sys/idm/idm_transport.h> 34 #include <sys/ksocket.h> 35 36 /* 37 * Define TCP window size (send and receive buffer sizes) 38 */ 39 40 #define IDM_RCVBUF_SIZE (256 * 1024) 41 #define IDM_SNDBUF_SIZE (256 * 1024) 42 43 /* 44 * Lower and upper bounds to use the 128k buffer cache. Below the lower bound 45 * allocations will use the built-in Solaris buffer caches. We don't expect 46 * to see allocations above the upper bound because SBD currently allocates 47 * 128k buffers. 48 */ 49 50 #define IDM_SO_BUF_CACHE_LB (32 * 1024) 51 #define IDM_SO_BUF_CACHE_UB (128 * 1024) 52 53 /* sockets-specific portion of idm_svc_t */ 54 typedef struct idm_so_svc_s { 55 ksocket_t is_so; 56 kthread_t *is_thread; 57 kt_did_t is_thread_did; 58 boolean_t is_thread_running; 59 } idm_so_svc_t; 60 61 /* sockets-specific portion of idm_conn_t */ 62 typedef struct idm_so_conn_s { 63 ksocket_t ic_so; 64 65 kthread_t *ic_tx_thread; 66 kt_did_t ic_tx_thread_did; 67 boolean_t ic_tx_thread_running; 68 kmutex_t ic_tx_mutex; 69 kcondvar_t ic_tx_cv; 70 list_t ic_tx_list; /* List of PDUs for transmit */ 71 72 kthread_t *ic_rx_thread; 73 kt_did_t ic_rx_thread_did; 74 boolean_t ic_rx_thread_running; 75 } idm_so_conn_t; 76 77 void idm_so_init(idm_transport_t *it); 78 void idm_so_fini(); 79 80 /* used by idm_so_timed_socket_connect */ 81 typedef struct idm_so_timed_socket_s { 82 kcondvar_t it_cv; 83 boolean_t it_callback_called; 84 int it_socket_error_code; 85 } idm_so_timed_socket_t; 86 87 /* Socket functions */ 88 89 ksocket_t 90 idm_socreate(int domain, int type, int protocol); 91 92 void idm_soshutdown(ksocket_t so); 93 94 void idm_sodestroy(ksocket_t so); 95 96 int idm_ss_compare(const struct sockaddr_storage *cmp_ss1, 97 const struct sockaddr_storage *cmp_ss2, 98 boolean_t v4_mapped_as_v4, 99 boolean_t compare_ports); 100 101 int idm_get_ipaddr(idm_addr_list_t **); 102 103 void idm_addr_to_sa(idm_addr_t *dportal, 104 struct sockaddr_storage *sa); 105 106 #define IDM_SA_NTOP_BUFSIZ (INET6_ADDRSTRLEN + sizeof ("[].65535") + 1) 107 108 const char *idm_sa_ntop(const struct sockaddr_storage *sa, 109 char *buf, size_t size); 110 111 int idm_sorecv(ksocket_t so, void *msg, size_t len); 112 113 int idm_sosendto(ksocket_t so, void *buff, size_t len, 114 struct sockaddr *name, socklen_t namelen); 115 116 int idm_iov_sosend(ksocket_t so, iovec_t *iop, int iovlen, 117 size_t total_len); 118 119 int idm_iov_sorecv(ksocket_t so, iovec_t *iop, int iovlen, 120 size_t total_len); 121 122 void idm_sotx_thread(void *arg); 123 void idm_sorx_thread(void *arg); 124 125 126 int idm_sotx_pdu_constructor(void *hdl, void *arg, int flags); 127 128 void idm_sotx_pdu_destructor(void *pdu_void, void *arg); 129 130 int idm_sorx_pdu_constructor(void *hdl, void *arg, int flags); 131 132 void idm_sorx_pdu_destructor(void *pdu_void, void *arg); 133 134 void idm_so_svc_port_watcher(void *arg); 135 136 int idm_so_timed_socket_connect(ksocket_t ks, 137 struct sockaddr_storage *sa, int sa_sz, int login_max_usec); 138 139 #ifdef __cplusplus 140 } 141 #endif 142 143 #endif /* _IDM_SO_H */ 144