1/*	$NetBSD: test.c,v 1.2 1997/10/18 04:01:21 lukem Exp $	*/
2
3#include <sys/cdefs.h>
4#include <rpc/rpc.h>
5#include <rpcsvc/nlm_prot.h>
6#ifndef lint
7#if 0
8static char sccsid[] = "from: @(#)nlm_prot.x 1.8 87/09/21 Copyr 1987 Sun Micro";
9static char sccsid[] = "from: * @(#)nlm_prot.x	2.1 88/08/01 4.0 RPCSRC";
10#else
11__RCSID("$NetBSD: test.c,v 1.2 1997/10/18 04:01:21 lukem Exp $");
12static const char rcsid[] = "$FreeBSD$";
13#endif
14#endif				/* not lint */
15
16/* Default timeout can be changed using clnt_control() */
17static struct timeval TIMEOUT = { 0, 0 };
18
19nlm_testres *
20nlm_test_1(argp, clnt)
21	struct nlm_testargs *argp;
22	CLIENT *clnt;
23{
24	static nlm_testres res;
25
26	bzero((char *)&res, sizeof(res));
27	if (clnt_call(clnt, NLM_TEST, xdr_nlm_testargs, argp, xdr_nlm_testres, &res, TIMEOUT) != RPC_SUCCESS) {
28		return (NULL);
29	}
30	return (&res);
31}
32
33
34nlm_res *
35nlm_lock_1(argp, clnt)
36	struct nlm_lockargs *argp;
37	CLIENT *clnt;
38{
39	enum clnt_stat st;
40	static nlm_res res;
41
42	bzero((char *)&res, sizeof(res));
43	if (st = clnt_call(clnt, NLM_LOCK, xdr_nlm_lockargs, argp, xdr_nlm_res, &res, TIMEOUT) != RPC_SUCCESS) {
44		printf("clnt_call returns %d\n", st);
45		clnt_perror(clnt, "humbug");
46		return (NULL);
47	}
48	return (&res);
49}
50
51
52nlm_res *
53nlm_cancel_1(argp, clnt)
54	struct nlm_cancargs *argp;
55	CLIENT *clnt;
56{
57	static nlm_res res;
58
59	bzero((char *)&res, sizeof(res));
60	if (clnt_call(clnt, NLM_CANCEL, xdr_nlm_cancargs, argp, xdr_nlm_res, &res, TIMEOUT) != RPC_SUCCESS) {
61		return (NULL);
62	}
63	return (&res);
64}
65
66
67nlm_res *
68nlm_unlock_1(argp, clnt)
69	struct nlm_unlockargs *argp;
70	CLIENT *clnt;
71{
72	static nlm_res res;
73
74	bzero((char *)&res, sizeof(res));
75	if (clnt_call(clnt, NLM_UNLOCK, xdr_nlm_unlockargs, argp, xdr_nlm_res, &res, TIMEOUT) != RPC_SUCCESS) {
76		return (NULL);
77	}
78	return (&res);
79}
80
81
82nlm_res *
83nlm_granted_1(argp, clnt)
84	struct nlm_testargs *argp;
85	CLIENT *clnt;
86{
87	static nlm_res res;
88
89	bzero((char *)&res, sizeof(res));
90	if (clnt_call(clnt, NLM_GRANTED, xdr_nlm_testargs, argp, xdr_nlm_res, &res, TIMEOUT) != RPC_SUCCESS) {
91		return (NULL);
92	}
93	return (&res);
94}
95
96
97void *
98nlm_test_msg_1(argp, clnt)
99	struct nlm_testargs *argp;
100	CLIENT *clnt;
101{
102	static char res;
103
104	bzero((char *)&res, sizeof(res));
105	if (clnt_call(clnt, NLM_TEST_MSG, xdr_nlm_testargs, argp, xdr_void, &res, TIMEOUT) != RPC_SUCCESS) {
106		return (NULL);
107	}
108	return ((void *)&res);
109}
110
111
112void *
113nlm_lock_msg_1(argp, clnt)
114	struct nlm_lockargs *argp;
115	CLIENT *clnt;
116{
117	static char res;
118
119	bzero((char *)&res, sizeof(res));
120	if (clnt_call(clnt, NLM_LOCK_MSG, xdr_nlm_lockargs, argp, xdr_void, NULL, TIMEOUT) != RPC_SUCCESS) {
121		clnt_perror(clnt, "nlm_lock_msg_1");
122		return (NULL);
123	}
124	return ((void *)&res);
125}
126
127
128void *
129nlm_cancel_msg_1(argp, clnt)
130	struct nlm_cancargs *argp;
131	CLIENT *clnt;
132{
133	static char res;
134
135	bzero((char *)&res, sizeof(res));
136	if (clnt_call(clnt, NLM_CANCEL_MSG, xdr_nlm_cancargs, argp, xdr_void, &res, TIMEOUT) != RPC_SUCCESS) {
137		return (NULL);
138	}
139	return ((void *)&res);
140}
141
142
143void *
144nlm_unlock_msg_1(argp, clnt)
145	struct nlm_unlockargs *argp;
146	CLIENT *clnt;
147{
148	static char res;
149
150	bzero((char *)&res, sizeof(res));
151	if (clnt_call(clnt, NLM_UNLOCK_MSG, xdr_nlm_unlockargs, argp, xdr_void, &res, TIMEOUT) != RPC_SUCCESS) {
152		return (NULL);
153	}
154	return ((void *)&res);
155}
156
157
158void *
159nlm_granted_msg_1(argp, clnt)
160	struct nlm_testargs *argp;
161	CLIENT *clnt;
162{
163	static char res;
164
165	bzero((char *)&res, sizeof(res));
166	if (clnt_call(clnt, NLM_GRANTED_MSG, xdr_nlm_testargs, argp, xdr_void, &res, TIMEOUT) != RPC_SUCCESS) {
167		return (NULL);
168	}
169	return ((void *)&res);
170}
171
172
173void *
174nlm_test_res_1(argp, clnt)
175	nlm_testres *argp;
176	CLIENT *clnt;
177{
178	static char res;
179
180	bzero((char *)&res, sizeof(res));
181	if (clnt_call(clnt, NLM_TEST_RES, xdr_nlm_testres, argp, xdr_void, &res, TIMEOUT) != RPC_SUCCESS) {
182		return (NULL);
183	}
184	return ((void *)&res);
185}
186
187
188void *
189nlm_lock_res_1(argp, clnt)
190	nlm_res *argp;
191	CLIENT *clnt;
192{
193	static char res;
194
195	bzero((char *)&res, sizeof(res));
196	if (clnt_call(clnt, NLM_LOCK_RES, xdr_nlm_res, argp, xdr_void, &res, TIMEOUT) != RPC_SUCCESS) {
197		return (NULL);
198	}
199	return ((void *)&res);
200}
201
202
203void *
204nlm_cancel_res_1(argp, clnt)
205	nlm_res *argp;
206	CLIENT *clnt;
207{
208	static char res;
209
210	bzero((char *)&res, sizeof(res));
211	if (clnt_call(clnt, NLM_CANCEL_RES, xdr_nlm_res, argp, xdr_void, &res, TIMEOUT) != RPC_SUCCESS) {
212		return (NULL);
213	}
214	return ((void *)&res);
215}
216
217
218void *
219nlm_unlock_res_1(argp, clnt)
220	nlm_res *argp;
221	CLIENT *clnt;
222{
223	static char res;
224
225	bzero((char *)&res, sizeof(res));
226	if (clnt_call(clnt, NLM_UNLOCK_RES, xdr_nlm_res, argp, xdr_void, &res, TIMEOUT) != RPC_SUCCESS) {
227		return (NULL);
228	}
229	return ((void *)&res);
230}
231
232
233void *
234nlm_granted_res_1(argp, clnt)
235	nlm_res *argp;
236	CLIENT *clnt;
237{
238	static char res;
239
240	bzero((char *)&res, sizeof(res));
241	if (clnt_call(clnt, NLM_GRANTED_RES, xdr_nlm_res, argp, xdr_void, &res, TIMEOUT) != RPC_SUCCESS) {
242		return (NULL);
243	}
244	return ((void *)&res);
245}
246
247
248nlm_shareres *
249nlm_share_3(argp, clnt)
250	nlm_shareargs *argp;
251	CLIENT *clnt;
252{
253	static nlm_shareres res;
254
255	bzero((char *)&res, sizeof(res));
256	if (clnt_call(clnt, NLM_SHARE, xdr_nlm_shareargs, argp, xdr_nlm_shareres, &res, TIMEOUT) != RPC_SUCCESS) {
257		return (NULL);
258	}
259	return (&res);
260}
261
262
263nlm_shareres *
264nlm_unshare_3(argp, clnt)
265	nlm_shareargs *argp;
266	CLIENT *clnt;
267{
268	static nlm_shareres res;
269
270	bzero((char *)&res, sizeof(res));
271	if (clnt_call(clnt, NLM_UNSHARE, xdr_nlm_shareargs, argp, xdr_nlm_shareres, &res, TIMEOUT) != RPC_SUCCESS) {
272		return (NULL);
273	}
274	return (&res);
275}
276
277
278nlm_res *
279nlm_nm_lock_3(argp, clnt)
280	nlm_lockargs *argp;
281	CLIENT *clnt;
282{
283	static nlm_res res;
284
285	bzero((char *)&res, sizeof(res));
286	if (clnt_call(clnt, NLM_NM_LOCK, xdr_nlm_lockargs, argp, xdr_nlm_res, &res, TIMEOUT) != RPC_SUCCESS) {
287		return (NULL);
288	}
289	return (&res);
290}
291
292
293void *
294nlm_free_all_3(argp, clnt)
295	nlm_notify *argp;
296	CLIENT *clnt;
297{
298	static char res;
299
300	bzero((char *)&res, sizeof(res));
301	if (clnt_call(clnt, NLM_FREE_ALL, xdr_nlm_notify, argp, xdr_void, &res, TIMEOUT) != RPC_SUCCESS) {
302		return (NULL);
303	}
304	return ((void *)&res);
305}
306
307
308int main(int argc, char **argv)
309{
310	CLIENT *cli;
311	nlm_res res_block;
312	nlm_res *out;
313	nlm_lockargs arg;
314	struct timeval tim;
315
316	printf("Creating client for host %s\n", argv[1]);
317	cli = clnt_create(argv[1], NLM_PROG, NLM_VERS, "udp");
318	if (!cli) {
319		errx(1, "Failed to create client\n");
320		/* NOTREACHED */
321	}
322	clnt_control(cli, CLGET_TIMEOUT, &tim);
323	printf("Default timeout was %d.%d\n", tim.tv_sec, tim.tv_usec);
324	tim.tv_usec = -1;
325	tim.tv_sec = -1;
326	clnt_control(cli, CLSET_TIMEOUT, &tim);
327	clnt_control(cli, CLGET_TIMEOUT, &tim);
328	printf("timeout now %d.%d\n", tim.tv_sec, tim.tv_usec);
329
330
331	arg.cookie.n_len = 4;
332	arg.cookie.n_bytes = "hello";
333	arg.block = 0;
334	arg.exclusive = 0;
335	arg.reclaim = 0;
336	arg.state = 0x1234;
337	arg.alock.caller_name = "localhost";
338	arg.alock.fh.n_len = 32;
339	arg.alock.fh.n_bytes = "\x04\x04\x02\x00\x01\x00\x00\x00\x0c\x00\x00\x00\xff\xff\xff\xd0\x16\x00\x00\x5b\x7c\xff\xff\xff\xec\x2f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x54\xef\xbf\xd7\x94";
340	arg.alock.oh.n_len = 8;
341	arg.alock.oh.n_bytes = "\x00\x00\x02\xff\xff\xff\xd3";
342	arg.alock.svid = 0x5678;
343	arg.alock.l_offset = 0;
344	arg.alock.l_len = 100;
345
346	res_block.stat.stat = nlm_granted;
347	res_block.cookie.n_bytes = "hello";
348	res_block.cookie.n_len = 5;
349
350#if 0
351	if (nlm_lock_res_1(&res_block, cli))
352		printf("Success!\n");
353	else
354		printf("Fail\n");
355#else
356	if (out = nlm_lock_msg_1(&arg, cli)) {
357		printf("Success!\n");
358		printf("out->stat = %d", out->stat);
359	} else {
360		printf("Fail\n");
361	}
362#endif
363
364	return 0;
365}
366