Lines Matching refs:conn
28 static void rxrpc_abort_calls(struct rxrpc_connection *conn, int state, in rxrpc_abort_calls() argument
34 _enter("{%d},%x", conn->debug_id, abort_code); in rxrpc_abort_calls()
36 read_lock_bh(&conn->lock); in rxrpc_abort_calls()
38 for (p = rb_first(&conn->calls); p; p = rb_next(p)) { in rxrpc_abort_calls()
53 read_unlock_bh(&conn->lock); in rxrpc_abort_calls()
60 static int rxrpc_abort_connection(struct rxrpc_connection *conn, in rxrpc_abort_connection() argument
70 _enter("%d,,%u,%u", conn->debug_id, error, abort_code); in rxrpc_abort_connection()
73 spin_lock_bh(&conn->state_lock); in rxrpc_abort_connection()
74 if (conn->state < RXRPC_CONN_REMOTELY_ABORTED) { in rxrpc_abort_connection()
75 conn->state = RXRPC_CONN_LOCALLY_ABORTED; in rxrpc_abort_connection()
76 conn->error = error; in rxrpc_abort_connection()
77 spin_unlock_bh(&conn->state_lock); in rxrpc_abort_connection()
79 spin_unlock_bh(&conn->state_lock); in rxrpc_abort_connection()
84 rxrpc_abort_calls(conn, RXRPC_CALL_LOCALLY_ABORTED, abort_code); in rxrpc_abort_connection()
86 msg.msg_name = &conn->trans->peer->srx.transport.sin; in rxrpc_abort_connection()
87 msg.msg_namelen = sizeof(conn->trans->peer->srx.transport.sin); in rxrpc_abort_connection()
92 hdr.epoch = conn->epoch; in rxrpc_abort_connection()
93 hdr.cid = conn->cid; in rxrpc_abort_connection()
97 hdr.flags = conn->out_clientflag; in rxrpc_abort_connection()
99 hdr.securityIndex = conn->security_ix; in rxrpc_abort_connection()
101 hdr.serviceId = conn->service_id; in rxrpc_abort_connection()
112 hdr.serial = htonl(atomic_inc_return(&conn->serial)); in rxrpc_abort_connection()
115 ret = kernel_sendmsg(conn->trans->local->socket, &msg, iov, 2, len); in rxrpc_abort_connection()
144 static int rxrpc_process_event(struct rxrpc_connection *conn, in rxrpc_process_event() argument
153 if (conn->state >= RXRPC_CONN_REMOTELY_ABORTED) { in rxrpc_process_event()
154 kleave(" = -ECONNABORTED [%u]", conn->state); in rxrpc_process_event()
160 _enter("{%d},{%u,%%%u},", conn->debug_id, sp->hdr.type, serial); in rxrpc_process_event()
168 conn->state = RXRPC_CONN_REMOTELY_ABORTED; in rxrpc_process_event()
169 rxrpc_abort_calls(conn, RXRPC_CALL_REMOTELY_ABORTED, in rxrpc_process_event()
174 if (conn->security) in rxrpc_process_event()
175 return conn->security->respond_to_challenge( in rxrpc_process_event()
176 conn, skb, _abort_code); in rxrpc_process_event()
180 if (!conn->security) in rxrpc_process_event()
183 ret = conn->security->verify_response(conn, skb, _abort_code); in rxrpc_process_event()
187 ret = conn->security->init_connection_security(conn); in rxrpc_process_event()
191 conn->security->prime_packet_security(conn); in rxrpc_process_event()
192 read_lock_bh(&conn->lock); in rxrpc_process_event()
193 spin_lock(&conn->state_lock); in rxrpc_process_event()
195 if (conn->state == RXRPC_CONN_SERVER_CHALLENGING) { in rxrpc_process_event()
196 conn->state = RXRPC_CONN_SERVER; in rxrpc_process_event()
198 rxrpc_call_is_secure(conn->channels[loop]); in rxrpc_process_event()
201 spin_unlock(&conn->state_lock); in rxrpc_process_event()
202 read_unlock_bh(&conn->lock); in rxrpc_process_event()
214 static void rxrpc_secure_connection(struct rxrpc_connection *conn) in rxrpc_secure_connection() argument
219 _enter("{%d}", conn->debug_id); in rxrpc_secure_connection()
221 ASSERT(conn->security_ix != 0); in rxrpc_secure_connection()
223 if (!conn->key) { in rxrpc_secure_connection()
225 ret = rxrpc_init_server_conn_security(conn); in rxrpc_secure_connection()
238 ASSERT(conn->security != NULL); in rxrpc_secure_connection()
240 if (conn->security->issue_challenge(conn) < 0) { in rxrpc_secure_connection()
251 rxrpc_abort_connection(conn, -ret, abort_code); in rxrpc_secure_connection()
260 struct rxrpc_connection *conn = in rxrpc_process_connection() local
266 _enter("{%d}", conn->debug_id); in rxrpc_process_connection()
268 atomic_inc(&conn->usage); in rxrpc_process_connection()
270 if (test_and_clear_bit(RXRPC_CONN_CHALLENGE, &conn->events)) { in rxrpc_process_connection()
271 rxrpc_secure_connection(conn); in rxrpc_process_connection()
272 rxrpc_put_connection(conn); in rxrpc_process_connection()
277 while ((skb = skb_dequeue(&conn->rx_queue))) { in rxrpc_process_connection()
278 ret = rxrpc_process_event(conn, skb, &abort_code); in rxrpc_process_connection()
288 rxrpc_put_connection(conn); in rxrpc_process_connection()
295 rxrpc_put_connection(conn); in rxrpc_process_connection()
300 skb_queue_head(&conn->rx_queue, skb); in rxrpc_process_connection()
304 if (rxrpc_abort_connection(conn, -ret, abort_code) < 0) in rxrpc_process_connection()
306 rxrpc_put_connection(conn); in rxrpc_process_connection()