xref: /onnv-gate/usr/src/uts/common/sys/idm/idm_so.h (revision 10505:f7aa6fc32296)
17978SPeter.Dunlap@Sun.COM /*
27978SPeter.Dunlap@Sun.COM  * CDDL HEADER START
37978SPeter.Dunlap@Sun.COM  *
47978SPeter.Dunlap@Sun.COM  * The contents of this file are subject to the terms of the
57978SPeter.Dunlap@Sun.COM  * Common Development and Distribution License (the "License").
67978SPeter.Dunlap@Sun.COM  * You may not use this file except in compliance with the License.
77978SPeter.Dunlap@Sun.COM  *
87978SPeter.Dunlap@Sun.COM  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
97978SPeter.Dunlap@Sun.COM  * or http://www.opensolaris.org/os/licensing.
107978SPeter.Dunlap@Sun.COM  * See the License for the specific language governing permissions
117978SPeter.Dunlap@Sun.COM  * and limitations under the License.
127978SPeter.Dunlap@Sun.COM  *
137978SPeter.Dunlap@Sun.COM  * When distributing Covered Code, include this CDDL HEADER in each
147978SPeter.Dunlap@Sun.COM  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
157978SPeter.Dunlap@Sun.COM  * If applicable, add the following below this CDDL HEADER, with the
167978SPeter.Dunlap@Sun.COM  * fields enclosed by brackets "[]" replaced with your own identifying
177978SPeter.Dunlap@Sun.COM  * information: Portions Copyright [yyyy] [name of copyright owner]
187978SPeter.Dunlap@Sun.COM  *
197978SPeter.Dunlap@Sun.COM  * CDDL HEADER END
207978SPeter.Dunlap@Sun.COM  */
217978SPeter.Dunlap@Sun.COM /*
229247SPeter.Dunlap@Sun.COM  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
237978SPeter.Dunlap@Sun.COM  * Use is subject to license terms.
247978SPeter.Dunlap@Sun.COM  */
257978SPeter.Dunlap@Sun.COM 
267978SPeter.Dunlap@Sun.COM #ifndef _IDM_SO_H
277978SPeter.Dunlap@Sun.COM #define	_IDM_SO_H
287978SPeter.Dunlap@Sun.COM 
297978SPeter.Dunlap@Sun.COM #ifdef	__cplusplus
307978SPeter.Dunlap@Sun.COM extern "C" {
317978SPeter.Dunlap@Sun.COM #endif
327978SPeter.Dunlap@Sun.COM 
337978SPeter.Dunlap@Sun.COM #include <sys/idm/idm_transport.h>
348348SEric.Yu@Sun.COM #include <sys/ksocket.h>
359247SPeter.Dunlap@Sun.COM 
367978SPeter.Dunlap@Sun.COM /*
377978SPeter.Dunlap@Sun.COM  * Define TCP window size (send and receive buffer sizes)
387978SPeter.Dunlap@Sun.COM  */
397978SPeter.Dunlap@Sun.COM 
407978SPeter.Dunlap@Sun.COM #define	IDM_RCVBUF_SIZE		(256 * 1024)
417978SPeter.Dunlap@Sun.COM #define	IDM_SNDBUF_SIZE		(256 * 1024)
427978SPeter.Dunlap@Sun.COM 
439247SPeter.Dunlap@Sun.COM /*
449247SPeter.Dunlap@Sun.COM  * Lower and upper bounds to use the 128k buffer cache.  Below the lower bound
459247SPeter.Dunlap@Sun.COM  * allocations will use the built-in Solaris buffer caches.  We don't expect
469247SPeter.Dunlap@Sun.COM  * to see allocations above the upper bound because SBD currently allocates
479247SPeter.Dunlap@Sun.COM  * 128k buffers.
489247SPeter.Dunlap@Sun.COM  */
499247SPeter.Dunlap@Sun.COM 
509247SPeter.Dunlap@Sun.COM #define	IDM_SO_BUF_CACHE_LB	(32 * 1024)
519247SPeter.Dunlap@Sun.COM #define	IDM_SO_BUF_CACHE_UB	(128 * 1024)
529247SPeter.Dunlap@Sun.COM 
537978SPeter.Dunlap@Sun.COM /* sockets-specific portion of idm_svc_t */
547978SPeter.Dunlap@Sun.COM typedef struct idm_so_svc_s {
558348SEric.Yu@Sun.COM 	ksocket_t		is_so;
567978SPeter.Dunlap@Sun.COM 	kthread_t		*is_thread;
577978SPeter.Dunlap@Sun.COM 	kt_did_t		is_thread_did;
587978SPeter.Dunlap@Sun.COM 	boolean_t		is_thread_running;
597978SPeter.Dunlap@Sun.COM } idm_so_svc_t;
607978SPeter.Dunlap@Sun.COM 
617978SPeter.Dunlap@Sun.COM /* sockets-specific portion of idm_conn_t */
627978SPeter.Dunlap@Sun.COM typedef struct idm_so_conn_s {
638348SEric.Yu@Sun.COM 	ksocket_t		ic_so;
647978SPeter.Dunlap@Sun.COM 
657978SPeter.Dunlap@Sun.COM 	kthread_t		*ic_tx_thread;
667978SPeter.Dunlap@Sun.COM 	kt_did_t		ic_tx_thread_did;
677978SPeter.Dunlap@Sun.COM 	boolean_t		ic_tx_thread_running;
687978SPeter.Dunlap@Sun.COM 	kmutex_t		ic_tx_mutex;
697978SPeter.Dunlap@Sun.COM 	kcondvar_t		ic_tx_cv;
707978SPeter.Dunlap@Sun.COM 	list_t			ic_tx_list;	/* List of PDUs for transmit */
717978SPeter.Dunlap@Sun.COM 
727978SPeter.Dunlap@Sun.COM 	kthread_t		*ic_rx_thread;
737978SPeter.Dunlap@Sun.COM 	kt_did_t		ic_rx_thread_did;
747978SPeter.Dunlap@Sun.COM 	boolean_t		ic_rx_thread_running;
757978SPeter.Dunlap@Sun.COM } idm_so_conn_t;
767978SPeter.Dunlap@Sun.COM 
777978SPeter.Dunlap@Sun.COM void idm_so_init(idm_transport_t *it);
787978SPeter.Dunlap@Sun.COM void idm_so_fini();
797978SPeter.Dunlap@Sun.COM 
80*10505SPeter.Cudhea@Sun.COM /* used by idm_so_timed_socket_connect */
81*10505SPeter.Cudhea@Sun.COM typedef struct idm_so_timed_socket_s {
82*10505SPeter.Cudhea@Sun.COM 	kcondvar_t	it_cv;
83*10505SPeter.Cudhea@Sun.COM 	boolean_t	it_callback_called;
84*10505SPeter.Cudhea@Sun.COM 	int		it_socket_error_code;
85*10505SPeter.Cudhea@Sun.COM } idm_so_timed_socket_t;
86*10505SPeter.Cudhea@Sun.COM 
877978SPeter.Dunlap@Sun.COM /* Socket functions */
887978SPeter.Dunlap@Sun.COM 
898348SEric.Yu@Sun.COM ksocket_t
907978SPeter.Dunlap@Sun.COM idm_socreate(int domain, int type, int protocol);
917978SPeter.Dunlap@Sun.COM 
928348SEric.Yu@Sun.COM void idm_soshutdown(ksocket_t so);
937978SPeter.Dunlap@Sun.COM 
948348SEric.Yu@Sun.COM void idm_sodestroy(ksocket_t so);
957978SPeter.Dunlap@Sun.COM 
969373SPeter.Dunlap@Sun.COM int idm_ss_compare(const struct sockaddr_storage *cmp_ss1,
979373SPeter.Dunlap@Sun.COM     const struct sockaddr_storage *cmp_ss2,
98*10505SPeter.Cudhea@Sun.COM     boolean_t v4_mapped_as_v4,
99*10505SPeter.Cudhea@Sun.COM     boolean_t compare_ports);
1009373SPeter.Dunlap@Sun.COM 
1017978SPeter.Dunlap@Sun.COM int idm_get_ipaddr(idm_addr_list_t **);
1027978SPeter.Dunlap@Sun.COM 
103*10505SPeter.Cudhea@Sun.COM void idm_addr_to_sa(idm_addr_t *dportal,
104*10505SPeter.Cudhea@Sun.COM     struct sockaddr_storage *sa);
105*10505SPeter.Cudhea@Sun.COM 
106*10505SPeter.Cudhea@Sun.COM #define	IDM_SA_NTOP_BUFSIZ (INET6_ADDRSTRLEN + sizeof ("[].65535") + 1)
107*10505SPeter.Cudhea@Sun.COM 
108*10505SPeter.Cudhea@Sun.COM const char *idm_sa_ntop(const struct sockaddr_storage *sa,
109*10505SPeter.Cudhea@Sun.COM     char *buf, size_t size);
110*10505SPeter.Cudhea@Sun.COM 
1118348SEric.Yu@Sun.COM int idm_sorecv(ksocket_t so, void *msg, size_t len);
1127978SPeter.Dunlap@Sun.COM 
1138348SEric.Yu@Sun.COM int idm_sosendto(ksocket_t so, void *buff, size_t len,
1147978SPeter.Dunlap@Sun.COM     struct sockaddr *name, socklen_t namelen);
1157978SPeter.Dunlap@Sun.COM 
1168348SEric.Yu@Sun.COM int idm_iov_sosend(ksocket_t so, iovec_t *iop, int iovlen,
1177978SPeter.Dunlap@Sun.COM     size_t total_len);
1187978SPeter.Dunlap@Sun.COM 
1198348SEric.Yu@Sun.COM int idm_iov_sorecv(ksocket_t so, iovec_t *iop, int iovlen,
1207978SPeter.Dunlap@Sun.COM     size_t total_len);
1217978SPeter.Dunlap@Sun.COM 
1227978SPeter.Dunlap@Sun.COM void idm_sotx_thread(void *arg);
1237978SPeter.Dunlap@Sun.COM void idm_sorx_thread(void *arg);
1247978SPeter.Dunlap@Sun.COM 
1257978SPeter.Dunlap@Sun.COM 
1267978SPeter.Dunlap@Sun.COM int idm_sotx_pdu_constructor(void *hdl, void *arg, int flags);
1277978SPeter.Dunlap@Sun.COM 
1287978SPeter.Dunlap@Sun.COM void idm_sotx_pdu_destructor(void *pdu_void, void *arg);
1297978SPeter.Dunlap@Sun.COM 
1307978SPeter.Dunlap@Sun.COM int idm_sorx_pdu_constructor(void *hdl, void *arg, int flags);
1317978SPeter.Dunlap@Sun.COM 
1327978SPeter.Dunlap@Sun.COM void idm_sorx_pdu_destructor(void *pdu_void, void *arg);
1337978SPeter.Dunlap@Sun.COM 
1347978SPeter.Dunlap@Sun.COM void idm_so_svc_port_watcher(void *arg);
1357978SPeter.Dunlap@Sun.COM 
136*10505SPeter.Cudhea@Sun.COM int idm_so_timed_socket_connect(ksocket_t ks,
137*10505SPeter.Cudhea@Sun.COM     struct sockaddr_storage *sa, int sa_sz, int login_max_usec);
1387978SPeter.Dunlap@Sun.COM 
1397978SPeter.Dunlap@Sun.COM #ifdef	__cplusplus
1407978SPeter.Dunlap@Sun.COM }
1417978SPeter.Dunlap@Sun.COM #endif
1427978SPeter.Dunlap@Sun.COM 
1437978SPeter.Dunlap@Sun.COM #endif /* _IDM_SO_H */
144