1177633Sdfr/*- 2177633Sdfr * Copyright (c) 2008 Isilon Inc http://www.isilon.com/ 3177633Sdfr * Authors: Doug Rabson <dfr@rabson.org> 4177633Sdfr * Developed with Red Inc: Alfred Perlstein <alfred@freebsd.org> 5177633Sdfr * 6177633Sdfr * Redistribution and use in source and binary forms, with or without 7177633Sdfr * modification, are permitted provided that the following conditions 8177633Sdfr * are met: 9177633Sdfr * 1. Redistributions of source code must retain the above copyright 10177633Sdfr * notice, this list of conditions and the following disclaimer. 11177633Sdfr * 2. Redistributions in binary form must reproduce the above copyright 12177633Sdfr * notice, this list of conditions and the following disclaimer in the 13177633Sdfr * documentation and/or other materials provided with the distribution. 14177633Sdfr * 15177633Sdfr * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16177633Sdfr * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17177633Sdfr * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18177633Sdfr * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19177633Sdfr * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20177633Sdfr * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21177633Sdfr * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22177633Sdfr * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23177633Sdfr * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24177633Sdfr * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25177633Sdfr * SUCH DAMAGE. 26177633Sdfr */ 27177633Sdfr 28177633Sdfr#include <sys/param.h> 29177633Sdfr#include <sys/systm.h> 30177633Sdfr 31177685Sdfr#include <nlm/nlm_prot.h> 32177685Sdfr#include <nlm/nlm.h> 33177633Sdfr 34177633Sdfr#include <sys/cdefs.h> 35177633Sdfr#ifndef lint 36177633Sdfr/*static char sccsid[] = "from: @(#)nlm_prot.x 1.8 87/09/21 Copyr 1987 Sun Micro";*/ 37177633Sdfr/*static char sccsid[] = "from: * @(#)nlm_prot.x 2.1 88/08/01 4.0 RPCSRC";*/ 38177633Sdfr__RCSID("$NetBSD: nlm_prot.x,v 1.6 2000/06/07 14:30:15 bouyer Exp $"); 39177633Sdfr#endif /* not lint */ 40177633Sdfr__FBSDID("$FreeBSD$"); 41177633Sdfr 42177633Sdfrvoid nlm_prog_0(struct svc_req *rqstp, SVCXPRT *transp); 43177633Sdfrvoid nlm_prog_1(struct svc_req *rqstp, SVCXPRT *transp); 44177633Sdfrvoid nlm_prog_3(struct svc_req *rqstp, SVCXPRT *transp); 45177633Sdfrvoid nlm_prog_4(struct svc_req *rqstp, SVCXPRT *transp); 46177633Sdfr 47177633Sdfrvoid 48177633Sdfrnlm_prog_0(struct svc_req *rqstp, SVCXPRT *transp) 49177633Sdfr{ 50177633Sdfr union { 51177633Sdfr struct nlm_sm_status nlm_sm_notify_0_arg; 52177633Sdfr } argument; 53177633Sdfr char result; 54177633Sdfr bool_t retval; 55177633Sdfr xdrproc_t xdr_argument, xdr_result; 56177633Sdfr bool_t (*local)(char *, void *, struct svc_req *); 57177633Sdfr 58177633Sdfr switch (rqstp->rq_proc) { 59177633Sdfr case NULLPROC: 60184588Sdfr (void) svc_sendreply(rqstp, 61177633Sdfr (xdrproc_t) xdr_void, (char *)NULL); 62184588Sdfr svc_freereq(rqstp); 63177633Sdfr return; 64177633Sdfr 65177633Sdfr case NLM_SM_NOTIFY: 66177633Sdfr xdr_argument = (xdrproc_t) xdr_nlm_sm_status; 67177633Sdfr xdr_result = (xdrproc_t) xdr_void; 68177633Sdfr local = (bool_t (*) (char *, void *, struct svc_req *))nlm_sm_notify_0_svc; 69177633Sdfr break; 70177633Sdfr 71177633Sdfr default: 72184588Sdfr svcerr_noproc(rqstp); 73184588Sdfr svc_freereq(rqstp); 74177633Sdfr return; 75177633Sdfr } 76177633Sdfr (void) memset((char *)&argument, 0, sizeof (argument)); 77184588Sdfr if (!svc_getargs(rqstp, xdr_argument, (char *)(caddr_t) &argument)) { 78184588Sdfr svcerr_decode(rqstp); 79184588Sdfr svc_freereq(rqstp); 80177633Sdfr return; 81177633Sdfr } 82177633Sdfr retval = (bool_t) (*local)((char *)&argument, (void *)&result, rqstp); 83184588Sdfr if (retval > 0 && !svc_sendreply(rqstp, xdr_result, (char *)&result)) { 84184588Sdfr svcerr_systemerr(rqstp); 85177633Sdfr } 86184588Sdfr if (!svc_freeargs(rqstp, xdr_argument, (char *)(caddr_t) &argument)) { 87177633Sdfr printf("unable to free arguments"); 88177633Sdfr //exit(1); 89177633Sdfr } 90184886Sdfr svc_freereq(rqstp); 91177633Sdfr 92177633Sdfr return; 93177633Sdfr} 94177633Sdfr 95177633Sdfrvoid 96177633Sdfrnlm_prog_1(struct svc_req *rqstp, SVCXPRT *transp) 97177633Sdfr{ 98177633Sdfr union { 99177633Sdfr struct nlm_testargs nlm_test_1_arg; 100177633Sdfr struct nlm_lockargs nlm_lock_1_arg; 101177633Sdfr struct nlm_cancargs nlm_cancel_1_arg; 102177633Sdfr struct nlm_unlockargs nlm_unlock_1_arg; 103177633Sdfr struct nlm_testargs nlm_granted_1_arg; 104177633Sdfr struct nlm_testargs nlm_test_msg_1_arg; 105177633Sdfr struct nlm_lockargs nlm_lock_msg_1_arg; 106177633Sdfr struct nlm_cancargs nlm_cancel_msg_1_arg; 107177633Sdfr struct nlm_unlockargs nlm_unlock_msg_1_arg; 108177633Sdfr struct nlm_testargs nlm_granted_msg_1_arg; 109177633Sdfr nlm_testres nlm_test_res_1_arg; 110177633Sdfr nlm_res nlm_lock_res_1_arg; 111177633Sdfr nlm_res nlm_cancel_res_1_arg; 112177633Sdfr nlm_res nlm_unlock_res_1_arg; 113177633Sdfr nlm_res nlm_granted_res_1_arg; 114177633Sdfr } argument; 115177633Sdfr union { 116177633Sdfr nlm_testres nlm_test_1_res; 117177633Sdfr nlm_res nlm_lock_1_res; 118177633Sdfr nlm_res nlm_cancel_1_res; 119177633Sdfr nlm_res nlm_unlock_1_res; 120177633Sdfr nlm_res nlm_granted_1_res; 121177633Sdfr } result; 122177633Sdfr bool_t retval; 123177633Sdfr xdrproc_t xdr_argument, xdr_result; 124177633Sdfr bool_t (*local)(char *, void *, struct svc_req *); 125177633Sdfr 126177633Sdfr switch (rqstp->rq_proc) { 127177633Sdfr case NULLPROC: 128184588Sdfr (void) svc_sendreply(rqstp, 129177633Sdfr (xdrproc_t) xdr_void, (char *)NULL); 130184588Sdfr svc_freereq(rqstp); 131177633Sdfr return; 132177633Sdfr 133177633Sdfr case NLM_TEST: 134177633Sdfr xdr_argument = (xdrproc_t) xdr_nlm_testargs; 135177633Sdfr xdr_result = (xdrproc_t) xdr_nlm_testres; 136177633Sdfr local = (bool_t (*) (char *, void *, struct svc_req *))nlm_test_1_svc; 137177633Sdfr break; 138177633Sdfr 139177633Sdfr case NLM_LOCK: 140177633Sdfr xdr_argument = (xdrproc_t) xdr_nlm_lockargs; 141177633Sdfr xdr_result = (xdrproc_t) xdr_nlm_res; 142177633Sdfr local = (bool_t (*) (char *, void *, struct svc_req *))nlm_lock_1_svc; 143177633Sdfr break; 144177633Sdfr 145177633Sdfr case NLM_CANCEL: 146177633Sdfr xdr_argument = (xdrproc_t) xdr_nlm_cancargs; 147177633Sdfr xdr_result = (xdrproc_t) xdr_nlm_res; 148177633Sdfr local = (bool_t (*) (char *, void *, struct svc_req *))nlm_cancel_1_svc; 149177633Sdfr break; 150177633Sdfr 151177633Sdfr case NLM_UNLOCK: 152177633Sdfr xdr_argument = (xdrproc_t) xdr_nlm_unlockargs; 153177633Sdfr xdr_result = (xdrproc_t) xdr_nlm_res; 154177633Sdfr local = (bool_t (*) (char *, void *, struct svc_req *))nlm_unlock_1_svc; 155177633Sdfr break; 156177633Sdfr 157177633Sdfr case NLM_GRANTED: 158177633Sdfr xdr_argument = (xdrproc_t) xdr_nlm_testargs; 159177633Sdfr xdr_result = (xdrproc_t) xdr_nlm_res; 160177633Sdfr local = (bool_t (*) (char *, void *, struct svc_req *))nlm_granted_1_svc; 161177633Sdfr break; 162177633Sdfr 163177633Sdfr case NLM_TEST_MSG: 164177633Sdfr xdr_argument = (xdrproc_t) xdr_nlm_testargs; 165177633Sdfr xdr_result = (xdrproc_t) xdr_void; 166177633Sdfr local = (bool_t (*) (char *, void *, struct svc_req *))nlm_test_msg_1_svc; 167177633Sdfr break; 168177633Sdfr 169177633Sdfr case NLM_LOCK_MSG: 170177633Sdfr xdr_argument = (xdrproc_t) xdr_nlm_lockargs; 171177633Sdfr xdr_result = (xdrproc_t) xdr_void; 172177633Sdfr local = (bool_t (*) (char *, void *, struct svc_req *))nlm_lock_msg_1_svc; 173177633Sdfr break; 174177633Sdfr 175177633Sdfr case NLM_CANCEL_MSG: 176177633Sdfr xdr_argument = (xdrproc_t) xdr_nlm_cancargs; 177177633Sdfr xdr_result = (xdrproc_t) xdr_void; 178177633Sdfr local = (bool_t (*) (char *, void *, struct svc_req *))nlm_cancel_msg_1_svc; 179177633Sdfr break; 180177633Sdfr 181177633Sdfr case NLM_UNLOCK_MSG: 182177633Sdfr xdr_argument = (xdrproc_t) xdr_nlm_unlockargs; 183177633Sdfr xdr_result = (xdrproc_t) xdr_void; 184177633Sdfr local = (bool_t (*) (char *, void *, struct svc_req *))nlm_unlock_msg_1_svc; 185177633Sdfr break; 186177633Sdfr 187177633Sdfr case NLM_GRANTED_MSG: 188177633Sdfr xdr_argument = (xdrproc_t) xdr_nlm_testargs; 189177633Sdfr xdr_result = (xdrproc_t) xdr_void; 190177633Sdfr local = (bool_t (*) (char *, void *, struct svc_req *))nlm_granted_msg_1_svc; 191177633Sdfr break; 192177633Sdfr 193177633Sdfr case NLM_TEST_RES: 194177633Sdfr xdr_argument = (xdrproc_t) xdr_nlm_testres; 195177633Sdfr xdr_result = (xdrproc_t) xdr_void; 196177633Sdfr local = (bool_t (*) (char *, void *, struct svc_req *))nlm_test_res_1_svc; 197177633Sdfr break; 198177633Sdfr 199177633Sdfr case NLM_LOCK_RES: 200177633Sdfr xdr_argument = (xdrproc_t) xdr_nlm_res; 201177633Sdfr xdr_result = (xdrproc_t) xdr_void; 202177633Sdfr local = (bool_t (*) (char *, void *, struct svc_req *))nlm_lock_res_1_svc; 203177633Sdfr break; 204177633Sdfr 205177633Sdfr case NLM_CANCEL_RES: 206177633Sdfr xdr_argument = (xdrproc_t) xdr_nlm_res; 207177633Sdfr xdr_result = (xdrproc_t) xdr_void; 208177633Sdfr local = (bool_t (*) (char *, void *, struct svc_req *))nlm_cancel_res_1_svc; 209177633Sdfr break; 210177633Sdfr 211177633Sdfr case NLM_UNLOCK_RES: 212177633Sdfr xdr_argument = (xdrproc_t) xdr_nlm_res; 213177633Sdfr xdr_result = (xdrproc_t) xdr_void; 214177633Sdfr local = (bool_t (*) (char *, void *, struct svc_req *))nlm_unlock_res_1_svc; 215177633Sdfr break; 216177633Sdfr 217177633Sdfr case NLM_GRANTED_RES: 218177633Sdfr xdr_argument = (xdrproc_t) xdr_nlm_res; 219177633Sdfr xdr_result = (xdrproc_t) xdr_void; 220177633Sdfr local = (bool_t (*) (char *, void *, struct svc_req *))nlm_granted_res_1_svc; 221177633Sdfr break; 222177633Sdfr 223177633Sdfr default: 224184588Sdfr svcerr_noproc(rqstp); 225184588Sdfr svc_freereq(rqstp); 226177633Sdfr return; 227177633Sdfr } 228177633Sdfr (void) memset((char *)&argument, 0, sizeof (argument)); 229184588Sdfr if (!svc_getargs(rqstp, xdr_argument, (char *)(caddr_t) &argument)) { 230184588Sdfr svcerr_decode(rqstp); 231184588Sdfr svc_freereq(rqstp); 232177633Sdfr return; 233177633Sdfr } 234177633Sdfr retval = (bool_t) (*local)((char *)&argument, (void *)&result, rqstp); 235184588Sdfr if (retval > 0 && !svc_sendreply(rqstp, xdr_result, (char *)&result)) { 236184588Sdfr svcerr_systemerr(rqstp); 237177633Sdfr } 238184588Sdfr if (!svc_freeargs(rqstp, xdr_argument, (char *)(caddr_t) &argument)) { 239177633Sdfr printf("unable to free arguments"); 240177633Sdfr //exit(1); 241177633Sdfr } 242184588Sdfr svc_freereq(rqstp); 243177633Sdfr if (!nlm_prog_1_freeresult(transp, xdr_result, (caddr_t) &result)) 244177633Sdfr printf("unable to free results"); 245177633Sdfr 246177633Sdfr return; 247177633Sdfr} 248177633Sdfr 249177633Sdfrvoid 250177633Sdfrnlm_prog_3(struct svc_req *rqstp, SVCXPRT *transp) 251177633Sdfr{ 252177633Sdfr union { 253177633Sdfr nlm_shareargs nlm_share_3_arg; 254177633Sdfr nlm_shareargs nlm_unshare_3_arg; 255177633Sdfr nlm_lockargs nlm_nm_lock_3_arg; 256177633Sdfr nlm_notify nlm_free_all_3_arg; 257177633Sdfr } argument; 258177633Sdfr union { 259177633Sdfr nlm_shareres nlm_share_3_res; 260177633Sdfr nlm_shareres nlm_unshare_3_res; 261177633Sdfr nlm_res nlm_nm_lock_3_res; 262177633Sdfr } result; 263177633Sdfr bool_t retval; 264177633Sdfr xdrproc_t xdr_argument, xdr_result; 265177633Sdfr bool_t (*local)(char *, void *, struct svc_req *); 266177633Sdfr 267177633Sdfr switch (rqstp->rq_proc) { 268177633Sdfr case NULLPROC: 269184588Sdfr (void) svc_sendreply(rqstp, 270177633Sdfr (xdrproc_t) xdr_void, (char *)NULL); 271184588Sdfr svc_freereq(rqstp); 272177633Sdfr return; 273177633Sdfr 274177633Sdfr case NLM_TEST: 275177633Sdfr case NLM_LOCK: 276177633Sdfr case NLM_CANCEL: 277177633Sdfr case NLM_UNLOCK: 278177633Sdfr case NLM_GRANTED: 279177633Sdfr case NLM_TEST_MSG: 280177633Sdfr case NLM_LOCK_MSG: 281177633Sdfr case NLM_CANCEL_MSG: 282177633Sdfr case NLM_UNLOCK_MSG: 283177633Sdfr case NLM_GRANTED_MSG: 284177633Sdfr case NLM_TEST_RES: 285177633Sdfr case NLM_LOCK_RES: 286177633Sdfr case NLM_CANCEL_RES: 287177633Sdfr case NLM_UNLOCK_RES: 288177633Sdfr case NLM_GRANTED_RES: 289177633Sdfr nlm_prog_1(rqstp, transp); 290177633Sdfr return; 291177633Sdfr 292177633Sdfr case NLM_SHARE: 293177633Sdfr xdr_argument = (xdrproc_t) xdr_nlm_shareargs; 294177633Sdfr xdr_result = (xdrproc_t) xdr_nlm_shareres; 295177633Sdfr local = (bool_t (*) (char *, void *, struct svc_req *))nlm_share_3_svc; 296177633Sdfr break; 297177633Sdfr 298177633Sdfr case NLM_UNSHARE: 299177633Sdfr xdr_argument = (xdrproc_t) xdr_nlm_shareargs; 300177633Sdfr xdr_result = (xdrproc_t) xdr_nlm_shareres; 301177633Sdfr local = (bool_t (*) (char *, void *, struct svc_req *))nlm_unshare_3_svc; 302177633Sdfr break; 303177633Sdfr 304177633Sdfr case NLM_NM_LOCK: 305177633Sdfr xdr_argument = (xdrproc_t) xdr_nlm_lockargs; 306177633Sdfr xdr_result = (xdrproc_t) xdr_nlm_res; 307177633Sdfr local = (bool_t (*) (char *, void *, struct svc_req *))nlm_nm_lock_3_svc; 308177633Sdfr break; 309177633Sdfr 310177633Sdfr case NLM_FREE_ALL: 311177633Sdfr xdr_argument = (xdrproc_t) xdr_nlm_notify; 312177633Sdfr xdr_result = (xdrproc_t) xdr_void; 313177633Sdfr local = (bool_t (*) (char *, void *, struct svc_req *))nlm_free_all_3_svc; 314177633Sdfr break; 315177633Sdfr 316177633Sdfr default: 317184588Sdfr svcerr_noproc(rqstp); 318184588Sdfr svc_freereq(rqstp); 319177633Sdfr return; 320177633Sdfr } 321177633Sdfr (void) memset((char *)&argument, 0, sizeof (argument)); 322184588Sdfr if (!svc_getargs(rqstp, xdr_argument, (char *)(caddr_t) &argument)) { 323184588Sdfr svcerr_decode(rqstp); 324184588Sdfr svc_freereq(rqstp); 325177633Sdfr return; 326177633Sdfr } 327177633Sdfr retval = (bool_t) (*local)((char *)&argument, (void *)&result, rqstp); 328184588Sdfr if (retval > 0 && !svc_sendreply(rqstp, xdr_result, (char *)&result)) { 329184588Sdfr svcerr_systemerr(rqstp); 330177633Sdfr } 331184588Sdfr if (!svc_freeargs(rqstp, xdr_argument, (char *)(caddr_t) &argument)) { 332177633Sdfr printf("unable to free arguments"); 333177633Sdfr //exit(1); 334177633Sdfr } 335184588Sdfr svc_freereq(rqstp); 336177633Sdfr if (!nlm_prog_3_freeresult(transp, xdr_result, (caddr_t) &result)) 337177633Sdfr printf("unable to free results"); 338177633Sdfr 339177633Sdfr return; 340177633Sdfr} 341177633Sdfr 342177633Sdfrvoid 343177633Sdfrnlm_prog_4(struct svc_req *rqstp, SVCXPRT *transp) 344177633Sdfr{ 345177633Sdfr union { 346177633Sdfr nlm4_testargs nlm4_test_4_arg; 347177633Sdfr nlm4_lockargs nlm4_lock_4_arg; 348177633Sdfr nlm4_cancargs nlm4_cancel_4_arg; 349177633Sdfr nlm4_unlockargs nlm4_unlock_4_arg; 350177633Sdfr nlm4_testargs nlm4_granted_4_arg; 351177633Sdfr nlm4_testargs nlm4_test_msg_4_arg; 352177633Sdfr nlm4_lockargs nlm4_lock_msg_4_arg; 353177633Sdfr nlm4_cancargs nlm4_cancel_msg_4_arg; 354177633Sdfr nlm4_unlockargs nlm4_unlock_msg_4_arg; 355177633Sdfr nlm4_testargs nlm4_granted_msg_4_arg; 356177633Sdfr nlm4_testres nlm4_test_res_4_arg; 357177633Sdfr nlm4_res nlm4_lock_res_4_arg; 358177633Sdfr nlm4_res nlm4_cancel_res_4_arg; 359177633Sdfr nlm4_res nlm4_unlock_res_4_arg; 360177633Sdfr nlm4_res nlm4_granted_res_4_arg; 361177633Sdfr nlm4_shareargs nlm4_share_4_arg; 362177633Sdfr nlm4_shareargs nlm4_unshare_4_arg; 363177633Sdfr nlm4_lockargs nlm4_nm_lock_4_arg; 364177633Sdfr nlm4_notify nlm4_free_all_4_arg; 365177633Sdfr } argument; 366177633Sdfr union { 367177633Sdfr nlm4_testres nlm4_test_4_res; 368177633Sdfr nlm4_res nlm4_lock_4_res; 369177633Sdfr nlm4_res nlm4_cancel_4_res; 370177633Sdfr nlm4_res nlm4_unlock_4_res; 371177633Sdfr nlm4_res nlm4_granted_4_res; 372177633Sdfr nlm4_shareres nlm4_share_4_res; 373177633Sdfr nlm4_shareres nlm4_unshare_4_res; 374177633Sdfr nlm4_res nlm4_nm_lock_4_res; 375177633Sdfr } result; 376177633Sdfr bool_t retval; 377177633Sdfr xdrproc_t xdr_argument, xdr_result; 378177633Sdfr bool_t (*local)(char *, void *, struct svc_req *); 379177633Sdfr 380177633Sdfr switch (rqstp->rq_proc) { 381177633Sdfr case NULLPROC: 382184588Sdfr (void) svc_sendreply(rqstp, 383177633Sdfr (xdrproc_t) xdr_void, (char *)NULL); 384184588Sdfr svc_freereq(rqstp); 385177633Sdfr return; 386177633Sdfr 387177633Sdfr case NLM4_TEST: 388177633Sdfr xdr_argument = (xdrproc_t) xdr_nlm4_testargs; 389177633Sdfr xdr_result = (xdrproc_t) xdr_nlm4_testres; 390177633Sdfr local = (bool_t (*) (char *, void *, struct svc_req *))nlm4_test_4_svc; 391177633Sdfr break; 392177633Sdfr 393177633Sdfr case NLM4_LOCK: 394177633Sdfr xdr_argument = (xdrproc_t) xdr_nlm4_lockargs; 395177633Sdfr xdr_result = (xdrproc_t) xdr_nlm4_res; 396177633Sdfr local = (bool_t (*) (char *, void *, struct svc_req *))nlm4_lock_4_svc; 397177633Sdfr break; 398177633Sdfr 399177633Sdfr case NLM4_CANCEL: 400177633Sdfr xdr_argument = (xdrproc_t) xdr_nlm4_cancargs; 401177633Sdfr xdr_result = (xdrproc_t) xdr_nlm4_res; 402177633Sdfr local = (bool_t (*) (char *, void *, struct svc_req *))nlm4_cancel_4_svc; 403177633Sdfr break; 404177633Sdfr 405177633Sdfr case NLM4_UNLOCK: 406177633Sdfr xdr_argument = (xdrproc_t) xdr_nlm4_unlockargs; 407177633Sdfr xdr_result = (xdrproc_t) xdr_nlm4_res; 408177633Sdfr local = (bool_t (*) (char *, void *, struct svc_req *))nlm4_unlock_4_svc; 409177633Sdfr break; 410177633Sdfr 411177633Sdfr case NLM4_GRANTED: 412177633Sdfr xdr_argument = (xdrproc_t) xdr_nlm4_testargs; 413177633Sdfr xdr_result = (xdrproc_t) xdr_nlm4_res; 414177633Sdfr local = (bool_t (*) (char *, void *, struct svc_req *))nlm4_granted_4_svc; 415177633Sdfr break; 416177633Sdfr 417177633Sdfr case NLM4_TEST_MSG: 418177633Sdfr xdr_argument = (xdrproc_t) xdr_nlm4_testargs; 419177633Sdfr xdr_result = (xdrproc_t) xdr_void; 420177633Sdfr local = (bool_t (*) (char *, void *, struct svc_req *))nlm4_test_msg_4_svc; 421177633Sdfr break; 422177633Sdfr 423177633Sdfr case NLM4_LOCK_MSG: 424177633Sdfr xdr_argument = (xdrproc_t) xdr_nlm4_lockargs; 425177633Sdfr xdr_result = (xdrproc_t) xdr_void; 426177633Sdfr local = (bool_t (*) (char *, void *, struct svc_req *))nlm4_lock_msg_4_svc; 427177633Sdfr break; 428177633Sdfr 429177633Sdfr case NLM4_CANCEL_MSG: 430177633Sdfr xdr_argument = (xdrproc_t) xdr_nlm4_cancargs; 431177633Sdfr xdr_result = (xdrproc_t) xdr_void; 432177633Sdfr local = (bool_t (*) (char *, void *, struct svc_req *))nlm4_cancel_msg_4_svc; 433177633Sdfr break; 434177633Sdfr 435177633Sdfr case NLM4_UNLOCK_MSG: 436177633Sdfr xdr_argument = (xdrproc_t) xdr_nlm4_unlockargs; 437177633Sdfr xdr_result = (xdrproc_t) xdr_void; 438177633Sdfr local = (bool_t (*) (char *, void *, struct svc_req *))nlm4_unlock_msg_4_svc; 439177633Sdfr break; 440177633Sdfr 441177633Sdfr case NLM4_GRANTED_MSG: 442177633Sdfr xdr_argument = (xdrproc_t) xdr_nlm4_testargs; 443177633Sdfr xdr_result = (xdrproc_t) xdr_void; 444177633Sdfr local = (bool_t (*) (char *, void *, struct svc_req *))nlm4_granted_msg_4_svc; 445177633Sdfr break; 446177633Sdfr 447177633Sdfr case NLM4_TEST_RES: 448177633Sdfr xdr_argument = (xdrproc_t) xdr_nlm4_testres; 449177633Sdfr xdr_result = (xdrproc_t) xdr_void; 450177633Sdfr local = (bool_t (*) (char *, void *, struct svc_req *))nlm4_test_res_4_svc; 451177633Sdfr break; 452177633Sdfr 453177633Sdfr case NLM4_LOCK_RES: 454177633Sdfr xdr_argument = (xdrproc_t) xdr_nlm4_res; 455177633Sdfr xdr_result = (xdrproc_t) xdr_void; 456177633Sdfr local = (bool_t (*) (char *, void *, struct svc_req *))nlm4_lock_res_4_svc; 457177633Sdfr break; 458177633Sdfr 459177633Sdfr case NLM4_CANCEL_RES: 460177633Sdfr xdr_argument = (xdrproc_t) xdr_nlm4_res; 461177633Sdfr xdr_result = (xdrproc_t) xdr_void; 462177633Sdfr local = (bool_t (*) (char *, void *, struct svc_req *))nlm4_cancel_res_4_svc; 463177633Sdfr break; 464177633Sdfr 465177633Sdfr case NLM4_UNLOCK_RES: 466177633Sdfr xdr_argument = (xdrproc_t) xdr_nlm4_res; 467177633Sdfr xdr_result = (xdrproc_t) xdr_void; 468177633Sdfr local = (bool_t (*) (char *, void *, struct svc_req *))nlm4_unlock_res_4_svc; 469177633Sdfr break; 470177633Sdfr 471177633Sdfr case NLM4_GRANTED_RES: 472177633Sdfr xdr_argument = (xdrproc_t) xdr_nlm4_res; 473177633Sdfr xdr_result = (xdrproc_t) xdr_void; 474177633Sdfr local = (bool_t (*) (char *, void *, struct svc_req *))nlm4_granted_res_4_svc; 475177633Sdfr break; 476177633Sdfr 477177633Sdfr case NLM4_SHARE: 478177633Sdfr xdr_argument = (xdrproc_t) xdr_nlm4_shareargs; 479177633Sdfr xdr_result = (xdrproc_t) xdr_nlm4_shareres; 480177633Sdfr local = (bool_t (*) (char *, void *, struct svc_req *))nlm4_share_4_svc; 481177633Sdfr break; 482177633Sdfr 483177633Sdfr case NLM4_UNSHARE: 484177633Sdfr xdr_argument = (xdrproc_t) xdr_nlm4_shareargs; 485177633Sdfr xdr_result = (xdrproc_t) xdr_nlm4_shareres; 486177633Sdfr local = (bool_t (*) (char *, void *, struct svc_req *))nlm4_unshare_4_svc; 487177633Sdfr break; 488177633Sdfr 489177633Sdfr case NLM4_NM_LOCK: 490177633Sdfr xdr_argument = (xdrproc_t) xdr_nlm4_lockargs; 491177633Sdfr xdr_result = (xdrproc_t) xdr_nlm4_res; 492177633Sdfr local = (bool_t (*) (char *, void *, struct svc_req *))nlm4_nm_lock_4_svc; 493177633Sdfr break; 494177633Sdfr 495177633Sdfr case NLM4_FREE_ALL: 496177633Sdfr xdr_argument = (xdrproc_t) xdr_nlm4_notify; 497177633Sdfr xdr_result = (xdrproc_t) xdr_void; 498177633Sdfr local = (bool_t (*) (char *, void *, struct svc_req *))nlm4_free_all_4_svc; 499177633Sdfr break; 500177633Sdfr 501177633Sdfr default: 502184588Sdfr svcerr_noproc(rqstp); 503184588Sdfr svc_freereq(rqstp); 504177633Sdfr return; 505177633Sdfr } 506177633Sdfr (void) memset((char *)&argument, 0, sizeof (argument)); 507184588Sdfr if (!svc_getargs(rqstp, xdr_argument, (char *)(caddr_t) &argument)) { 508184588Sdfr svcerr_decode(rqstp); 509184588Sdfr svc_freereq(rqstp); 510177633Sdfr return; 511177633Sdfr } 512177633Sdfr retval = (bool_t) (*local)((char *)&argument, (void *)&result, rqstp); 513184588Sdfr if (retval > 0 && !svc_sendreply(rqstp, xdr_result, (char *)&result)) { 514184588Sdfr svcerr_systemerr(rqstp); 515177633Sdfr } 516184588Sdfr if (!svc_freeargs(rqstp, xdr_argument, (char *)(caddr_t) &argument)) { 517177633Sdfr printf("unable to free arguments"); 518177633Sdfr //exit(1); 519177633Sdfr } 520184588Sdfr svc_freereq(rqstp); 521177633Sdfr if (!nlm_prog_4_freeresult(transp, xdr_result, (caddr_t) &result)) 522177633Sdfr printf("unable to free results"); 523177633Sdfr 524177633Sdfr return; 525177633Sdfr} 526