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
  43 ncall_stub_register_svc(int svc_id, void (*func)(ncall_t *, int *))
  44 {
  45         ;
  46 }
  47 
  48 /* ARGSUSED */
  49 void
  50 ncall_stub_unregister_svc(int svc_id)
  51 {
  52         ;
  53 }
  54 
  55 /* ARGSUSED */
  56 int
  57 ncall_stub_nodeid(char *nodename)
  58 {
  59         return (nodeinfo.nc_nodeid);
  60 }
  61 
  62 /* ARGSUSED */
  63 char *
  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
  74 ncall_stub_mirror(int nodeid)
  75 {
  76         return (-1);
  77 }
  78 
  79 /* ARGSUSED */
  80 int
  81 ncall_stub_self(void)
  82 {
  83         return (nodeinfo.nc_nodeid);
  84 }
  85 
  86 /* ARGSUSED */
  87 int
  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
  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
 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
 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
 120 ncall_stub_read_reply(ncall_t *ncall, int n, va_list ap)
 121 {
 122         return (ENOLINK);
 123 }
 124 
 125 /* ARGSUSED */
 126 void
 127 ncall_stub_reset(ncall_t *ncall)
 128 {
 129         ;
 130 }
 131 
 132 /* ARGSUSED */
 133 void
 134 ncall_stub_free(ncall_t *ncall)
 135 {
 136         ;
 137 }
 138 
 139 /* ARGSUSED */
 140 int
 141 ncall_stub_put_data(ncall_t *ncall, void *data, int len)
 142 {
 143         return (ENOLINK);
 144 }
 145 
 146 /* ARGSUSED */
 147 int
 148 ncall_stub_get_data(ncall_t *ncall, void *data, int len)
 149 {
 150         return (ENOLINK);
 151 }
 152 
 153 /* ARGSUSED */
 154 int
 155 ncall_stub_sender(ncall_t *ncall)
 156 {
 157         return (nodeinfo.nc_nodeid);
 158 }
 159 
 160 /* ARGSUSED */
 161 void
 162 ncall_stub_reply(ncall_t *ncall, va_list ap)
 163 {
 164         ;
 165 }
 166 
 167 /* ARGSUSED */
 168 void
 169 ncall_stub_pend(ncall_t *ncall)
 170 {
 171         ;
 172 }
 173 
 174 /* ARGSUSED */
 175 void
 176 ncall_stub_done(ncall_t *ncall)
 177 {
 178         ;
 179 }
 180 
 181 int
 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
 198 ncall_stub_maxnodes()
 199 {
 200         return (0);
 201 }
 202 
 203 
 204 /* ARGSUSED */
 205 int
 206 ncall_stub_nextnode(void **vptr)
 207 {
 208         return (0);
 209 }
 210 
 211 /* ARGSUSED */
 212 int
 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
 254 ncall_stub_stop(void)
 255 {
 256         bzero(&nodeinfo, sizeof (nodeinfo));
 257         return (ncall_unregister_module(&ncall_stubinfo));
 258 }
 259 
 260 
 261 void
 262 ncall_init_stub(void)
 263 {
 264         (void) ncall_register_module(&ncall_stubinfo, &nodeinfo);
 265 }