Lines Matching refs:xprt

145 static bool_t svc_vc_control(SVCXPRT *xprt, const u_int rq, void *in);
146 static bool_t svc_vc_rendezvous_control (SVCXPRT *xprt, const u_int rq,
154 static bool_t svc_vc_backchannel_control(SVCXPRT *xprt, const u_int rq,
208 SVCXPRT *xprt; in svc_vc_create() local
219 xprt = svc_vc_create_conn(pool, so, (struct sockaddr *)&ss); in svc_vc_create()
220 return (xprt); in svc_vc_create()
224 xprt = svc_xprt_alloc(); in svc_vc_create()
225 sx_init(&xprt->xp_lock, "xprt->xp_lock"); in svc_vc_create()
226 xprt->xp_pool = pool; in svc_vc_create()
227 xprt->xp_socket = so; in svc_vc_create()
228 xprt->xp_p1 = NULL; in svc_vc_create()
229 xprt->xp_p2 = NULL; in svc_vc_create()
230 xprt->xp_ops = &svc_vc_rendezvous_ops; in svc_vc_create()
232 xprt->xp_ltaddr.ss_len = sizeof(xprt->xp_ltaddr); in svc_vc_create()
233 error = sosockaddr(so, (struct sockaddr *)&xprt->xp_ltaddr); in svc_vc_create()
238 xprt_register(xprt); in svc_vc_create()
243 xprt->xp_upcallset = 1; in svc_vc_create()
244 solisten_upcall_set(so, svc_vc_rendezvous_soupcall, xprt); in svc_vc_create()
247 return (xprt); in svc_vc_create()
250 sx_destroy(&xprt->xp_lock); in svc_vc_create()
251 svc_xprt_free(xprt); in svc_vc_create()
262 SVCXPRT *xprt; in svc_vc_create_conn() local
295 xprt = svc_xprt_alloc(); in svc_vc_create_conn()
296 sx_init(&xprt->xp_lock, "xprt->xp_lock"); in svc_vc_create_conn()
297 xprt->xp_pool = pool; in svc_vc_create_conn()
298 xprt->xp_socket = so; in svc_vc_create_conn()
299 xprt->xp_p1 = cd; in svc_vc_create_conn()
300 xprt->xp_p2 = NULL; in svc_vc_create_conn()
301 xprt->xp_ops = &svc_vc_ops; in svc_vc_create_conn()
307 xprt->xp_idletimeout = 6 * 60; in svc_vc_create_conn()
309 memcpy(&xprt->xp_rtaddr, raddr, raddr->sa_len); in svc_vc_create_conn()
311 xprt->xp_ltaddr.ss_len = sizeof(xprt->xp_ltaddr); in svc_vc_create_conn()
312 error = sosockaddr(so, (struct sockaddr *)&xprt->xp_ltaddr); in svc_vc_create_conn()
316 xprt_register(xprt); in svc_vc_create_conn()
319 xprt->xp_upcallset = 1; in svc_vc_create_conn()
320 soupcall_set(so, SO_RCV, svc_vc_soupcall, xprt); in svc_vc_create_conn()
327 sx_xlock(&xprt->xp_lock); in svc_vc_create_conn()
328 xprt_active(xprt); in svc_vc_create_conn()
329 sx_xunlock(&xprt->xp_lock); in svc_vc_create_conn()
331 return (xprt); in svc_vc_create_conn()
333 sx_destroy(&xprt->xp_lock); in svc_vc_create_conn()
334 svc_xprt_free(xprt); in svc_vc_create_conn()
346 SVCXPRT *xprt = NULL; in svc_vc_create_backchannel() local
352 xprt = svc_xprt_alloc(); in svc_vc_create_backchannel()
353 sx_init(&xprt->xp_lock, "xprt->xp_lock"); in svc_vc_create_backchannel()
354 xprt->xp_pool = pool; in svc_vc_create_backchannel()
355 xprt->xp_socket = NULL; in svc_vc_create_backchannel()
356 xprt->xp_p1 = cd; in svc_vc_create_backchannel()
357 xprt->xp_p2 = NULL; in svc_vc_create_backchannel()
358 xprt->xp_ops = &svc_vc_backchannel_ops; in svc_vc_create_backchannel()
359 return (xprt); in svc_vc_create_backchannel()
408 svc_vc_rendezvous_recv(SVCXPRT *xprt, struct rpc_msg *msg, in svc_vc_rendezvous_recv() argument
423 sx_xlock(&xprt->xp_lock); in svc_vc_rendezvous_recv()
425 error = svc_vc_accept(xprt->xp_socket, &so); in svc_vc_rendezvous_recv()
434 SOLISTEN_LOCK(xprt->xp_socket); in svc_vc_rendezvous_recv()
435 if (TAILQ_EMPTY(&xprt->xp_socket->sol_comp)) in svc_vc_rendezvous_recv()
436 xprt_inactive_self(xprt); in svc_vc_rendezvous_recv()
437 SOLISTEN_UNLOCK(xprt->xp_socket); in svc_vc_rendezvous_recv()
438 sx_xunlock(&xprt->xp_lock); in svc_vc_rendezvous_recv()
443 SOLISTEN_LOCK(xprt->xp_socket); in svc_vc_rendezvous_recv()
444 if (xprt->xp_upcallset) { in svc_vc_rendezvous_recv()
445 xprt->xp_upcallset = 0; in svc_vc_rendezvous_recv()
446 soupcall_clear(xprt->xp_socket, SO_RCV); in svc_vc_rendezvous_recv()
448 SOLISTEN_UNLOCK(xprt->xp_socket); in svc_vc_rendezvous_recv()
449 xprt_inactive_self(xprt); in svc_vc_rendezvous_recv()
450 sx_xunlock(&xprt->xp_lock); in svc_vc_rendezvous_recv()
454 sx_xunlock(&xprt->xp_lock); in svc_vc_rendezvous_recv()
469 new_xprt = svc_vc_create_conn(xprt->xp_pool, so, in svc_vc_rendezvous_recv()
482 svc_vc_rendezvous_stat(SVCXPRT *xprt) in svc_vc_rendezvous_stat() argument
489 svc_vc_destroy_common(SVCXPRT *xprt) in svc_vc_destroy_common() argument
493 if (xprt->xp_socket) { in svc_vc_destroy_common()
494 if ((xprt->xp_tls & (RPCTLS_FLAGS_HANDSHAKE | in svc_vc_destroy_common()
496 CURVNET_SET(xprt->xp_socket->so_vnet); in svc_vc_destroy_common()
497 if ((xprt->xp_tls & RPCTLS_FLAGS_HANDSHAKE) != 0) { in svc_vc_destroy_common()
504 rpctls_srv_disconnect(xprt->xp_socket, &reterr); in svc_vc_destroy_common()
507 sorele(xprt->xp_socket); in svc_vc_destroy_common()
510 (void)soclose(xprt->xp_socket); in svc_vc_destroy_common()
513 if (xprt->xp_netid) in svc_vc_destroy_common()
514 (void) mem_free(xprt->xp_netid, strlen(xprt->xp_netid) + 1); in svc_vc_destroy_common()
515 svc_xprt_free(xprt); in svc_vc_destroy_common()
519 svc_vc_rendezvous_destroy(SVCXPRT *xprt) in svc_vc_rendezvous_destroy() argument
522 SOLISTEN_LOCK(xprt->xp_socket); in svc_vc_rendezvous_destroy()
523 if (xprt->xp_upcallset) { in svc_vc_rendezvous_destroy()
524 xprt->xp_upcallset = 0; in svc_vc_rendezvous_destroy()
525 solisten_upcall_set(xprt->xp_socket, NULL, NULL); in svc_vc_rendezvous_destroy()
527 SOLISTEN_UNLOCK(xprt->xp_socket); in svc_vc_rendezvous_destroy()
529 svc_vc_destroy_common(xprt); in svc_vc_rendezvous_destroy()
533 svc_vc_destroy(SVCXPRT *xprt) in svc_vc_destroy() argument
535 struct cf_conn *cd = (struct cf_conn *)xprt->xp_p1; in svc_vc_destroy()
536 CLIENT *cl = (CLIENT *)xprt->xp_p2; in svc_vc_destroy()
538 SOCK_RECVBUF_LOCK(xprt->xp_socket); in svc_vc_destroy()
539 if (xprt->xp_upcallset) { in svc_vc_destroy()
540 xprt->xp_upcallset = 0; in svc_vc_destroy()
541 if (xprt->xp_socket->so_rcv.sb_upcall != NULL) in svc_vc_destroy()
542 soupcall_clear(xprt->xp_socket, SO_RCV); in svc_vc_destroy()
544 SOCK_RECVBUF_UNLOCK(xprt->xp_socket); in svc_vc_destroy()
549 svc_vc_destroy_common(xprt); in svc_vc_destroy()
559 svc_vc_backchannel_destroy(SVCXPRT *xprt) in svc_vc_backchannel_destroy() argument
561 struct cf_conn *cd = (struct cf_conn *)xprt->xp_p1; in svc_vc_backchannel_destroy()
564 svc_xprt_free(xprt); in svc_vc_backchannel_destroy()
576 svc_vc_control(SVCXPRT *xprt, const u_int rq, void *in) in svc_vc_control() argument
582 svc_vc_rendezvous_control(SVCXPRT *xprt, const u_int rq, void *in) in svc_vc_rendezvous_control() argument
589 svc_vc_backchannel_control(SVCXPRT *xprt, const u_int rq, void *in) in svc_vc_backchannel_control() argument
596 svc_vc_stat(SVCXPRT *xprt) in svc_vc_stat() argument
600 cd = (struct cf_conn *)(xprt->xp_p1); in svc_vc_stat()
608 if (soreadable(xprt->xp_socket)) in svc_vc_stat()
615 svc_vc_ack(SVCXPRT *xprt, uint32_t *ack) in svc_vc_ack() argument
618 *ack = atomic_load_acq_32(&xprt->xp_snt_cnt); in svc_vc_ack()
619 *ack -= sbused(&xprt->xp_socket->so_snd); in svc_vc_ack()
624 svc_vc_backchannel_stat(SVCXPRT *xprt) in svc_vc_backchannel_stat() argument
628 cd = (struct cf_conn *)(xprt->xp_p1); in svc_vc_backchannel_stat()
642 svc_vc_process_pending(SVCXPRT *xprt) in svc_vc_process_pending() argument
644 struct cf_conn *cd = (struct cf_conn *) xprt->xp_p1; in svc_vc_process_pending()
645 struct socket *so = xprt->xp_socket; in svc_vc_process_pending()
718 svc_vc_recv(SVCXPRT *xprt, struct rpc_msg *msg, in svc_vc_recv() argument
721 struct cf_conn *cd = (struct cf_conn *) xprt->xp_p1; in svc_vc_recv()
724 struct socket* so = xprt->xp_socket; in svc_vc_recv()
736 sx_xlock(&xprt->xp_lock); in svc_vc_recv()
742 if (!svc_vc_process_pending(xprt)) in svc_vc_recv()
757 xprt->xp_p2 != NULL) { in svc_vc_recv()
767 clnt_bck_svccall(xprt->xp_p2, in svc_vc_recv()
779 svc_vc_process_pending(xprt); in svc_vc_recv()
783 xprt_inactive_self(xprt); in svc_vc_recv()
787 sx_xunlock(&xprt->xp_lock); in svc_vc_recv()
806 if ((xprt->xp_tls & RPCTLS_FLAGS_HANDSHAKE) != 0) in svc_vc_recv()
809 if (xprt->xp_dontrcv) { in svc_vc_recv()
810 sx_xunlock(&xprt->xp_lock); in svc_vc_recv()
837 xprt_inactive_self(xprt); in svc_vc_recv()
839 sx_xunlock(&xprt->xp_lock); in svc_vc_recv()
851 if ((xprt->xp_tls & RPCTLS_FLAGS_HANDSHAKE) != 0 && in svc_vc_recv()
855 xprt->xp_dontrcv = TRUE; in svc_vc_recv()
856 sx_xunlock(&xprt->xp_lock); in svc_vc_recv()
859 sx_xlock(&xprt->xp_lock); in svc_vc_recv()
860 xprt->xp_dontrcv = FALSE; in svc_vc_recv()
869 sx_xunlock(&xprt->xp_lock); in svc_vc_recv()
870 xprt_active(xprt); /* Harmless if already active. */ in svc_vc_recv()
877 if (xprt->xp_upcallset) { in svc_vc_recv()
878 xprt->xp_upcallset = 0; in svc_vc_recv()
882 xprt_inactive_self(xprt); in svc_vc_recv()
884 sx_xunlock(&xprt->xp_lock); in svc_vc_recv()
893 xprt_inactive_self(xprt); in svc_vc_recv()
895 sx_xunlock(&xprt->xp_lock); in svc_vc_recv()
938 svc_vc_backchannel_recv(SVCXPRT *xprt, struct rpc_msg *msg, in svc_vc_backchannel_recv() argument
941 struct cf_conn *cd = (struct cf_conn *) xprt->xp_p1; in svc_vc_backchannel_recv()
946 sx_xlock(&xprt->xp_lock); in svc_vc_backchannel_recv()
947 ct = (struct ct_data *)xprt->xp_p2; in svc_vc_backchannel_recv()
949 sx_xunlock(&xprt->xp_lock); in svc_vc_backchannel_recv()
955 xprt_inactive_self(xprt); in svc_vc_backchannel_recv()
957 sx_xunlock(&xprt->xp_lock); in svc_vc_backchannel_recv()
962 sx_xunlock(&xprt->xp_lock); in svc_vc_backchannel_recv()
976 svc_vc_reply(SVCXPRT *xprt, struct rpc_msg *msg, in svc_vc_reply() argument
1017 KRPC_CURVNET_SET(xprt->xp_socket->so_vnet); in svc_vc_reply()
1018 if ((xprt->xp_tls & RPCTLS_FLAGS_HANDSHAKE) != 0) { in svc_vc_reply()
1036 atomic_add_32(&xprt->xp_snd_cnt, len); in svc_vc_reply()
1040 error = sosend(xprt->xp_socket, NULL, NULL, mrep, NULL, in svc_vc_reply()
1043 atomic_add_rel_32(&xprt->xp_snt_cnt, len); in svc_vc_reply()
1045 *seq = xprt->xp_snd_cnt; in svc_vc_reply()
1048 atomic_subtract_32(&xprt->xp_snd_cnt, len); in svc_vc_reply()
1059 svc_vc_backchannel_reply(SVCXPRT *xprt, struct rpc_msg *msg, in svc_vc_backchannel_reply() argument
1101 if ((xprt->xp_tls & RPCTLS_FLAGS_HANDSHAKE) != 0) { in svc_vc_backchannel_reply()
1113 sx_xlock(&xprt->xp_lock); in svc_vc_backchannel_reply()
1114 ct = (struct ct_data *)xprt->xp_p2; in svc_vc_backchannel_reply()
1120 sx_xunlock(&xprt->xp_lock); in svc_vc_backchannel_reply()
1143 SVCXPRT *xprt = (SVCXPRT *) arg; in svc_vc_soupcall() local
1145 if (soreadable(xprt->xp_socket)) in svc_vc_soupcall()
1146 xprt_active(xprt); in svc_vc_soupcall()
1153 SVCXPRT *xprt = (SVCXPRT *) arg; in svc_vc_rendezvous_soupcall() local
1156 xprt_active(xprt); in svc_vc_rendezvous_soupcall()