Lines Matching full:rx

76 static int rxrpc_validate_address(struct rxrpc_sock *rx,  in rxrpc_validate_address()  argument
98 if (rx->family != AF_INET && in rxrpc_validate_address()
99 rx->family != AF_INET6) in rxrpc_validate_address()
108 if (rx->family != AF_INET6) in rxrpc_validate_address()
134 struct rxrpc_sock *rx = rxrpc_sk(sock->sk); in rxrpc_bind() local
138 _enter("%p,%p,%d", rx, saddr, len); in rxrpc_bind()
140 ret = rxrpc_validate_address(rx, srx, len); in rxrpc_bind()
145 lock_sock(&rx->sk); in rxrpc_bind()
147 switch (rx->sk.sk_state) { in rxrpc_bind()
149 rx->srx = *srx; in rxrpc_bind()
150 local = rxrpc_lookup_local(sock_net(&rx->sk), &rx->srx); in rxrpc_bind()
160 rx->local = local; in rxrpc_bind()
161 local->service = rx; in rxrpc_bind()
164 rx->sk.sk_state = RXRPC_SERVER_BOUND; in rxrpc_bind()
166 rx->local = local; in rxrpc_bind()
167 rx->sk.sk_state = RXRPC_CLIENT_BOUND; in rxrpc_bind()
176 if (service_id == rx->srx.srx_service) in rxrpc_bind()
179 srx->srx_service = rx->srx.srx_service; in rxrpc_bind()
180 if (memcmp(srx, &rx->srx, sizeof(*srx)) != 0) in rxrpc_bind()
182 rx->second_service = service_id; in rxrpc_bind()
183 rx->sk.sk_state = RXRPC_SERVER_BOUND2; in rxrpc_bind()
191 release_sock(&rx->sk); in rxrpc_bind()
201 release_sock(&rx->sk); in rxrpc_bind()
213 struct rxrpc_sock *rx = rxrpc_sk(sk); in rxrpc_listen() local
217 _enter("%p,%d", rx, backlog); in rxrpc_listen()
219 lock_sock(&rx->sk); in rxrpc_listen()
221 switch (rx->sk.sk_state) { in rxrpc_listen()
227 ASSERT(rx->local != NULL); in rxrpc_listen()
236 ret = rxrpc_service_prealloc(rx, GFP_KERNEL); in rxrpc_listen()
238 rx->sk.sk_state = RXRPC_SERVER_LISTENING; in rxrpc_listen()
244 rx->sk.sk_state = RXRPC_SERVER_LISTEN_DISABLED; in rxrpc_listen()
246 rxrpc_discard_prealloc(rx); in rxrpc_listen()
256 release_sock(&rx->sk); in rxrpc_listen()
273 struct rxrpc_sock *rx = rxrpc_sk(sock->sk); in rxrpc_kernel_lookup_peer() local
276 ret = rxrpc_validate_address(rx, srx, sizeof(*srx)); in rxrpc_kernel_lookup_peer()
280 return rxrpc_lookup_peer(rx->local, srx, gfp); in rxrpc_kernel_lookup_peer()
344 struct rxrpc_sock *rx = rxrpc_sk(sock->sk); in rxrpc_kernel_begin_call() local
348 if (WARN_ON_ONCE(peer->local != rx->local)) in rxrpc_kernel_begin_call()
351 lock_sock(&rx->sk); in rxrpc_kernel_begin_call()
354 key = rx->key; in rxrpc_kernel_begin_call()
366 cp.local = rx->local; in rxrpc_kernel_begin_call()
369 cp.security_level = rx->min_sec_level; in rxrpc_kernel_begin_call()
373 call = rxrpc_new_client_call(rx, &cp, &p, gfp, debug_id); in rxrpc_kernel_begin_call()
479 struct rxrpc_sock *rx = rxrpc_sk(sock->sk); in rxrpc_kernel_new_call_notification() local
481 rx->notify_new_call = notify_new_call; in rxrpc_kernel_new_call_notification()
482 rx->discard_new_call = discard_new_call; in rxrpc_kernel_new_call_notification()
520 struct rxrpc_sock *rx = rxrpc_sk(sock->sk); in rxrpc_connect() local
523 _enter("%p,%p,%d,%d", rx, addr, addr_len, flags); in rxrpc_connect()
525 ret = rxrpc_validate_address(rx, srx, addr_len); in rxrpc_connect()
531 lock_sock(&rx->sk); in rxrpc_connect()
534 if (test_bit(RXRPC_SOCK_CONNECTED, &rx->flags)) in rxrpc_connect()
537 switch (rx->sk.sk_state) { in rxrpc_connect()
539 rx->sk.sk_state = RXRPC_CLIENT_UNBOUND; in rxrpc_connect()
549 rx->connect_srx = *srx; in rxrpc_connect()
550 set_bit(RXRPC_SOCK_CONNECTED, &rx->flags); in rxrpc_connect()
554 release_sock(&rx->sk); in rxrpc_connect()
570 struct rxrpc_sock *rx = rxrpc_sk(sock->sk); in rxrpc_sendmsg() local
573 _enter(",{%d},,%zu", rx->sk.sk_state, len); in rxrpc_sendmsg()
579 ret = rxrpc_validate_address(rx, m->msg_name, m->msg_namelen); in rxrpc_sendmsg()
586 lock_sock(&rx->sk); in rxrpc_sendmsg()
588 switch (rx->sk.sk_state) { in rxrpc_sendmsg()
591 rx->srx.srx_family = AF_RXRPC; in rxrpc_sendmsg()
592 rx->srx.srx_service = 0; in rxrpc_sendmsg()
593 rx->srx.transport_type = SOCK_DGRAM; in rxrpc_sendmsg()
594 rx->srx.transport.family = rx->family; in rxrpc_sendmsg()
595 switch (rx->family) { in rxrpc_sendmsg()
597 rx->srx.transport_len = sizeof(struct sockaddr_in); in rxrpc_sendmsg()
601 rx->srx.transport_len = sizeof(struct sockaddr_in6); in rxrpc_sendmsg()
608 local = rxrpc_lookup_local(sock_net(sock->sk), &rx->srx); in rxrpc_sendmsg()
614 rx->local = local; in rxrpc_sendmsg()
615 rx->sk.sk_state = RXRPC_CLIENT_BOUND; in rxrpc_sendmsg()
620 test_bit(RXRPC_SOCK_CONNECTED, &rx->flags)) { in rxrpc_sendmsg()
621 m->msg_name = &rx->connect_srx; in rxrpc_sendmsg()
622 m->msg_namelen = sizeof(rx->connect_srx); in rxrpc_sendmsg()
627 ret = rxrpc_do_sendmsg(rx, m, len); in rxrpc_sendmsg()
636 release_sock(&rx->sk); in rxrpc_sendmsg()
661 struct rxrpc_sock *rx = rxrpc_sk(sock->sk); in rxrpc_setsockopt() local
668 lock_sock(&rx->sk); in rxrpc_setsockopt()
678 if (rx->sk.sk_state != RXRPC_UNBOUND) in rxrpc_setsockopt()
680 rx->exclusive = true; in rxrpc_setsockopt()
685 if (rx->key) in rxrpc_setsockopt()
688 if (rx->sk.sk_state != RXRPC_UNBOUND) in rxrpc_setsockopt()
690 ret = rxrpc_request_key(rx, optval, optlen); in rxrpc_setsockopt()
695 if (rx->key) in rxrpc_setsockopt()
698 if (rx->sk.sk_state != RXRPC_UNBOUND) in rxrpc_setsockopt()
700 ret = rxrpc_server_keyring(rx, optval, optlen); in rxrpc_setsockopt()
708 if (rx->sk.sk_state != RXRPC_UNBOUND) in rxrpc_setsockopt()
718 rx->min_sec_level = min_sec_level; in rxrpc_setsockopt()
724 rx->service_upgrade.from != 0) in rxrpc_setsockopt()
727 if (rx->sk.sk_state != RXRPC_SERVER_BOUND2) in rxrpc_setsockopt()
734 if ((service_upgrade[0] != rx->srx.srx_service || in rxrpc_setsockopt()
735 service_upgrade[1] != rx->second_service) && in rxrpc_setsockopt()
736 (service_upgrade[0] != rx->second_service || in rxrpc_setsockopt()
737 service_upgrade[1] != rx->srx.srx_service)) in rxrpc_setsockopt()
739 rx->service_upgrade.from = service_upgrade[0]; in rxrpc_setsockopt()
740 rx->service_upgrade.to = service_upgrade[1]; in rxrpc_setsockopt()
751 release_sock(&rx->sk); in rxrpc_setsockopt()
790 struct rxrpc_sock *rx = rxrpc_sk(sk); in rxrpc_poll() local
796 /* the socket is readable if there are any messages waiting on the Rx in rxrpc_poll()
798 if (!list_empty(&rx->recvmsg_q)) in rxrpc_poll()
817 struct rxrpc_sock *rx; in rxrpc_create() local
844 rx = rxrpc_sk(sk); in rxrpc_create()
845 rx->family = protocol; in rxrpc_create()
846 rx->calls = RB_ROOT; in rxrpc_create()
848 spin_lock_init(&rx->incoming_lock); in rxrpc_create()
849 INIT_LIST_HEAD(&rx->sock_calls); in rxrpc_create()
850 INIT_LIST_HEAD(&rx->to_be_accepted); in rxrpc_create()
851 INIT_LIST_HEAD(&rx->recvmsg_q); in rxrpc_create()
852 spin_lock_init(&rx->recvmsg_lock); in rxrpc_create()
853 rwlock_init(&rx->call_lock); in rxrpc_create()
854 memset(&rx->srx, 0, sizeof(rx->srx)); in rxrpc_create()
856 rxnet = rxrpc_net(sock_net(&rx->sk)); in rxrpc_create()
859 _leave(" = 0 [%p]", rx); in rxrpc_create()
869 struct rxrpc_sock *rx = rxrpc_sk(sk); in rxrpc_shutdown() local
888 rxrpc_discard_prealloc(rx); in rxrpc_shutdown()
918 struct rxrpc_sock *rx = rxrpc_sk(sk); in rxrpc_release_sock() local
935 rx->local->service_closed = true; in rxrpc_release_sock()
941 if (rx->local && rx->local->service == rx) { in rxrpc_release_sock()
942 write_lock(&rx->local->services_lock); in rxrpc_release_sock()
943 rx->local->service = NULL; in rxrpc_release_sock()
944 write_unlock(&rx->local->services_lock); in rxrpc_release_sock()
948 rxrpc_discard_prealloc(rx); in rxrpc_release_sock()
949 rxrpc_release_calls_on_socket(rx); in rxrpc_release_sock()
953 rxrpc_unuse_local(rx->local, rxrpc_local_unuse_release_sock); in rxrpc_release_sock()
954 rxrpc_put_local(rx->local, rxrpc_local_put_release_sock); in rxrpc_release_sock()
955 rx->local = NULL; in rxrpc_release_sock()
956 key_put(rx->key); in rxrpc_release_sock()
957 rx->key = NULL; in rxrpc_release_sock()
958 key_put(rx->securities); in rxrpc_release_sock()
959 rx->securities = NULL; in rxrpc_release_sock()