• Home
  • Raw
  • Download

Lines Matching full:rx

80 static int rxrpc_validate_address(struct rxrpc_sock *rx,  in rxrpc_validate_address()  argument
100 if (srx->transport.family != rx->family) in rxrpc_validate_address()
136 struct rxrpc_sock *rx = rxrpc_sk(sock->sk); in rxrpc_bind() local
140 _enter("%p,%p,%d", rx, saddr, len); in rxrpc_bind()
142 ret = rxrpc_validate_address(rx, srx, len); in rxrpc_bind()
146 lock_sock(&rx->sk); in rxrpc_bind()
148 switch (rx->sk.sk_state) { in rxrpc_bind()
150 rx->srx = *srx; in rxrpc_bind()
151 local = rxrpc_lookup_local(sock_net(&rx->sk), &rx->srx); in rxrpc_bind()
161 rx->local = local; in rxrpc_bind()
162 rcu_assign_pointer(local->service, rx); in rxrpc_bind()
165 rx->sk.sk_state = RXRPC_SERVER_BOUND; in rxrpc_bind()
167 rx->local = local; in rxrpc_bind()
168 rx->sk.sk_state = RXRPC_CLIENT_BOUND; in rxrpc_bind()
177 if (service_id == rx->srx.srx_service) in rxrpc_bind()
180 srx->srx_service = rx->srx.srx_service; in rxrpc_bind()
181 if (memcmp(srx, &rx->srx, sizeof(*srx)) != 0) in rxrpc_bind()
183 rx->second_service = service_id; in rxrpc_bind()
184 rx->sk.sk_state = RXRPC_SERVER_BOUND2; in rxrpc_bind()
192 release_sock(&rx->sk); in rxrpc_bind()
202 release_sock(&rx->sk); in rxrpc_bind()
214 struct rxrpc_sock *rx = rxrpc_sk(sk); in rxrpc_listen() local
218 _enter("%p,%d", rx, backlog); in rxrpc_listen()
220 lock_sock(&rx->sk); in rxrpc_listen()
222 switch (rx->sk.sk_state) { in rxrpc_listen()
228 ASSERT(rx->local != NULL); in rxrpc_listen()
237 ret = rxrpc_service_prealloc(rx, GFP_KERNEL); in rxrpc_listen()
239 rx->sk.sk_state = RXRPC_SERVER_LISTENING; in rxrpc_listen()
245 rx->sk.sk_state = RXRPC_SERVER_LISTEN_DISABLED; in rxrpc_listen()
247 rxrpc_discard_prealloc(rx); in rxrpc_listen()
257 release_sock(&rx->sk); in rxrpc_listen()
294 struct rxrpc_sock *rx = rxrpc_sk(sock->sk); in rxrpc_kernel_begin_call() local
299 ret = rxrpc_validate_address(rx, srx, sizeof(*srx)); in rxrpc_kernel_begin_call()
303 lock_sock(&rx->sk); in rxrpc_kernel_begin_call()
306 key = rx->key; in rxrpc_kernel_begin_call()
315 cp.local = rx->local; in rxrpc_kernel_begin_call()
317 cp.security_level = rx->min_sec_level; in rxrpc_kernel_begin_call()
321 call = rxrpc_new_client_call(rx, &cp, srx, &p, gfp, debug_id); in rxrpc_kernel_begin_call()
428 struct rxrpc_sock *rx = rxrpc_sk(sock->sk); in rxrpc_kernel_retry_call() local
434 key = rx->key; in rxrpc_kernel_retry_call()
439 cp.local = rx->local; in rxrpc_kernel_retry_call()
447 ret = rxrpc_prepare_call_for_retry(rx, call); in rxrpc_kernel_retry_call()
449 ret = rxrpc_retry_client_call(rx, call, &cp, srx, GFP_KERNEL); in rxrpc_kernel_retry_call()
471 struct rxrpc_sock *rx = rxrpc_sk(sock->sk); in rxrpc_kernel_new_call_notification() local
473 rx->notify_new_call = notify_new_call; in rxrpc_kernel_new_call_notification()
474 rx->discard_new_call = discard_new_call; in rxrpc_kernel_new_call_notification()
487 struct rxrpc_sock *rx = rxrpc_sk(sock->sk); in rxrpc_connect() local
490 _enter("%p,%p,%d,%d", rx, addr, addr_len, flags); in rxrpc_connect()
492 ret = rxrpc_validate_address(rx, srx, addr_len); in rxrpc_connect()
498 lock_sock(&rx->sk); in rxrpc_connect()
501 if (test_bit(RXRPC_SOCK_CONNECTED, &rx->flags)) in rxrpc_connect()
504 switch (rx->sk.sk_state) { in rxrpc_connect()
506 rx->sk.sk_state = RXRPC_CLIENT_UNBOUND; in rxrpc_connect()
515 rx->connect_srx = *srx; in rxrpc_connect()
516 set_bit(RXRPC_SOCK_CONNECTED, &rx->flags); in rxrpc_connect()
520 release_sock(&rx->sk); in rxrpc_connect()
536 struct rxrpc_sock *rx = rxrpc_sk(sock->sk); in rxrpc_sendmsg() local
539 _enter(",{%d},,%zu", rx->sk.sk_state, len); in rxrpc_sendmsg()
545 ret = rxrpc_validate_address(rx, m->msg_name, m->msg_namelen); in rxrpc_sendmsg()
552 lock_sock(&rx->sk); in rxrpc_sendmsg()
554 switch (rx->sk.sk_state) { in rxrpc_sendmsg()
557 rx->srx.srx_family = AF_RXRPC; in rxrpc_sendmsg()
558 rx->srx.srx_service = 0; in rxrpc_sendmsg()
559 rx->srx.transport_type = SOCK_DGRAM; in rxrpc_sendmsg()
560 rx->srx.transport.family = rx->family; in rxrpc_sendmsg()
561 switch (rx->family) { in rxrpc_sendmsg()
563 rx->srx.transport_len = sizeof(struct sockaddr_in); in rxrpc_sendmsg()
567 rx->srx.transport_len = sizeof(struct sockaddr_in6); in rxrpc_sendmsg()
574 local = rxrpc_lookup_local(sock_net(sock->sk), &rx->srx); in rxrpc_sendmsg()
580 rx->local = local; in rxrpc_sendmsg()
581 rx->sk.sk_state = RXRPC_CLIENT_BOUND; in rxrpc_sendmsg()
586 test_bit(RXRPC_SOCK_CONNECTED, &rx->flags)) { in rxrpc_sendmsg()
587 m->msg_name = &rx->connect_srx; in rxrpc_sendmsg()
588 m->msg_namelen = sizeof(rx->connect_srx); in rxrpc_sendmsg()
593 ret = rxrpc_do_sendmsg(rx, m, len); in rxrpc_sendmsg()
602 release_sock(&rx->sk); in rxrpc_sendmsg()
614 struct rxrpc_sock *rx = rxrpc_sk(sock->sk); in rxrpc_setsockopt() local
621 lock_sock(&rx->sk); in rxrpc_setsockopt()
631 if (rx->sk.sk_state != RXRPC_UNBOUND) in rxrpc_setsockopt()
633 rx->exclusive = true; in rxrpc_setsockopt()
638 if (rx->key) in rxrpc_setsockopt()
641 if (rx->sk.sk_state != RXRPC_UNBOUND) in rxrpc_setsockopt()
643 ret = rxrpc_request_key(rx, optval, optlen); in rxrpc_setsockopt()
648 if (rx->key) in rxrpc_setsockopt()
651 if (rx->sk.sk_state != RXRPC_UNBOUND) in rxrpc_setsockopt()
653 ret = rxrpc_server_keyring(rx, optval, optlen); in rxrpc_setsockopt()
661 if (rx->sk.sk_state != RXRPC_UNBOUND) in rxrpc_setsockopt()
670 rx->min_sec_level = min_sec_level; in rxrpc_setsockopt()
676 rx->service_upgrade.from != 0) in rxrpc_setsockopt()
679 if (rx->sk.sk_state != RXRPC_SERVER_BOUND2) in rxrpc_setsockopt()
686 if ((service_upgrade[0] != rx->srx.srx_service || in rxrpc_setsockopt()
687 service_upgrade[1] != rx->second_service) && in rxrpc_setsockopt()
688 (service_upgrade[0] != rx->second_service || in rxrpc_setsockopt()
689 service_upgrade[1] != rx->srx.srx_service)) in rxrpc_setsockopt()
691 rx->service_upgrade.from = service_upgrade[0]; in rxrpc_setsockopt()
692 rx->service_upgrade.to = service_upgrade[1]; in rxrpc_setsockopt()
703 release_sock(&rx->sk); in rxrpc_setsockopt()
742 struct rxrpc_sock *rx = rxrpc_sk(sk); in rxrpc_poll() local
748 /* the socket is readable if there are any messages waiting on the Rx in rxrpc_poll()
750 if (!list_empty(&rx->recvmsg_q)) in rxrpc_poll()
769 struct rxrpc_sock *rx; in rxrpc_create() local
796 rx = rxrpc_sk(sk); in rxrpc_create()
797 rx->family = protocol; in rxrpc_create()
798 rx->calls = RB_ROOT; in rxrpc_create()
800 spin_lock_init(&rx->incoming_lock); in rxrpc_create()
801 INIT_LIST_HEAD(&rx->sock_calls); in rxrpc_create()
802 INIT_LIST_HEAD(&rx->to_be_accepted); in rxrpc_create()
803 INIT_LIST_HEAD(&rx->recvmsg_q); in rxrpc_create()
804 rwlock_init(&rx->recvmsg_lock); in rxrpc_create()
805 rwlock_init(&rx->call_lock); in rxrpc_create()
806 memset(&rx->srx, 0, sizeof(rx->srx)); in rxrpc_create()
808 rxnet = rxrpc_net(sock_net(&rx->sk)); in rxrpc_create()
811 _leave(" = 0 [%p]", rx); in rxrpc_create()
821 struct rxrpc_sock *rx = rxrpc_sk(sk); in rxrpc_shutdown() local
842 rxrpc_discard_prealloc(rx); in rxrpc_shutdown()
872 struct rxrpc_sock *rx = rxrpc_sk(sk); in rxrpc_release_sock() local
889 rx->local->service_closed = true; in rxrpc_release_sock()
897 if (rx->local && rcu_access_pointer(rx->local->service) == rx) { in rxrpc_release_sock()
898 write_lock(&rx->local->services_lock); in rxrpc_release_sock()
899 rcu_assign_pointer(rx->local->service, NULL); in rxrpc_release_sock()
900 write_unlock(&rx->local->services_lock); in rxrpc_release_sock()
904 rxrpc_discard_prealloc(rx); in rxrpc_release_sock()
905 rxrpc_release_calls_on_socket(rx); in rxrpc_release_sock()
909 rxrpc_unuse_local(rx->local); in rxrpc_release_sock()
910 rxrpc_put_local(rx->local); in rxrpc_release_sock()
911 rx->local = NULL; in rxrpc_release_sock()
912 key_put(rx->key); in rxrpc_release_sock()
913 rx->key = NULL; in rxrpc_release_sock()
914 key_put(rx->securities); in rxrpc_release_sock()
915 rx->securities = NULL; in rxrpc_release_sock()