Lines Matching refs:xprt

81 /* Structure used to initialize SVC_XP_AUTH(xprt).svc_ah_ops. */
94 struct cf_rendezvous { /* kept in xprt->xp_p1 for rendezvouser */
106 struct cf_conn { /* kept in xprt->xp_p1 for actual connection */
158 svc_vc_xprtfree(SVCXPRT *xprt)
161 SVCXPRT_EXT *xt = xprt ? SVCEXT(xprt) : NULL;
162 struct cf_rendezvous *r = xprt ?
164 (struct cf_rendezvous *)xprt->xp_p1 : NULL;
166 if (!xprt)
169 if (xprt->xp_tp)
170 free(xprt->xp_tp);
171 if (xprt->xp_netid)
172 free(xprt->xp_netid);
174 if (xprt->xp_ltaddr.buf)
175 free(xprt->xp_ltaddr.buf);
176 if (xprt->xp_rtaddr.buf)
177 free(xprt->xp_rtaddr.buf);
186 svc_xprt_free(xprt);
191 * xprt = svc_vc_create(fd, sendsize, recvsize);
201 SVCXPRT *xprt;
211 if ((xprt = svc_xprt_alloc()) == NULL) {
217 svc_flags(xprt) |= SVC_RENDEZVOUS;
223 svc_vc_xprtfree(xprt);
234 svc_vc_xprtfree(xprt);
247 svc_vc_xprtfree(xprt);
257 svc_vc_xprtfree(xprt);
268 svc_vc_xprtfree(xprt);
276 xprt->xp_fd = fd;
277 xprt->xp_p1 = (caddr_t)r;
278 xprt->xp_p2 = NULL;
279 xprt->xp_verf = _null_auth;
280 xprt->xp_ops = svc_vc_rendezvous_ops();
282 SVC_XP_AUTH(xprt).svc_ah_ops = svc_auth_any_ops;
284 SVC_XP_AUTH(xprt).svc_ah_private = NULL;
286 return (xprt);
292 SVCXPRT *xprt;
294 if ((xprt = svc_vc_create_private(fd, sendsize, recvsize)) != NULL)
295 xprt_register(xprt);
296 return (xprt);
302 SVCXPRT *xprt;
306 if ((xprt = svc_xprt_alloc()) == NULL)
310 SVCEXT(xprt)->parent = parent;
312 SVCEXT(xprt)->flags = SVCEXT(parent)->flags;
314 xprt->xp_fd = fd;
315 xprt->xp_ops = svc_vc_rendezvous_ops();
317 xprt->xp_tp = (char *)strdup(parent->xp_tp);
318 if (xprt->xp_tp == NULL) {
320 svc_vc_xprtfree(xprt);
325 xprt->xp_netid = (char *)strdup(parent->xp_netid);
326 if (xprt->xp_netid == NULL) {
328 if (xprt->xp_tp)
329 free(xprt->xp_tp);
330 svc_vc_xprtfree(xprt);
338 xprt->xp_ltaddr = parent->xp_ltaddr;
339 xprt->xp_rtaddr = parent->xp_rtaddr; /* XXX - not used for rendezvous */
340 xprt->xp_type = parent->xp_type;
341 xprt->xp_verf = parent->xp_verf;
344 svc_vc_xprtfree(xprt);
347 xprt->xp_p1 = (caddr_t)r;
360 svc_vc_xprtfree(xprt);
366 svc_vc_xprtfree(xprt);
370 return (xprt);
379 __svc_vc_setflag(SVCXPRT *xprt, int flag)
384 r = (struct cf_rendezvous *)xprt->xp_p1;
439 SVCXPRT *xprt;
441 if ((xprt = svc_fd_create_private(fd, sendsize, recvsize)) != NULL)
442 xprt_register(xprt);
443 return (xprt);
447 svc_fd_xprtfree(SVCXPRT *xprt)
450 SVCXPRT_EXT *xt = xprt ? SVCEXT(xprt) : NULL;
452 struct cf_conn *cd = xprt ? (struct cf_conn *)xprt->xp_p1 : NULL;
454 if (!xprt)
457 if (xprt->xp_tp)
458 free(xprt->xp_tp);
459 if (xprt->xp_netid)
460 free(xprt->xp_netid);
462 if (xprt->xp_ltaddr.buf)
463 free(xprt->xp_ltaddr.buf);
464 if (xprt->xp_rtaddr.buf)
465 free(xprt->xp_rtaddr.buf);
471 if (xt && (xt->parent == NULL) && xprt->xp_p2) {
473 free(((struct netbuf *)xprt->xp_p2)->buf);
474 free(xprt->xp_p2);
476 svc_xprt_free(xprt);
483 SVCXPRT *xprt;
486 xprt = svc_xprt_alloc();
487 if (xprt == NULL) {
492 svc_flags(xprt) |= SVC_CONNECTION;
497 svc_fd_xprtfree(xprt);
508 xdrrec_create(&(cd->xdrs), sendsize, 0, (caddr_t)xprt,
513 svc_fd_xprtfree(xprt);
525 svc_fd_xprtfree(xprt);
540 svc_fd_xprtfree(xprt);
558 svc_fd_xprtfree(xprt);
563 xdrrec_create(svc_xdrs[fd], 0, recvsize, (caddr_t)xprt,
570 svc_fd_xprtfree(xprt);
576 xprt->xp_p1 = (caddr_t)cd;
577 xprt->xp_p2 = NULL;
578 xprt->xp_verf.oa_base = cd->verf_body;
579 xprt->xp_ops = svc_vc_ops(); /* truely deals with calls */
580 xprt->xp_fd = fd;
581 return (xprt);
587 SVCXPRT *xprt;
590 if ((xprt = svc_xprt_alloc()) == NULL)
594 SVCEXT(xprt)->parent = parent;
596 SVCEXT(xprt)->flags = SVCEXT(parent)->flags;
598 xprt->xp_fd = parent->xp_fd;
599 xprt->xp_ops = svc_vc_ops();
601 xprt->xp_tp = (char *)strdup(parent->xp_tp);
602 if (xprt->xp_tp == NULL) {
604 svc_fd_xprtfree(xprt);
609 xprt->xp_netid = (char *)strdup(parent->xp_netid);
610 if (xprt->xp_netid == NULL) {
612 if (xprt->xp_tp)
613 free(xprt->xp_tp);
614 svc_fd_xprtfree(xprt);
621 xprt->xp_ltaddr = parent->xp_ltaddr;
622 xprt->xp_rtaddr = parent->xp_rtaddr;
623 xprt->xp_type = parent->xp_type;
626 svc_fd_xprtfree(xprt);
640 xdrrec_create(&(cd->xdrs), cd->sendsize, 0, (caddr_t)xprt,
644 svc_fd_xprtfree(xprt);
647 xprt->xp_verf.oa_base = cd->verf_body;
648 xprt->xp_p1 = (char *)cd;
649 xprt->xp_p2 = parent->xp_p2; /* shared */
651 return (xprt);
666 rendezvous_request(SVCXPRT *xprt, struct rpc_msg *msg)
673 r = (struct cf_rendezvous *)xprt->xp_p1;
676 switch (t_look(xprt->xp_fd)) {
678 (void) t_rcvdis(xprt->xp_fd, NULL);
683 if (t_listen(xprt->xp_fd, r->t_call) == -1) {
688 if (t_look(xprt->xp_fd) == T_DISCONNECT)
689 (void) t_rcvdis(xprt->xp_fd, NULL);
702 if (xprt->xp_tp) {
703 tpname = xprt->xp_tp;
706 * If xprt->xp_tp is NULL, then try to extract the
708 * protcol corresponding to xprt->xp_fd
712 if ((nconf = __rpcfd_to_nconf(xprt->xp_fd, xprt->xp_type))
722 do_accept(xprt->xp_fd, tpname, xprt->xp_netid, r);
740 SVCXPRT *xprt;
755 * too many open files, the LRU connection xprt should
767 * Do not destroy LRU xprt unless there are
982 xprt = makefd_xprt(destfd, r->sendsize, r->recvsize, r->cf_tsdu,
984 if (xprt == NULL) {
986 * makefd_xprt() returns a NULL xprt only when
996 xprt->xp_rtaddr.len = tcp->addr.len;
997 xprt->xp_rtaddr.maxlen = tcp->addr.len;
998 if ((xprt->xp_rtaddr.buf = malloc(tcp->addr.len)) == NULL)
1000 (void) memcpy(xprt->xp_rtaddr.buf, tcp->addr.buf, tcp->addr.len);
1003 xprt->xp_ltaddr.maxlen = sizeof (struct sockaddr_in);
1004 if ((xprt->xp_ltaddr.buf =
1005 malloc(xprt->xp_ltaddr.maxlen)) == NULL)
1007 if (t_getname(destfd, &xprt->xp_ltaddr, LOCALNAME) < 0) {
1013 xprt->xp_ltaddr.maxlen = sizeof (struct sockaddr_in6);
1014 if ((xprt->xp_ltaddr.buf =
1015 malloc(xprt->xp_ltaddr.maxlen)) == NULL)
1017 if (t_getname(destfd, &xprt->xp_ltaddr, LOCALNAME) < 0) {
1024 xprt->xp_tp = strdup(tpname);
1025 xprt->xp_netid = strdup(netid);
1026 if ((xprt->xp_tp == NULL) ||
1027 (xprt->xp_netid == NULL)) {
1031 xprt->xp_p2 = malloc(sizeof (struct netbuf));
1033 if (xprt->xp_p2 != NULL) {
1035 struct netbuf *netptr = (struct netbuf *)xprt->xp_p2;
1054 if (!svc_vc_nonblock(xprt_srcfd, xprt))
1062 xprt->xp_closeclnt = xprt_srcfd->xp_closeclnt;
1063 xprt_register(xprt);
1083 if (xprt)
1084 svc_vc_destroy(xprt);
1139 rendezvous_stat(SVCXPRT *xprt)
1145 svc_vc_destroy(SVCXPRT *xprt)
1148 _svc_vc_destroy_private(xprt, TRUE);
1154 _svc_vc_destroy_private(SVCXPRT *xprt, bool_t lock_not_held)
1158 if (SVCEXT(xprt)->parent)
1160 xprt = SVCEXT(xprt)->parent;
1162 svc_flags(xprt) |= SVC_DEFUNCT;
1164 if (SVCEXT(xprt)->refcnt > 0)
1168 if (xprt->xp_closeclnt != NULL) {
1169 svc_errorhandler_t cb = xprt->xp_closeclnt;
1175 xprt->xp_closeclnt = NULL;
1176 cb(xprt, (xprt->xp_rtaddr.len != 0));
1179 __xprt_unregister_private(xprt, lock_not_held);
1180 (void) t_close(xprt->xp_fd);
1183 svc_xprt_destroy(xprt);
1186 if (svc_type(xprt) == SVC_RENDEZVOUS)
1187 svc_vc_xprtfree(xprt);
1189 svc_fd_xprtfree(xprt);
1195 svc_vc_control(SVCXPRT *xprt, const uint_t rq, void *in)
1199 xprt->xp_closeclnt = (svc_errorhandler_t)in;
1202 *(svc_errorhandler_t *)in = xprt->xp_closeclnt;
1205 if (xprt->xp_p1 == NULL)
1208 *(uint32_t *)in = ((struct cf_conn *)(xprt->xp_p1))->x_id;
1216 rendezvous_control(SVCXPRT *xprt, const uint_t rq, void *in)
1223 xprt->xp_closeclnt = (svc_errorhandler_t)in;
1226 *(svc_errorhandler_t *)in = xprt->xp_closeclnt;
1230 r = (struct cf_rendezvous *)xprt->xp_p1;
1245 r = (struct cf_rendezvous *)xprt->xp_p1;
1254 r = (struct cf_rendezvous *)xprt->xp_p1;
1291 read_vc(SVCXPRT *xprt, caddr_t buf, int len)
1293 int fd = xprt->xp_fd;
1302 if (svc_failed(xprt))
1306 if (((struct cf_conn *)(xprt->xp_p1))->cf_conn_nonblock) {
1321 if ((len = t_rcvnonblock(xprt, buf, len)) >= 0) {
1323 update_nonblock_timestamps(xprt);
1357 ((struct cf_conn *)(xprt->xp_p1))->strm_stat = XPRT_DIED;
1359 svc_flags(xprt) |= SVC_FAILED;
1368 t_rcvnonblock(SVCXPRT *xprt, caddr_t buf, int len)
1370 int fd = xprt->xp_fd;
1392 * Either poll() lied, or the xprt/fd was closed and
1409 * seconds, timeout the fd by destroying its xprt.
1411 * that the least busy xprt gets destroyed as well.
1418 SVCXPRT *xprt;
1444 if ((xprt = svc_xports[fd_idx]) == NULL) {
1449 if (svc_type(xprt) != SVC_CONNECTION) {
1453 cd = (struct cf_conn *)xprt->xp_p1;
1460 dead_xprt[dead_idx++] = xprt;
1465 /* Possible LRU xprt */
1466 candidate_xprt = xprt;
1527 write_vc(SVCXPRT *xprt, caddr_t buf, int len)
1536 maxsz = ((struct cf_conn *)(xprt->xp_p1))->cf_tsdu;
1538 nonblock = ((struct cf_conn *)(xprt->xp_p1))->cf_conn_nonblock;
1542 if ((len = t_snd(xprt->xp_fd, buf, (unsigned)len,
1545 switch (t_look(xprt->xp_fd)) {
1547 (void) t_rcvdis(xprt->xp_fd, NULL);
1550 (void) t_rcvrel(xprt->xp_fd);
1551 (void) t_sndrel(xprt->xp_fd);
1558 ((struct cf_conn *)(xprt->xp_p1))->strm_stat =
1561 svc_flags(xprt) |= SVC_FAILED;
1570 pfd.fd = xprt->xp_fd;
1580 if ((i = t_snd(xprt->xp_fd, buf,
1583 switch (t_look(xprt->xp_fd)) {
1585 (void) t_rcvdis(xprt->xp_fd, NULL);
1588 (void) t_rcvrel(xprt->xp_fd);
1618 ((struct cf_conn *)(xprt->xp_p1))->strm_stat =
1621 svc_flags(xprt) |= SVC_FAILED;
1629 svc_vc_stat(SVCXPRT *xprt)
1632 SVCXPRT *parent = SVCEXT(xprt)->parent ? SVCEXT(xprt)->parent : xprt;
1635 if (svc_failed(parent) || svc_failed(xprt))
1637 if (!xdrrec_eof(svc_xdrs[xprt->xp_fd]))
1644 if (svc_failed(parent) || svc_failed(xprt))
1652 svc_vc_recv(SVCXPRT *xprt, struct rpc_msg *msg)
1655 struct cf_conn *cd = (struct cf_conn *)(xprt->xp_p1);
1656 XDR *xdrs = svc_xdrs[xprt->xp_fd];
1665 * If the xprt has died, pass it along in svc_flags.
1674 svc_flags(xprt) |= SVC_FAILED;
1694 svc_flags(xprt) |= SVC_FAILED;
1701 svc_vc_getargs(SVCXPRT *xprt, xdrproc_t xdr_args, caddr_t args_ptr)
1706 dummy = SVCAUTH_UNWRAP(&SVC_XP_AUTH(xprt), svc_xdrs[xprt->xp_fd],
1709 svc_args_done(xprt);
1714 svc_vc_freeargs(SVCXPRT *xprt, xdrproc_t xdr_args, caddr_t args_ptr)
1717 XDR *xdrs = &(((struct cf_conn *)(xprt->xp_p1))->xdrs);
1724 svc_vc_reply(SVCXPRT *xprt, struct rpc_msg *msg)
1727 struct cf_conn *cd = (struct cf_conn *)(xprt->xp_p1);
1735 (void) mutex_lock(&svc_send_mutex(SVCEXT(xprt)->parent));
1739 (void) mutex_lock(&svc_send_mutex(SVCEXT(xprt)->parent));
1756 &SVC_XP_AUTH(xprt), xdrs, xdr_results, xdr_location))) {
1762 (void) mutex_unlock(&svc_send_mutex(SVCEXT(xprt)->parent));
1766 (void) mutex_unlock(&svc_send_mutex(SVCEXT(xprt)->parent));
1822 __svc_vc_dupcache_init(SVCXPRT *xprt, void *condition, int basis)
1826 &(((struct cf_rendezvous *)xprt->xp_p1)->cf_cache)));