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 #include <sys/types.h>
27 #include <sys/errno.h>
28 #include <sys/ddi.h>
29 #include <sys/sunddi.h>
30
31 #include <sys/varargs.h>
32 #ifdef DS_DDICT
33 #include <sys/nsctl/contract.h>
34 #endif
35 #include "ncall.h"
36 #include "ncall_module.h"
37
38 static ncall_node_t nodeinfo;
39
40
41 /* ARGSUSED */
42 void
ncall_stub_register_svc(int svc_id,void (* func)(ncall_t *,int *))43 ncall_stub_register_svc(int svc_id, void (*func)(ncall_t *, int *))
44 {
45 ;
46 }
47
48 /* ARGSUSED */
49 void
ncall_stub_unregister_svc(int svc_id)50 ncall_stub_unregister_svc(int svc_id)
51 {
52 ;
53 }
54
55 /* ARGSUSED */
56 int
ncall_stub_nodeid(char * nodename)57 ncall_stub_nodeid(char *nodename)
58 {
59 return (nodeinfo.nc_nodeid);
60 }
61
62 /* ARGSUSED */
63 char *
ncall_stub_nodename(int nodeid)64 ncall_stub_nodename(int nodeid)
65 {
66 if (nodeid == nodeinfo.nc_nodeid)
67 return (nodeinfo.nc_nodename);
68 else
69 return ("");
70 }
71
72 /* ARGSUSED */
73 int
ncall_stub_mirror(int nodeid)74 ncall_stub_mirror(int nodeid)
75 {
76 return (-1);
77 }
78
79 /* ARGSUSED */
80 int
ncall_stub_self(void)81 ncall_stub_self(void)
82 {
83 return (nodeinfo.nc_nodeid);
84 }
85
86 /* ARGSUSED */
87 int
ncall_stub_alloc(int host_id,int flags,int net,ncall_t ** ncall_p)88 ncall_stub_alloc(int host_id, int flags, int net, ncall_t **ncall_p)
89 {
90 return (ENOLINK);
91 }
92
93 /* ARGSUSED */
94 int
ncall_stub_timedsend(ncall_t * ncall,int flags,int svc_id,struct timeval * t,va_list ap)95 ncall_stub_timedsend(ncall_t *ncall, int flags, int svc_id,
96 struct timeval *t, va_list ap)
97 {
98 return (ENOLINK);
99 }
100
101 /* ARGSUSED */
102 int
ncall_stub_timedsendnotify(ncall_t * ncall,int flags,int svc_id,struct timeval * t,void (* ncall_callback)(ncall_t *,void *),void * vptr,va_list ap)103 ncall_stub_timedsendnotify(ncall_t *ncall, int flags, int svc_id,
104 struct timeval *t, void (*ncall_callback)(ncall_t *, void *), void *vptr,
105 va_list ap)
106 {
107 return (ENOLINK);
108 }
109
110 /* ARGSUSED */
111 int
ncall_stub_broadcast(ncall_t * ncall,int flags,int svc_id,struct timeval * t,va_list ap)112 ncall_stub_broadcast(ncall_t *ncall, int flags, int svc_id,
113 struct timeval *t, va_list ap)
114 {
115 return (ENOLINK);
116 }
117
118 /* ARGSUSED */
119 int
ncall_stub_read_reply(ncall_t * ncall,int n,va_list ap)120 ncall_stub_read_reply(ncall_t *ncall, int n, va_list ap)
121 {
122 return (ENOLINK);
123 }
124
125 /* ARGSUSED */
126 void
ncall_stub_reset(ncall_t * ncall)127 ncall_stub_reset(ncall_t *ncall)
128 {
129 ;
130 }
131
132 /* ARGSUSED */
133 void
ncall_stub_free(ncall_t * ncall)134 ncall_stub_free(ncall_t *ncall)
135 {
136 ;
137 }
138
139 /* ARGSUSED */
140 int
ncall_stub_put_data(ncall_t * ncall,void * data,int len)141 ncall_stub_put_data(ncall_t *ncall, void *data, int len)
142 {
143 return (ENOLINK);
144 }
145
146 /* ARGSUSED */
147 int
ncall_stub_get_data(ncall_t * ncall,void * data,int len)148 ncall_stub_get_data(ncall_t *ncall, void *data, int len)
149 {
150 return (ENOLINK);
151 }
152
153 /* ARGSUSED */
154 int
ncall_stub_sender(ncall_t * ncall)155 ncall_stub_sender(ncall_t *ncall)
156 {
157 return (nodeinfo.nc_nodeid);
158 }
159
160 /* ARGSUSED */
161 void
ncall_stub_reply(ncall_t * ncall,va_list ap)162 ncall_stub_reply(ncall_t *ncall, va_list ap)
163 {
164 ;
165 }
166
167 /* ARGSUSED */
168 void
ncall_stub_pend(ncall_t * ncall)169 ncall_stub_pend(ncall_t *ncall)
170 {
171 ;
172 }
173
174 /* ARGSUSED */
175 void
ncall_stub_done(ncall_t * ncall)176 ncall_stub_done(ncall_t *ncall)
177 {
178 ;
179 }
180
181 int
ncall_stub_ping(char * nodename,int * up)182 ncall_stub_ping(char *nodename, int *up)
183 {
184 int rc = 0;
185
186 if (strcmp(nodename, nodeinfo.nc_nodename) == 0) {
187 *up = 1;
188 } else {
189 rc = EHOSTUNREACH;
190 *up = 0;
191 }
192
193 return (rc);
194 }
195
196 /* ARGSUSED */
197 int
ncall_stub_maxnodes()198 ncall_stub_maxnodes()
199 {
200 return (0);
201 }
202
203
204 /* ARGSUSED */
205 int
ncall_stub_nextnode(void ** vptr)206 ncall_stub_nextnode(void **vptr)
207 {
208 return (0);
209 }
210
211 /* ARGSUSED */
212 int
ncall_stub_errcode(ncall_t * ncall,int * result)213 ncall_stub_errcode(ncall_t *ncall, int *result)
214 {
215 return (ENOLINK);
216 }
217
218
219
220
221 static int ncall_stub_stop(void);
222
223 static ncall_module_t ncall_stubinfo = {
224 NCALL_MODULE_VER,
225 "ncall stubs",
226 ncall_stub_stop,
227 ncall_stub_register_svc,
228 ncall_stub_unregister_svc,
229 ncall_stub_nodeid,
230 ncall_stub_nodename,
231 ncall_stub_mirror,
232 ncall_stub_self,
233 ncall_stub_alloc,
234 ncall_stub_timedsend,
235 ncall_stub_timedsendnotify,
236 ncall_stub_broadcast,
237 ncall_stub_read_reply,
238 ncall_stub_reset,
239 ncall_stub_free,
240 ncall_stub_put_data,
241 ncall_stub_get_data,
242 ncall_stub_sender,
243 ncall_stub_reply,
244 ncall_stub_pend,
245 ncall_stub_done,
246 ncall_stub_ping,
247 ncall_stub_maxnodes,
248 ncall_stub_nextnode,
249 ncall_stub_errcode
250 };
251
252
253 static int
ncall_stub_stop(void)254 ncall_stub_stop(void)
255 {
256 bzero(&nodeinfo, sizeof (nodeinfo));
257 return (ncall_unregister_module(&ncall_stubinfo));
258 }
259
260
261 void
ncall_init_stub(void)262 ncall_init_stub(void)
263 {
264 (void) ncall_register_module(&ncall_stubinfo, &nodeinfo);
265 }
266