Lines Matching refs:rpc
88 #include "rpc.h"
137 static int rpcclnt_send(struct rpcclnt *rpc, int procid, int prog,
139 static int rpcclnt_receive(struct rpcclnt *rpc, struct sockaddr *aname,
141 static int rpcclnt_reply(struct rpcclnt *rpc, int procid, int prog,
146 static int rpcclnt_reconnect(struct rpcclnt *rpc, struct sockaddr *saddr);
163 static int rpcclnt_send(struct rpcclnt *rpc, int procid, int prog,
175 nbytes = sendto(rpc->rc_so, call, reqlen, 0,
176 rpc->rc_name, sizeof(struct sockaddr));
199 static int rpcclnt_receive(struct rpcclnt *rpc, struct sockaddr *aname,
212 FD_SET((uint32_t)(rpc->rc_so), &fdreadset);
217 ret = select(rpc->rc_so + 1, &fdreadset, 0, 0, &timeval);
230 nbytes = recvfrom(rpc->rc_so, reply, resplen, 0, aname, &fromlen);
244 if (fxdr_unsigned(uint32_t, xid) != rpc->xid)
264 static int rpcclnt_receive(struct rpcclnt *rpc, struct sockaddr *aname,
281 FD_SET((uint32_t)(rpc->rc_so), &fdreadset);
286 ret = select(rpc->rc_so + 1, &fdreadset, 0, 0, &timeval);
299 nbytes = recvfrom(rpc->rc_so, (char *)reply + offset, resplen - offset, 0, aname, &fromlen);
353 static int rpcclnt_reply(struct rpcclnt *rpc, int procid, int prog,
360 error = rpcclnt_receive(rpc, rpc->rc_name, procid, prog, reply, resplen);
372 rpc->rc_timeout = true;
446 static int rpcclnt_alivecheck(struct rpcclnt *rpc)
453 int sockfd = rpc->rc_so;
482 (void)close(rpc->rc_so);
483 rpc->rc_so = -1;
548 static int rpcclnt_reconnect(struct rpcclnt *rpc, struct sockaddr *saddr)
559 rpcclnt_disconnect(rpc);
561 error = socket(rpc->rc_name->sa_family, rpc->rc_sotype, IPPROTO_TCP);
568 rpc->rc_so = error;
579 error = bind(rpc->rc_so, (struct sockaddr *)&sock_in, sizeof(sock_in));
594 error = connect(rpc->rc_so, saddr, sizeof(*saddr));
604 rpcclnt_disconnect(rpc);
646 int rpcclnt_connect(struct rpcclnt *rpc)
674 saddr = rpc->rc_name;
678 error = socket(saddr->sa_family, rpc->rc_sotype, NFS_PROTOTYPE);
685 rpc->rc_so = error;
697 error = bind(rpc->rc_so, (struct sockaddr *)&sin, sizeof(sin));
717 error = connect(rpc->rc_so, saddr, sizeof(*saddr));
734 error = rpcclnt_request(rpc, PMAPPROC_GETPORT, PMAPPROG, PMAPVERS,
746 error = rpcclnt_reconnect(rpc, saddr);
762 rpc->rc_path, RPC_RPATH_MAXSIZE - 1);
770 error = rpcclnt_request(rpc, RPCMNT_MOUNT, RPCPROG_MNT, RPCMNT_VER3,
788 rpc->rc_fhsize = fxdr_unsigned(uint32_t, response.mdata.mount.fhandle.length);
789 memcpy(&rpc->rc_fh, &response.mdata.mount.fhandle.handle, rpc->rc_fhsize);
797 error = rpcclnt_reconnect(rpc, saddr);
809 error = rpcclnt_request(rpc, PMAPPROC_GETPORT, PMAPPROG, PMAPVERS,
822 error = rpcclnt_reconnect(rpc, saddr);
832 rpcclnt_disconnect(rpc);
844 void rpcclnt_disconnect(struct rpcclnt *rpc)
846 if (rpc->rc_so != -1)
848 (void)lwip_close(rpc->rc_so);
849 rpc->rc_so = -1;
861 int rpcclnt_umount(struct rpcclnt *rpc)
880 saddr = rpc->rc_name;
889 error = rpcclnt_reconnect(rpc, saddr);
901 error = rpcclnt_request(rpc, PMAPPROC_GETPORT, PMAPPROG, PMAPVERS,
914 error = rpcclnt_reconnect(rpc, saddr);
924 rpc->rc_path, sizeof(request.mountd.umount.rpath) - 1);
928 error = rpcclnt_request(rpc, RPCMNT_UMOUNT, RPCPROG_MNT, RPCMNT_VER3,
963 int rpcclnt_request(struct rpcclnt *rpc, int procnum, int prog,
976 rpc->xid = rpcclnt_newxid();
987 rpc->xid, prog, version, procnum, reqlen);
1001 rpc->rc_timeout = false;
1005 error = rpcclnt_send(rpc, procnum, prog, request, reqlen);
1015 error = rpcclnt_reply(rpc, procnum, prog, response, resplen);
1024 while (rpc->rc_timeout && retries <= rpc->rc_retry);
1036 if (rpc->rc_so != -1)
1038 error = rpcclnt_alivecheck(rpc);
1048 if (rpc->rc_so == -1)
1050 error = rpcclnt_reconnect(rpc, rpc->rc_name);
1062 error = rpcclnt_send(rpc, procnum, prog, request, reqlen);
1065 rpcclnt_disconnect(rpc);
1072 error = rpcclnt_reply(rpc, procnum, prog, response, resplen);
1075 rpcclnt_disconnect(rpc);