Lines Matching refs:rx

80 static int rxrpc_validate_address(struct rxrpc_sock *rx,  in rxrpc_validate_address()  argument
98 if (srx->transport.family != rx->proto) in rxrpc_validate_address()
127 struct rxrpc_sock *rx = rxrpc_sk(sk), *prx; in rxrpc_bind() local
131 _enter("%p,%p,%d", rx, saddr, len); in rxrpc_bind()
133 ret = rxrpc_validate_address(rx, srx, len); in rxrpc_bind()
137 lock_sock(&rx->sk); in rxrpc_bind()
139 if (rx->sk.sk_state != RXRPC_UNCONNECTED) { in rxrpc_bind()
144 memcpy(&rx->srx, srx, sizeof(rx->srx)); in rxrpc_bind()
147 local = rxrpc_lookup_local(&rx->srx); in rxrpc_bind()
153 rx->local = local; in rxrpc_bind()
162 rx->service_id = service_id; in rxrpc_bind()
163 list_add_tail(&rx->listen_link, &local->services); in rxrpc_bind()
166 rx->sk.sk_state = RXRPC_SERVER_BOUND; in rxrpc_bind()
168 rx->sk.sk_state = RXRPC_CLIENT_BOUND; in rxrpc_bind()
171 release_sock(&rx->sk); in rxrpc_bind()
179 release_sock(&rx->sk); in rxrpc_bind()
191 struct rxrpc_sock *rx = rxrpc_sk(sk); in rxrpc_listen() local
194 _enter("%p,%d", rx, backlog); in rxrpc_listen()
196 lock_sock(&rx->sk); in rxrpc_listen()
198 switch (rx->sk.sk_state) { in rxrpc_listen()
208 ASSERT(rx->local != NULL); in rxrpc_listen()
210 rx->sk.sk_state = RXRPC_SERVER_LISTENING; in rxrpc_listen()
215 release_sock(&rx->sk); in rxrpc_listen()
230 struct rxrpc_sock *rx = rxrpc_sk(sock->sk); in rxrpc_name_to_transport() local
233 _enter("%p,%p,%d,%d", rx, addr, addr_len, flags); in rxrpc_name_to_transport()
235 ASSERT(rx->local != NULL); in rxrpc_name_to_transport()
236 ASSERT(rx->sk.sk_state > RXRPC_UNCONNECTED); in rxrpc_name_to_transport()
238 if (rx->srx.transport_type != srx->transport_type) in rxrpc_name_to_transport()
240 if (rx->srx.transport.family != srx->transport.family) in rxrpc_name_to_transport()
249 trans = rxrpc_get_transport(rx->local, peer, gfp); in rxrpc_name_to_transport()
278 struct rxrpc_sock *rx = rxrpc_sk(sock->sk); in rxrpc_kernel_begin_call() local
283 lock_sock(&rx->sk); in rxrpc_kernel_begin_call()
294 trans = rx->trans; in rxrpc_kernel_begin_call()
302 service_id = rx->service_id; in rxrpc_kernel_begin_call()
307 key = rx->key; in rxrpc_kernel_begin_call()
311 bundle = rxrpc_get_bundle(rx, trans, key, service_id, gfp); in rxrpc_kernel_begin_call()
317 call = rxrpc_get_client_call(rx, trans, bundle, user_call_ID, true, in rxrpc_kernel_begin_call()
323 release_sock(&rx->sk); in rxrpc_kernel_begin_call()
360 struct rxrpc_sock *rx = rxrpc_sk(sock->sk); in rxrpc_kernel_intercept_rx_messages() local
363 rx->interceptor = interceptor; in rxrpc_kernel_intercept_rx_messages()
380 struct rxrpc_sock *rx = rxrpc_sk(sk); in rxrpc_connect() local
383 _enter("%p,%p,%d,%d", rx, addr, addr_len, flags); in rxrpc_connect()
385 ret = rxrpc_validate_address(rx, srx, addr_len); in rxrpc_connect()
391 lock_sock(&rx->sk); in rxrpc_connect()
393 switch (rx->sk.sk_state) { in rxrpc_connect()
396 ASSERTCMP(rx->local, ==, NULL); in rxrpc_connect()
397 rx->srx.srx_family = AF_RXRPC; in rxrpc_connect()
398 rx->srx.srx_service = 0; in rxrpc_connect()
399 rx->srx.transport_type = srx->transport_type; in rxrpc_connect()
400 rx->srx.transport_len = sizeof(sa_family_t); in rxrpc_connect()
401 rx->srx.transport.family = srx->transport.family; in rxrpc_connect()
402 local = rxrpc_lookup_local(&rx->srx); in rxrpc_connect()
404 release_sock(&rx->sk); in rxrpc_connect()
407 rx->local = local; in rxrpc_connect()
408 rx->sk.sk_state = RXRPC_CLIENT_BOUND; in rxrpc_connect()
412 release_sock(&rx->sk); in rxrpc_connect()
415 release_sock(&rx->sk); in rxrpc_connect()
422 release_sock(&rx->sk); in rxrpc_connect()
427 rx->trans = trans; in rxrpc_connect()
428 rx->service_id = htons(srx->srx_service); in rxrpc_connect()
429 rx->sk.sk_state = RXRPC_CLIENT_CONNECTED; in rxrpc_connect()
431 release_sock(&rx->sk); in rxrpc_connect()
447 struct rxrpc_sock *rx = rxrpc_sk(sock->sk); in rxrpc_sendmsg() local
450 _enter(",{%d},,%zu", rx->sk.sk_state, len); in rxrpc_sendmsg()
456 ret = rxrpc_validate_address(rx, m->msg_name, m->msg_namelen); in rxrpc_sendmsg()
464 lock_sock(&rx->sk); in rxrpc_sendmsg()
476 trans = rx->trans; in rxrpc_sendmsg()
481 switch (rx->sk.sk_state) { in rxrpc_sendmsg()
484 ret = rxrpc_server_sendmsg(rx, m, len); in rxrpc_sendmsg()
494 ret = rxrpc_client_sendmsg(rx, trans, m, len); in rxrpc_sendmsg()
502 release_sock(&rx->sk); in rxrpc_sendmsg()
515 struct rxrpc_sock *rx = rxrpc_sk(sock->sk); in rxrpc_setsockopt() local
521 lock_sock(&rx->sk); in rxrpc_setsockopt()
531 if (rx->sk.sk_state != RXRPC_UNCONNECTED) in rxrpc_setsockopt()
533 set_bit(RXRPC_SOCK_EXCLUSIVE_CONN, &rx->flags); in rxrpc_setsockopt()
538 if (rx->key) in rxrpc_setsockopt()
541 if (rx->sk.sk_state != RXRPC_UNCONNECTED) in rxrpc_setsockopt()
543 ret = rxrpc_request_key(rx, optval, optlen); in rxrpc_setsockopt()
548 if (rx->key) in rxrpc_setsockopt()
551 if (rx->sk.sk_state != RXRPC_UNCONNECTED) in rxrpc_setsockopt()
553 ret = rxrpc_server_keyring(rx, optval, optlen); in rxrpc_setsockopt()
561 if (rx->sk.sk_state != RXRPC_UNCONNECTED) in rxrpc_setsockopt()
570 rx->min_sec_level = min_sec_level; in rxrpc_setsockopt()
581 release_sock(&rx->sk); in rxrpc_setsockopt()
617 struct rxrpc_sock *rx; in rxrpc_create() local
645 rx = rxrpc_sk(sk); in rxrpc_create()
646 rx->proto = protocol; in rxrpc_create()
647 rx->calls = RB_ROOT; in rxrpc_create()
649 INIT_LIST_HEAD(&rx->listen_link); in rxrpc_create()
650 INIT_LIST_HEAD(&rx->secureq); in rxrpc_create()
651 INIT_LIST_HEAD(&rx->acceptq); in rxrpc_create()
652 rwlock_init(&rx->call_lock); in rxrpc_create()
653 memset(&rx->srx, 0, sizeof(rx->srx)); in rxrpc_create()
655 _leave(" = 0 [%p]", rx); in rxrpc_create()
683 struct rxrpc_sock *rx = rxrpc_sk(sk); in rxrpc_release_sock() local
695 ASSERTCMP(rx->listen_link.next, !=, LIST_POISON1); in rxrpc_release_sock()
697 if (!list_empty(&rx->listen_link)) { in rxrpc_release_sock()
698 write_lock_bh(&rx->local->services_lock); in rxrpc_release_sock()
699 list_del(&rx->listen_link); in rxrpc_release_sock()
700 write_unlock_bh(&rx->local->services_lock); in rxrpc_release_sock()
704 rxrpc_release_calls_on_socket(rx); in rxrpc_release_sock()
708 if (rx->conn) { in rxrpc_release_sock()
709 rxrpc_put_connection(rx->conn); in rxrpc_release_sock()
710 rx->conn = NULL; in rxrpc_release_sock()
713 if (rx->bundle) { in rxrpc_release_sock()
714 rxrpc_put_bundle(rx->trans, rx->bundle); in rxrpc_release_sock()
715 rx->bundle = NULL; in rxrpc_release_sock()
717 if (rx->trans) { in rxrpc_release_sock()
718 rxrpc_put_transport(rx->trans); in rxrpc_release_sock()
719 rx->trans = NULL; in rxrpc_release_sock()
721 if (rx->local) { in rxrpc_release_sock()
722 rxrpc_put_local(rx->local); in rxrpc_release_sock()
723 rx->local = NULL; in rxrpc_release_sock()
726 key_put(rx->key); in rxrpc_release_sock()
727 rx->key = NULL; in rxrpc_release_sock()
728 key_put(rx->securities); in rxrpc_release_sock()
729 rx->securities = NULL; in rxrpc_release_sock()