xref: /illumos-gate/usr/src/uts/common/fs/nfs/bootparam_xdr.c (revision 581cede61ac9c14d8d4ea452562a567189eead78)
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, Version 1.0 only
6  * (the "License").  You may not use this file except in compliance
7  * with the License.
8  *
9  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10  * or http://www.opensolaris.org/os/licensing.
11  * See the License for the specific language governing permissions
12  * and limitations under the License.
13  *
14  * When distributing Covered Code, include this CDDL HEADER in each
15  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16  * If applicable, add the following below this CDDL HEADER, with the
17  * fields enclosed by brackets "[]" replaced with your own identifying
18  * information: Portions Copyright [yyyy] [name of copyright owner]
19  *
20  * CDDL HEADER END
21  */
22 /*
23  * Copyright (c) 1986,1997 by Sun Microsystems, Inc.
24  * All rights reserved.
25  */
26 
27 #pragma ident	"%Z%%M%	%I%	%E% SMI"
28 
29 #include <rpc/rpc.h>
30 #include <rpc/bootparam.h>
31 
32 bool_t
33 xdr_bp_machine_name_t(XDR *xdrs, bp_machine_name_t *objp)
34 {
35 	return (xdr_string(xdrs, objp, MAX_MACHINE_NAME));
36 }
37 
38 bool_t
39 xdr_bp_path_t(XDR *xdrs, bp_path_t *objp)
40 {
41 	return (xdr_string(xdrs, objp, MAX_PATH_LEN));
42 }
43 
44 bool_t
45 xdr_bp_fileid_t(XDR *xdrs, bp_fileid_t *objp)
46 {
47 	return (xdr_string(xdrs, objp, MAX_FILEID));
48 }
49 
50 bool_t
51 xdr_ip_addr_t(XDR *xdrs, ip_addr_t *objp)
52 {
53 	if (!xdr_char(xdrs, &objp->net))
54 		return (FALSE);
55 	if (!xdr_char(xdrs, &objp->host))
56 		return (FALSE);
57 	if (!xdr_char(xdrs, &objp->lh))
58 		return (FALSE);
59 	if (!xdr_char(xdrs, &objp->impno))
60 		return (FALSE);
61 	return (TRUE);
62 }
63 
64 static struct xdr_discrim choices[] = {
65 	{ IP_ADDR_TYPE, xdr_ip_addr_t },
66 	{ __dontcare__, NULL }
67 };
68 
69 bool_t
70 xdr_bp_address(XDR *xdrs, bp_address *objp)
71 {
72 	return (xdr_union(xdrs, (enum_t *)&objp->address_type,
73 	    (char *)&objp->bp_address, choices, (xdrproc_t)NULL));
74 }
75 
76 bool_t
77 xdr_bp_whoami_arg(XDR *xdrs, bp_whoami_arg *objp)
78 {
79 	return (xdr_bp_address(xdrs, &objp->client_address));
80 }
81 
82 bool_t
83 xdr_bp_whoami_res(XDR *xdrs, bp_whoami_res *objp)
84 {
85 	if (!xdr_bp_machine_name_t(xdrs, &objp->client_name))
86 		return (FALSE);
87 	if (!xdr_bp_machine_name_t(xdrs, &objp->domain_name))
88 		return (FALSE);
89 	if (!xdr_bp_address(xdrs, &objp->router_address))
90 		return (FALSE);
91 	return (TRUE);
92 }
93 
94 bool_t
95 xdr_bp_getfile_arg(XDR *xdrs, bp_getfile_arg *objp)
96 {
97 	if (!xdr_bp_machine_name_t(xdrs, &objp->client_name))
98 		return (FALSE);
99 	if (!xdr_bp_fileid_t(xdrs, &objp->file_id))
100 		return (FALSE);
101 	return (TRUE);
102 }
103 
104 bool_t
105 xdr_bp_getfile_res(XDR *xdrs, bp_getfile_res *objp)
106 {
107 	if (!xdr_bp_machine_name_t(xdrs, &objp->server_name))
108 		return (FALSE);
109 	if (!xdr_bp_address(xdrs, &objp->server_address))
110 		return (FALSE);
111 	if (!xdr_bp_path_t(xdrs, &objp->server_path))
112 		return (FALSE);
113 	return (TRUE);
114 }
115