Lines Matching refs:cu
117 static int _rcv_unitdata_err(struct cu_data *cu);
138 struct cu_data *cu = NULL; /* private data */ in clnt_dg_create() local
191 cu = malloc(sizeof (*cu) + ssz + rsz); in clnt_dg_create()
192 if (cu == NULL) in clnt_dg_create()
194 if ((cu->cu_raddr.buf = malloc(svcaddr->len)) == NULL) in clnt_dg_create()
196 (void) memcpy(cu->cu_raddr.buf, svcaddr->buf, (size_t)svcaddr->len); in clnt_dg_create()
197 cu->cu_raddr.len = cu->cu_raddr.maxlen = svcaddr->len; in clnt_dg_create()
198 cu->cu_outbuf_start = &cu->cu_inbuf[rsz]; in clnt_dg_create()
200 cu->cu_wait.tv_sec = 15; /* heuristically chosen */ in clnt_dg_create()
201 cu->cu_wait.tv_usec = 0; in clnt_dg_create()
202 cu->cu_total.tv_sec = -1; in clnt_dg_create()
203 cu->cu_total.tv_usec = -1; in clnt_dg_create()
204 cu->cu_sendsz = ssz; in clnt_dg_create()
205 cu->cu_recvsz = rsz; in clnt_dg_create()
210 xdrmem_create(&(cu->cu_outxdrs), cu->cu_outbuf, ssz, XDR_ENCODE); in clnt_dg_create()
211 if (!xdr_callhdr(&(cu->cu_outxdrs), &call_msg)) { in clnt_dg_create()
217 cu->cu_xdrpos = XDR_GETPOS(&(cu->cu_outxdrs)); in clnt_dg_create()
218 XDR_DESTROY(&(cu->cu_outxdrs)); in clnt_dg_create()
219 xdrmem_create(&(cu->cu_outxdrs), cu->cu_outbuf_start, ssz, XDR_ENCODE); in clnt_dg_create()
225 tr_data->udata.maxlen = cu->cu_recvsz; in clnt_dg_create()
226 tr_data->udata.buf = cu->cu_inbuf; in clnt_dg_create()
227 cu->cu_tr_data = tr_data; in clnt_dg_create()
234 cu->cu_closeit = FALSE; in clnt_dg_create()
235 cu->cu_fd = fd; in clnt_dg_create()
237 cl->cl_private = (caddr_t)cu; in clnt_dg_create()
241 cu->pfdp.fd = cu->cu_fd; in clnt_dg_create()
242 cu->pfdp.events = MASKVAL; in clnt_dg_create()
252 if (cu) { in clnt_dg_create()
253 free(cu->cu_raddr.buf); in clnt_dg_create()
254 free(cu); in clnt_dg_create()
265 struct cu_data *cu = (struct cu_data *)cl->cl_private; in clnt_dg_call() local
281 if (rpc_fd_lock(dgtbl, cu->cu_fd)) { in clnt_dg_call()
284 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_call()
288 if (cu->cu_total.tv_usec == -1) { in clnt_dg_call()
291 timeout = cu->cu_total; /* use default timeout */ in clnt_dg_call()
296 retransmit_time = cu->cu_wait; in clnt_dg_call()
298 tu_data.addr = cu->cu_raddr; in clnt_dg_call()
301 xdrs = &(cu->cu_outxdrs); in clnt_dg_call()
309 x_id = ntohl(*(uint32_t *)(cu->cu_outbuf)) + 1; /* set XID */ in clnt_dg_call()
311 *(uint32_t *)cu->cu_outbuf = htonl(x_id); in clnt_dg_call()
314 if ((!XDR_PUTBYTES(xdrs, cu->cu_outbuf, cu->cu_xdrpos)) || in clnt_dg_call()
318 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_call()
323 uint32_t *u = (uint32_t *)&cu->cu_outbuf[cu->cu_xdrpos]; in clnt_dg_call()
325 if (!__rpc_gss_wrap(cl->cl_auth, cu->cu_outbuf, in clnt_dg_call()
326 ((char *)u) - cu->cu_outbuf, xdrs, xargs, argsp)) { in clnt_dg_call()
327 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_call()
334 tu_data.udata.buf = cu->cu_outbuf_start; in clnt_dg_call()
337 if (t_sndudata(cu->cu_fd, &tu_data) == -1) { in clnt_dg_call()
340 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_call()
348 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_call()
377 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_call()
391 switch (poll(&cu->pfdp, 1, in clnt_dg_call()
397 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_call()
472 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_call()
479 if (cu->pfdp.revents & POLLNVAL || (cu->pfdp.revents == 0)) { in clnt_dg_call()
489 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_call()
499 res = t_rcvudata(cu->cu_fd, cu->cu_tr_data, &moreflag); in clnt_dg_call()
525 if ((err = _rcv_unitdata_err(cu)) == 0) in clnt_dg_call()
534 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_call()
537 if (cu->cu_tr_data->udata.len < (uint_t)sizeof (uint32_t)) in clnt_dg_call()
541 if (*((uint32_t *)(cu->cu_inbuf)) != in clnt_dg_call()
543 *((uint32_t *)(cu->cu_outbuf))) in clnt_dg_call()
553 xdrmem_create(&reply_xdrs, cu->cu_inbuf, in clnt_dg_call()
554 (uint_t)cu->cu_tr_data->udata.len, XDR_DECODE); in clnt_dg_call()
616 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_call()
624 struct cu_data *cu = (struct cu_data *)cl->cl_private; in clnt_dg_send() local
630 if (rpc_fd_lock(dgtbl, cu->cu_fd)) { in clnt_dg_send()
633 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_send()
637 tu_data.addr = cu->cu_raddr; in clnt_dg_send()
639 xdrs = &(cu->cu_outxdrs); in clnt_dg_send()
647 x_id = ntohl(*(uint32_t *)(cu->cu_outbuf)) + 1; /* set XID */ in clnt_dg_send()
649 *(uint32_t *)cu->cu_outbuf = htonl(x_id); in clnt_dg_send()
652 if ((!XDR_PUTBYTES(xdrs, cu->cu_outbuf, cu->cu_xdrpos)) || in clnt_dg_send()
656 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_send()
661 uint32_t *u = (uint32_t *)&cu->cu_outbuf[cu->cu_xdrpos]; in clnt_dg_send()
663 if (!__rpc_gss_wrap(cl->cl_auth, cu->cu_outbuf, in clnt_dg_send()
664 ((char *)u) - cu->cu_outbuf, xdrs, xargs, argsp)) { in clnt_dg_send()
665 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_send()
671 tu_data.udata.buf = cu->cu_outbuf_start; in clnt_dg_send()
674 if (t_sndudata(cu->cu_fd, &tu_data) == -1) { in clnt_dg_send()
677 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_send()
681 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_send()
696 struct cu_data *cu = (struct cu_data *)cl->cl_private; in clnt_dg_freeres() local
697 XDR *xdrs = &(cu->cu_outxdrs); in clnt_dg_freeres()
700 (void) rpc_fd_lock(dgtbl, cu->cu_fd); in clnt_dg_freeres()
703 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_freeres()
717 struct cu_data *cu = (struct cu_data *)cl->cl_private; in clnt_dg_control() local
719 if (rpc_fd_lock(dgtbl, cu->cu_fd)) { in clnt_dg_control()
720 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_control()
726 cu->cu_closeit = TRUE; in clnt_dg_control()
727 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_control()
730 cu->cu_closeit = FALSE; in clnt_dg_control()
731 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_control()
737 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_control()
744 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_control()
748 cu->cu_total = *(struct timeval *)info; in clnt_dg_control()
752 *(struct timeval *)info = cu->cu_total; in clnt_dg_control()
756 (void) memcpy(info, cu->cu_raddr.buf, (size_t)cu->cu_raddr.len); in clnt_dg_control()
761 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_control()
765 cu->cu_wait = *(struct timeval *)info; in clnt_dg_control()
769 *(struct timeval *)info = cu->cu_wait; in clnt_dg_control()
773 *(int *)info = cu->cu_fd; in clnt_dg_control()
777 *(struct netbuf *)info = cu->cu_raddr; in clnt_dg_control()
782 if (cu->cu_raddr.maxlen < addr->len) { in clnt_dg_control()
783 free(cu->cu_raddr.buf); in clnt_dg_control()
784 if ((cu->cu_raddr.buf = malloc(addr->len)) == NULL) { in clnt_dg_control()
785 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_control()
788 cu->cu_raddr.maxlen = addr->len; in clnt_dg_control()
790 cu->cu_raddr.len = addr->len; in clnt_dg_control()
791 (void) memcpy(cu->cu_raddr.buf, addr->buf, addr->len); in clnt_dg_control()
800 *(uint32_t *)info = ntohl(*(uint32_t *)cu->cu_outbuf); in clnt_dg_control()
806 *(uint32_t *)cu->cu_outbuf = htonl(*(uint32_t *)info - 1); in clnt_dg_control()
818 *(uint32_t *)info = ntohl(*(uint32_t *)(cu->cu_outbuf + in clnt_dg_control()
824 *(uint32_t *)(cu->cu_outbuf + 4 * BYTES_PER_XDR_UNIT) = in clnt_dg_control()
837 *(uint32_t *)info = ntohl(*(uint32_t *)(cu->cu_outbuf + in clnt_dg_control()
843 *(uint32_t *)(cu->cu_outbuf + 3 * BYTES_PER_XDR_UNIT) = in clnt_dg_control()
849 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_control()
852 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_control()
860 struct cu_data *cu = (struct cu_data *)cl->cl_private; in clnt_dg_destroy() local
861 int cu_fd = cu->cu_fd; in clnt_dg_destroy()
864 if (cu->cu_closeit) in clnt_dg_destroy()
866 XDR_DESTROY(&(cu->cu_outxdrs)); in clnt_dg_destroy()
867 cu->cu_tr_data->udata.buf = NULL; in clnt_dg_destroy()
868 (void) t_free((char *)cu->cu_tr_data, T_UNITDATA); in clnt_dg_destroy()
869 free(cu->cu_raddr.buf); in clnt_dg_destroy()
870 free(cu); in clnt_dg_destroy()
918 _rcv_unitdata_err(struct cu_data *cu) in _rcv_unitdata_err() argument
925 uderr = (struct t_uderr *)t_alloc(cu->cu_fd, T_UDERROR, T_ADDR); in _rcv_unitdata_err()
927 if (t_rcvuderr(cu->cu_fd, uderr) == 0) { in _rcv_unitdata_err()
931 if (uderr->addr.len != cu->cu_raddr.len || in _rcv_unitdata_err()
932 (memcmp(uderr->addr.buf, cu->cu_raddr.buf, in _rcv_unitdata_err()
933 cu->cu_raddr.len))) { in _rcv_unitdata_err()