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.
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.
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]
22 * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
23 * Use is subject to license terms.
33 #include <sys/idm/idm_transport.h>
34 #include <sys/ksocket.h>
37 * Define TCP window size (send and receive buffer sizes)
40 #define IDM_RCVBUF_SIZE (256 * 1024)
41 #define IDM_SNDBUF_SIZE (256 * 1024)
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
50 #define IDM_SO_BUF_CACHE_LB (32 * 1024)
51 #define IDM_SO_BUF_CACHE_UB (128 * 1024)
53 /* sockets-specific portion of idm_svc_t */
54 typedef struct idm_so_svc_s
{
57 kt_did_t is_thread_did
;
58 boolean_t is_thread_running
;
61 /* sockets-specific portion of idm_conn_t */
62 typedef struct idm_so_conn_s
{
65 kthread_t
*ic_tx_thread
;
66 kt_did_t ic_tx_thread_did
;
67 boolean_t ic_tx_thread_running
;
70 list_t ic_tx_list
; /* List of PDUs for transmit */
72 kthread_t
*ic_rx_thread
;
73 kt_did_t ic_rx_thread_did
;
74 boolean_t ic_rx_thread_running
;
77 void idm_so_init(idm_transport_t
*it
);
80 /* used by idm_so_timed_socket_connect */
81 typedef struct idm_so_timed_socket_s
{
83 boolean_t it_callback_called
;
84 int it_socket_error_code
;
85 } idm_so_timed_socket_t
;
87 /* Socket functions */
90 idm_socreate(int domain
, int type
, int protocol
);
92 void idm_soshutdown(ksocket_t so
);
94 void idm_sodestroy(ksocket_t so
);
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
);
101 int idm_get_ipaddr(idm_addr_list_t
**);
103 void idm_addr_to_sa(idm_addr_t
*dportal
,
104 struct sockaddr_storage
*sa
);
106 #define IDM_SA_NTOP_BUFSIZ (INET6_ADDRSTRLEN + sizeof ("[].65535") + 1)
108 const char *idm_sa_ntop(const struct sockaddr_storage
*sa
,
109 char *buf
, size_t size
);
111 int idm_sorecv(ksocket_t so
, void *msg
, size_t len
);
113 int idm_sosendto(ksocket_t so
, void *buff
, size_t len
,
114 struct sockaddr
*name
, socklen_t namelen
);
116 int idm_iov_sosend(ksocket_t so
, iovec_t
*iop
, int iovlen
,
119 int idm_iov_sorecv(ksocket_t so
, iovec_t
*iop
, int iovlen
,
122 void idm_sotx_thread(void *arg
);
123 void idm_sorx_thread(void *arg
);
126 int idm_sotx_pdu_constructor(void *hdl
, void *arg
, int flags
);
128 void idm_sotx_pdu_destructor(void *pdu_void
, void *arg
);
130 int idm_sorx_pdu_constructor(void *hdl
, void *arg
, int flags
);
132 void idm_sorx_pdu_destructor(void *pdu_void
, void *arg
);
134 void idm_so_svc_port_watcher(void *arg
);
136 int idm_so_timed_socket_connect(ksocket_t ks
,
137 struct sockaddr_storage
*sa
, int sa_sz
, int login_max_usec
);
143 #endif /* _IDM_SO_H */