]> git.ozlabs.org Git - ccan/blob - ccan/nfs/portmap.c
container_of: don't put member_ptr in container_off.
[ccan] / ccan / nfs / portmap.c
1 /*
2    Copyright (C) by Ronnie Sahlberg <ronniesahlberg@gmail.com> 2010
3    
4    This program is free software; you can redistribute it and/or modify
5    it under the terms of the GNU General Public License as published by
6    the Free Software Foundation; either version 3 of the License, or
7    (at your option) any later version.
8    
9    This program is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12    GNU General Public License for more details.
13    
14    You should have received a copy of the GNU General Public License
15    along with this program; if not, see <http://www.gnu.org/licenses/>.
16 */
17
18 #include <stdio.h>
19 #include <rpc/xdr.h>
20 #include "nfs.h"
21 #include "libnfs-raw.h"
22 #include "libnfs-private.h"
23 #include "rpc/portmap.h"
24
25
26 int rpc_pmap_null_async(struct rpc_context *rpc, rpc_cb cb, void *private_data)
27 {
28         struct rpc_pdu *pdu;
29
30         pdu = rpc_allocate_pdu(rpc, PMAP_PROGRAM, PMAP_V2, PMAP_NULL, cb, private_data, (xdrproc_t)xdr_void, 0);
31         if (pdu == NULL) {
32                 rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for portmap/null call");
33                 return -1;
34         }
35
36         if (rpc_queue_pdu(rpc, pdu) != 0) {
37                 rpc_set_error(rpc, "Out of memory. Failed to queue pdu for portmap/null call");
38                 rpc_free_pdu(rpc, pdu);
39                 return -2;
40         }
41
42         return 0;
43 }
44
45 int rpc_pmap_getport_async(struct rpc_context *rpc, int program, int version, rpc_cb cb, void *private_data)
46 {
47         struct rpc_pdu *pdu;
48         struct mapping m;
49
50         pdu = rpc_allocate_pdu(rpc, PMAP_PROGRAM, PMAP_V2, PMAP_GETPORT, cb, private_data, (xdrproc_t)xdr_int, sizeof(uint32_t));
51         if (pdu == NULL) {
52                 rpc_set_error(rpc, "Out of memory. Failed to allocate pdu for portmap/getport call");
53                 return -1;
54         }
55
56         m.prog = program;
57         m.vers = version;
58         m.prot = IPPROTO_TCP;
59         m.port = 0;
60         if (xdr_mapping(&pdu->xdr, &m) == 0) {
61                 rpc_set_error(rpc, "XDR error: Failed to encode data for portmap/getport call");
62                 rpc_free_pdu(rpc, pdu);
63                 return -2;
64         }
65
66         if (rpc_queue_pdu(rpc, pdu) != 0) {
67                 printf("Failed to queue portmap/getport pdu\n");
68                 rpc_free_pdu(rpc, pdu);
69                 return -2;
70         }
71
72         return 0;
73 }