Lines Matching defs: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,
190 * xprt = svc_vc_create(sock, send_buf_size, recv_buf_size);
193 * Once *xprt is initialized, it is registered as a transporter
208 SVCXPRT *xprt;
219 xprt = svc_vc_create_conn(pool, so, (struct sockaddr *)&ss);
220 return (xprt);
224 xprt = svc_xprt_alloc();
225 sx_init(&xprt->xp_lock, "xprt->xp_lock");
226 xprt->xp_pool = pool;
227 xprt->xp_socket = so;
228 xprt->xp_p1 = NULL;
229 xprt->xp_p2 = NULL;
230 xprt->xp_ops = &svc_vc_rendezvous_ops;
232 xprt->xp_ltaddr.ss_len = sizeof(xprt->xp_ltaddr);
233 error = sosockaddr(so, (struct sockaddr *)&xprt->xp_ltaddr);
238 xprt_register(xprt);
243 xprt->xp_upcallset = 1;
244 solisten_upcall_set(so, svc_vc_rendezvous_soupcall, xprt);
247 return (xprt);
250 sx_destroy(&xprt->xp_lock);
251 svc_xprt_free(xprt);
262 SVCXPRT *xprt;
295 xprt = svc_xprt_alloc();
296 sx_init(&xprt->xp_lock, "xprt->xp_lock");
297 xprt->xp_pool = pool;
298 xprt->xp_socket = so;
299 xprt->xp_p1 = cd;
300 xprt->xp_p2 = NULL;
301 xprt->xp_ops = &svc_vc_ops;
307 xprt->xp_idletimeout = 6 * 60;
309 memcpy(&xprt->xp_rtaddr, raddr, raddr->sa_len);
311 xprt->xp_ltaddr.ss_len = sizeof(xprt->xp_ltaddr);
312 error = sosockaddr(so, (struct sockaddr *)&xprt->xp_ltaddr);
316 xprt_register(xprt);
319 xprt->xp_upcallset = 1;
320 soupcall_set(so, SO_RCV, svc_vc_soupcall, xprt);
327 sx_xlock(&xprt->xp_lock);
328 xprt_active(xprt);
329 sx_xunlock(&xprt->xp_lock);
331 return (xprt);
333 sx_destroy(&xprt->xp_lock);
334 svc_xprt_free(xprt);
346 SVCXPRT *xprt = NULL;
352 xprt = svc_xprt_alloc();
353 sx_init(&xprt->xp_lock, "xprt->xp_lock");
354 xprt->xp_pool = pool;
355 xprt->xp_socket = NULL;
356 xprt->xp_p1 = cd;
357 xprt->xp_p2 = NULL;
358 xprt->xp_ops = &svc_vc_backchannel_ops;
359 return (xprt);
408 svc_vc_rendezvous_recv(SVCXPRT *xprt, struct rpc_msg *msg,
423 sx_xlock(&xprt->xp_lock);
425 error = svc_vc_accept(xprt->xp_socket, &so);
434 SOLISTEN_LOCK(xprt->xp_socket);
435 if (TAILQ_EMPTY(&xprt->xp_socket->sol_comp))
436 xprt_inactive_self(xprt);
437 SOLISTEN_UNLOCK(xprt->xp_socket);
438 sx_xunlock(&xprt->xp_lock);
443 SOLISTEN_LOCK(xprt->xp_socket);
444 if (xprt->xp_upcallset) {
445 xprt->xp_upcallset = 0;
446 soupcall_clear(xprt->xp_socket, SO_RCV);
448 SOLISTEN_UNLOCK(xprt->xp_socket);
449 xprt_inactive_self(xprt);
450 sx_xunlock(&xprt->xp_lock);
454 sx_xunlock(&xprt->xp_lock);
469 new_xprt = svc_vc_create_conn(xprt->xp_pool, so,
482 svc_vc_rendezvous_stat(SVCXPRT *xprt)
489 svc_vc_destroy_common(SVCXPRT *xprt)
493 if (xprt->xp_socket) {
494 if ((xprt->xp_tls & (RPCTLS_FLAGS_HANDSHAKE |
496 CURVNET_SET(xprt->xp_socket->so_vnet);
497 if ((xprt->xp_tls & RPCTLS_FLAGS_HANDSHAKE) != 0) {
504 rpctls_srv_disconnect(xprt->xp_sslsec,
505 xprt->xp_sslusec, xprt->xp_sslrefno,
506 xprt->xp_sslproc, &reterr);
509 sorele(xprt->xp_socket);
512 (void)soclose(xprt->xp_socket);
515 if (xprt->xp_netid)
516 (void) mem_free(xprt->xp_netid, strlen(xprt->xp_netid) + 1);
517 svc_xprt_free(xprt);
521 svc_vc_rendezvous_destroy(SVCXPRT *xprt)
524 SOLISTEN_LOCK(xprt->xp_socket);
525 if (xprt->xp_upcallset) {
526 xprt->xp_upcallset = 0;
527 solisten_upcall_set(xprt->xp_socket, NULL, NULL);
529 SOLISTEN_UNLOCK(xprt->xp_socket);
531 svc_vc_destroy_common(xprt);
535 svc_vc_destroy(SVCXPRT *xprt)
537 struct cf_conn *cd = (struct cf_conn *)xprt->xp_p1;
538 CLIENT *cl = (CLIENT *)xprt->xp_p2;
540 SOCK_RECVBUF_LOCK(xprt->xp_socket);
541 if (xprt->xp_upcallset) {
542 xprt->xp_upcallset = 0;
543 if (xprt->xp_socket->so_rcv.sb_upcall != NULL)
544 soupcall_clear(xprt->xp_socket, SO_RCV);
546 SOCK_RECVBUF_UNLOCK(xprt->xp_socket);
551 svc_vc_destroy_common(xprt);
561 svc_vc_backchannel_destroy(SVCXPRT *xprt)
563 struct cf_conn *cd = (struct cf_conn *)xprt->xp_p1;
566 svc_xprt_free(xprt);
578 svc_vc_control(SVCXPRT *xprt, const u_int rq, void *in)
584 svc_vc_rendezvous_control(SVCXPRT *xprt, const u_int rq, void *in)
591 svc_vc_backchannel_control(SVCXPRT *xprt, const u_int rq, void *in)
598 svc_vc_stat(SVCXPRT *xprt)
602 cd = (struct cf_conn *)(xprt->xp_p1);
610 if (soreadable(xprt->xp_socket))
617 svc_vc_ack(SVCXPRT *xprt, uint32_t *ack)
620 *ack = atomic_load_acq_32(&xprt->xp_snt_cnt);
621 *ack -= sbused(&xprt->xp_socket->so_snd);
626 svc_vc_backchannel_stat(SVCXPRT *xprt)
630 cd = (struct cf_conn *)(xprt->xp_p1);
644 svc_vc_process_pending(SVCXPRT *xprt)
646 struct cf_conn *cd = (struct cf_conn *) xprt->xp_p1;
647 struct socket *so = xprt->xp_socket;
720 svc_vc_recv(SVCXPRT *xprt, struct rpc_msg *msg,
723 struct cf_conn *cd = (struct cf_conn *) xprt->xp_p1;
726 struct socket* so = xprt->xp_socket;
738 sx_xlock(&xprt->xp_lock);
744 if (!svc_vc_process_pending(xprt))
759 xprt->xp_p2 != NULL) {
769 clnt_bck_svccall(xprt->xp_p2,
781 svc_vc_process_pending(xprt);
785 xprt_inactive_self(xprt);
789 sx_xunlock(&xprt->xp_lock);
808 if ((xprt->xp_tls & RPCTLS_FLAGS_HANDSHAKE) != 0)
811 if (xprt->xp_dontrcv) {
812 sx_xunlock(&xprt->xp_lock);
839 xprt_inactive_self(xprt);
841 sx_xunlock(&xprt->xp_lock);
853 if ((xprt->xp_tls & RPCTLS_FLAGS_HANDSHAKE) != 0 &&
857 xprt->xp_dontrcv = TRUE;
858 sx_xunlock(&xprt->xp_lock);
859 ret = rpctls_srv_handlerecord(xprt->xp_sslsec,
860 xprt->xp_sslusec, xprt->xp_sslrefno,
861 xprt->xp_sslproc, &reterr);
863 sx_xlock(&xprt->xp_lock);
864 xprt->xp_dontrcv = FALSE;
873 sx_xunlock(&xprt->xp_lock);
874 xprt_active(xprt); /* Harmless if already active. */
881 if (xprt->xp_upcallset) {
882 xprt->xp_upcallset = 0;
886 xprt_inactive_self(xprt);
888 sx_xunlock(&xprt->xp_lock);
897 xprt_inactive_self(xprt);
899 sx_xunlock(&xprt->xp_lock);
942 svc_vc_backchannel_recv(SVCXPRT *xprt, struct rpc_msg *msg,
945 struct cf_conn *cd = (struct cf_conn *) xprt->xp_p1;
950 sx_xlock(&xprt->xp_lock);
951 ct = (struct ct_data *)xprt->xp_p2;
953 sx_xunlock(&xprt->xp_lock);
959 xprt_inactive_self(xprt);
961 sx_xunlock(&xprt->xp_lock);
966 sx_xunlock(&xprt->xp_lock);
980 svc_vc_reply(SVCXPRT *xprt, struct rpc_msg *msg,
1021 KRPC_CURVNET_SET(xprt->xp_socket->so_vnet);
1022 if ((xprt->xp_tls & RPCTLS_FLAGS_HANDSHAKE) != 0) {
1040 atomic_add_32(&xprt->xp_snd_cnt, len);
1044 error = sosend(xprt->xp_socket, NULL, NULL, mrep, NULL,
1047 atomic_add_rel_32(&xprt->xp_snt_cnt, len);
1049 *seq = xprt->xp_snd_cnt;
1052 atomic_subtract_32(&xprt->xp_snd_cnt, len);
1063 svc_vc_backchannel_reply(SVCXPRT *xprt, struct rpc_msg *msg,
1105 if ((xprt->xp_tls & RPCTLS_FLAGS_HANDSHAKE) != 0) {
1117 sx_xlock(&xprt->xp_lock);
1118 ct = (struct ct_data *)xprt->xp_p2;
1124 sx_xunlock(&xprt->xp_lock);
1147 SVCXPRT *xprt = (SVCXPRT *) arg;
1149 if (soreadable(xprt->xp_socket))
1150 xprt_active(xprt);
1157 SVCXPRT *xprt = (SVCXPRT *) arg;
1160 xprt_active(xprt);