Lines Matching refs:cu
118 static int _rcv_unitdata_err(struct cu_data *cu);
139 struct cu_data *cu = NULL; /* private data */ in clnt_dg_create() local
192 cu = malloc(sizeof (*cu) + ssz + rsz); in clnt_dg_create()
193 if (cu == NULL) in clnt_dg_create()
195 if ((cu->cu_raddr.buf = malloc(svcaddr->len)) == NULL) in clnt_dg_create()
197 (void) memcpy(cu->cu_raddr.buf, svcaddr->buf, (size_t)svcaddr->len); in clnt_dg_create()
198 cu->cu_raddr.len = cu->cu_raddr.maxlen = svcaddr->len; in clnt_dg_create()
199 cu->cu_outbuf_start = &cu->cu_inbuf[rsz]; in clnt_dg_create()
201 cu->cu_wait.tv_sec = 15; /* heuristically chosen */ in clnt_dg_create()
202 cu->cu_wait.tv_usec = 0; in clnt_dg_create()
203 cu->cu_total.tv_sec = -1; in clnt_dg_create()
204 cu->cu_total.tv_usec = -1; in clnt_dg_create()
205 cu->cu_sendsz = ssz; in clnt_dg_create()
206 cu->cu_recvsz = rsz; in clnt_dg_create()
211 xdrmem_create(&(cu->cu_outxdrs), cu->cu_outbuf, ssz, XDR_ENCODE); in clnt_dg_create()
212 if (!xdr_callhdr(&(cu->cu_outxdrs), &call_msg)) { in clnt_dg_create()
218 cu->cu_xdrpos = XDR_GETPOS(&(cu->cu_outxdrs)); in clnt_dg_create()
219 XDR_DESTROY(&(cu->cu_outxdrs)); in clnt_dg_create()
220 xdrmem_create(&(cu->cu_outxdrs), cu->cu_outbuf_start, ssz, XDR_ENCODE); in clnt_dg_create()
226 tr_data->udata.maxlen = cu->cu_recvsz; in clnt_dg_create()
227 tr_data->udata.buf = cu->cu_inbuf; in clnt_dg_create()
228 cu->cu_tr_data = tr_data; in clnt_dg_create()
235 cu->cu_closeit = FALSE; in clnt_dg_create()
236 cu->cu_fd = fd; in clnt_dg_create()
238 cl->cl_private = (caddr_t)cu; in clnt_dg_create()
242 cu->pfdp.fd = cu->cu_fd; in clnt_dg_create()
243 cu->pfdp.events = MASKVAL; in clnt_dg_create()
253 if (cu) { in clnt_dg_create()
254 free(cu->cu_raddr.buf); in clnt_dg_create()
255 free(cu); in clnt_dg_create()
266 struct cu_data *cu = (struct cu_data *)cl->cl_private; in clnt_dg_call() local
282 if (rpc_fd_lock(dgtbl, cu->cu_fd)) { in clnt_dg_call()
285 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_call()
289 if (cu->cu_total.tv_usec == -1) { in clnt_dg_call()
292 timeout = cu->cu_total; /* use default timeout */ in clnt_dg_call()
297 retransmit_time = cu->cu_wait; in clnt_dg_call()
299 tu_data.addr = cu->cu_raddr; in clnt_dg_call()
302 xdrs = &(cu->cu_outxdrs); in clnt_dg_call()
310 x_id = ntohl(*(uint32_t *)(cu->cu_outbuf)) + 1; /* set XID */ in clnt_dg_call()
312 *(uint32_t *)cu->cu_outbuf = htonl(x_id); in clnt_dg_call()
315 if ((!XDR_PUTBYTES(xdrs, cu->cu_outbuf, cu->cu_xdrpos)) || in clnt_dg_call()
319 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_call()
324 uint32_t *u = (uint32_t *)&cu->cu_outbuf[cu->cu_xdrpos]; in clnt_dg_call()
326 if (!__rpc_gss_wrap(cl->cl_auth, cu->cu_outbuf, in clnt_dg_call()
327 ((char *)u) - cu->cu_outbuf, xdrs, xargs, argsp)) { in clnt_dg_call()
328 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_call()
335 tu_data.udata.buf = cu->cu_outbuf_start; in clnt_dg_call()
338 if (t_sndudata(cu->cu_fd, &tu_data) == -1) { in clnt_dg_call()
341 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_call()
349 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_call()
378 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_call()
392 switch (poll(&cu->pfdp, 1, in clnt_dg_call()
398 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_call()
473 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_call()
480 if (cu->pfdp.revents & POLLNVAL || (cu->pfdp.revents == 0)) { in clnt_dg_call()
490 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_call()
500 res = t_rcvudata(cu->cu_fd, cu->cu_tr_data, &moreflag); in clnt_dg_call()
526 if ((err = _rcv_unitdata_err(cu)) == 0) in clnt_dg_call()
535 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_call()
538 if (cu->cu_tr_data->udata.len < (uint_t)sizeof (uint32_t)) in clnt_dg_call()
542 if (*((uint32_t *)(cu->cu_inbuf)) != in clnt_dg_call()
544 *((uint32_t *)(cu->cu_outbuf))) in clnt_dg_call()
554 xdrmem_create(&reply_xdrs, cu->cu_inbuf, in clnt_dg_call()
555 (uint_t)cu->cu_tr_data->udata.len, XDR_DECODE); in clnt_dg_call()
617 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_call()
625 struct cu_data *cu = (struct cu_data *)cl->cl_private; in clnt_dg_send() local
631 if (rpc_fd_lock(dgtbl, cu->cu_fd)) { in clnt_dg_send()
634 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_send()
638 tu_data.addr = cu->cu_raddr; in clnt_dg_send()
640 xdrs = &(cu->cu_outxdrs); in clnt_dg_send()
648 x_id = ntohl(*(uint32_t *)(cu->cu_outbuf)) + 1; /* set XID */ in clnt_dg_send()
650 *(uint32_t *)cu->cu_outbuf = htonl(x_id); in clnt_dg_send()
653 if ((!XDR_PUTBYTES(xdrs, cu->cu_outbuf, cu->cu_xdrpos)) || in clnt_dg_send()
657 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_send()
662 uint32_t *u = (uint32_t *)&cu->cu_outbuf[cu->cu_xdrpos]; in clnt_dg_send()
664 if (!__rpc_gss_wrap(cl->cl_auth, cu->cu_outbuf, in clnt_dg_send()
665 ((char *)u) - cu->cu_outbuf, xdrs, xargs, argsp)) { in clnt_dg_send()
666 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_send()
672 tu_data.udata.buf = cu->cu_outbuf_start; in clnt_dg_send()
675 if (t_sndudata(cu->cu_fd, &tu_data) == -1) { in clnt_dg_send()
678 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_send()
682 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_send()
697 struct cu_data *cu = (struct cu_data *)cl->cl_private; in clnt_dg_freeres() local
698 XDR *xdrs = &(cu->cu_outxdrs); in clnt_dg_freeres()
701 (void) rpc_fd_lock(dgtbl, cu->cu_fd); in clnt_dg_freeres()
704 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_freeres()
718 struct cu_data *cu = (struct cu_data *)cl->cl_private; in clnt_dg_control() local
720 if (rpc_fd_lock(dgtbl, cu->cu_fd)) { in clnt_dg_control()
721 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_control()
727 cu->cu_closeit = TRUE; in clnt_dg_control()
728 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_control()
731 cu->cu_closeit = FALSE; in clnt_dg_control()
732 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_control()
738 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_control()
745 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_control()
749 cu->cu_total = *(struct timeval *)info; in clnt_dg_control()
753 *(struct timeval *)info = cu->cu_total; in clnt_dg_control()
757 (void) memcpy(info, cu->cu_raddr.buf, (size_t)cu->cu_raddr.len); in clnt_dg_control()
762 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_control()
766 cu->cu_wait = *(struct timeval *)info; in clnt_dg_control()
770 *(struct timeval *)info = cu->cu_wait; in clnt_dg_control()
774 *(int *)info = cu->cu_fd; in clnt_dg_control()
778 *(struct netbuf *)info = cu->cu_raddr; in clnt_dg_control()
783 if (cu->cu_raddr.maxlen < addr->len) { in clnt_dg_control()
784 free(cu->cu_raddr.buf); in clnt_dg_control()
785 if ((cu->cu_raddr.buf = malloc(addr->len)) == NULL) { in clnt_dg_control()
786 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_control()
789 cu->cu_raddr.maxlen = addr->len; in clnt_dg_control()
791 cu->cu_raddr.len = addr->len; in clnt_dg_control()
792 (void) memcpy(cu->cu_raddr.buf, addr->buf, addr->len); in clnt_dg_control()
801 *(uint32_t *)info = ntohl(*(uint32_t *)cu->cu_outbuf); in clnt_dg_control()
807 *(uint32_t *)cu->cu_outbuf = htonl(*(uint32_t *)info - 1); in clnt_dg_control()
819 *(uint32_t *)info = ntohl(*(uint32_t *)(cu->cu_outbuf + in clnt_dg_control()
825 *(uint32_t *)(cu->cu_outbuf + 4 * BYTES_PER_XDR_UNIT) = in clnt_dg_control()
838 *(uint32_t *)info = ntohl(*(uint32_t *)(cu->cu_outbuf + in clnt_dg_control()
844 *(uint32_t *)(cu->cu_outbuf + 3 * BYTES_PER_XDR_UNIT) = in clnt_dg_control()
850 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_control()
853 rpc_fd_unlock(dgtbl, cu->cu_fd); in clnt_dg_control()
861 struct cu_data *cu = (struct cu_data *)cl->cl_private; in clnt_dg_destroy() local
862 int cu_fd = cu->cu_fd; in clnt_dg_destroy()
865 if (cu->cu_closeit) in clnt_dg_destroy()
867 XDR_DESTROY(&(cu->cu_outxdrs)); in clnt_dg_destroy()
868 cu->cu_tr_data->udata.buf = NULL; in clnt_dg_destroy()
869 (void) t_free((char *)cu->cu_tr_data, T_UNITDATA); in clnt_dg_destroy()
870 free(cu->cu_raddr.buf); in clnt_dg_destroy()
871 free(cu); in clnt_dg_destroy()
919 _rcv_unitdata_err(struct cu_data *cu) in _rcv_unitdata_err() argument
926 uderr = (struct t_uderr *)t_alloc(cu->cu_fd, T_UDERROR, T_ADDR); in _rcv_unitdata_err()
928 if (t_rcvuderr(cu->cu_fd, uderr) == 0) { in _rcv_unitdata_err()
932 if (uderr->addr.len != cu->cu_raddr.len || in _rcv_unitdata_err()
933 (memcmp(uderr->addr.buf, cu->cu_raddr.buf, in _rcv_unitdata_err()
934 cu->cu_raddr.len))) { in _rcv_unitdata_err()