Lines Matching full:conn
22 static bool rxrpc_set_conn_aborted(struct rxrpc_connection *conn, struct sk_buff *skb, in rxrpc_set_conn_aborted() argument
28 if (conn->state != RXRPC_CONN_ABORTED) { in rxrpc_set_conn_aborted()
29 spin_lock(&conn->state_lock); in rxrpc_set_conn_aborted()
30 if (conn->state != RXRPC_CONN_ABORTED) { in rxrpc_set_conn_aborted()
31 conn->abort_code = abort_code; in rxrpc_set_conn_aborted()
32 conn->error = err; in rxrpc_set_conn_aborted()
33 conn->completion = compl; in rxrpc_set_conn_aborted()
35 smp_store_release(&conn->state, RXRPC_CONN_ABORTED); in rxrpc_set_conn_aborted()
36 set_bit(RXRPC_CONN_DONT_REUSE, &conn->flags); in rxrpc_set_conn_aborted()
37 set_bit(RXRPC_CONN_EV_ABORT_CALLS, &conn->events); in rxrpc_set_conn_aborted()
40 spin_unlock(&conn->state_lock); in rxrpc_set_conn_aborted()
49 int rxrpc_abort_conn(struct rxrpc_connection *conn, struct sk_buff *skb, in rxrpc_abort_conn() argument
54 if (rxrpc_set_conn_aborted(conn, skb, abort_code, err, in rxrpc_abort_conn()
58 rxrpc_poke_conn(conn, rxrpc_conn_get_poke_abort); in rxrpc_abort_conn()
66 static void rxrpc_input_conn_abort(struct rxrpc_connection *conn, in rxrpc_input_conn_abort() argument
69 trace_rxrpc_rx_conn_abort(conn, skb); in rxrpc_input_conn_abort()
70 rxrpc_set_conn_aborted(conn, skb, skb->priority, -ECONNABORTED, in rxrpc_input_conn_abort()
77 void rxrpc_conn_retransmit_call(struct rxrpc_connection *conn, in rxrpc_conn_retransmit_call() argument
97 _enter("%d", conn->debug_id); in rxrpc_conn_retransmit_call()
107 chan = &conn->channels[channel]; in rxrpc_conn_retransmit_call()
116 msg.msg_name = &conn->peer->srx.transport; in rxrpc_conn_retransmit_call()
117 msg.msg_namelen = conn->peer->srx.transport_len; in rxrpc_conn_retransmit_call()
129 serial = rxrpc_get_next_serial(conn); in rxrpc_conn_retransmit_call()
131 pkt.whdr.epoch = htonl(conn->proto.epoch); in rxrpc_conn_retransmit_call()
132 pkt.whdr.cid = htonl(conn->proto.cid | channel); in rxrpc_conn_retransmit_call()
137 pkt.whdr.flags = conn->out_clientflag; in rxrpc_conn_retransmit_call()
139 pkt.whdr.securityIndex = conn->security_ix; in rxrpc_conn_retransmit_call()
141 pkt.whdr.serviceId = htons(conn->service_id); in rxrpc_conn_retransmit_call()
153 mtu = conn->peer->if_mtu; in rxrpc_conn_retransmit_call()
154 mtu -= conn->peer->hdrsize; in rxrpc_conn_retransmit_call()
182 ret = kernel_sendmsg(conn->local->socket, &msg, iov, ioc, len); in rxrpc_conn_retransmit_call()
183 conn->peer->last_tx_at = ktime_get_seconds(); in rxrpc_conn_retransmit_call()
197 static void rxrpc_abort_calls(struct rxrpc_connection *conn) in rxrpc_abort_calls() argument
202 _enter("{%d},%x", conn->debug_id, conn->abort_code); in rxrpc_abort_calls()
205 call = conn->channels[i].call; in rxrpc_abort_calls()
209 conn->completion, in rxrpc_abort_calls()
210 conn->abort_code, in rxrpc_abort_calls()
211 conn->error); in rxrpc_abort_calls()
232 static int rxrpc_process_event(struct rxrpc_connection *conn, in rxrpc_process_event() argument
238 if (conn->state == RXRPC_CONN_ABORTED) in rxrpc_process_event()
241 _enter("{%d},{%u,%%%u},", conn->debug_id, sp->hdr.type, sp->hdr.serial); in rxrpc_process_event()
245 return conn->security->respond_to_challenge(conn, skb); in rxrpc_process_event()
248 ret = conn->security->verify_response(conn, skb); in rxrpc_process_event()
252 ret = conn->security->init_connection_security( in rxrpc_process_event()
253 conn, conn->key->payload.data[0]); in rxrpc_process_event()
257 spin_lock(&conn->state_lock); in rxrpc_process_event()
258 if (conn->state == RXRPC_CONN_SERVICE_CHALLENGING) in rxrpc_process_event()
259 conn->state = RXRPC_CONN_SERVICE; in rxrpc_process_event()
260 spin_unlock(&conn->state_lock); in rxrpc_process_event()
262 if (conn->state == RXRPC_CONN_SERVICE) { in rxrpc_process_event()
267 sp->conn = rxrpc_get_connection(conn, rxrpc_conn_get_poke_secured); in rxrpc_process_event()
270 skb_queue_head(&conn->local->rx_queue, skb); in rxrpc_process_event()
271 rxrpc_wake_up_io_thread(conn->local); in rxrpc_process_event()
284 static void rxrpc_secure_connection(struct rxrpc_connection *conn) in rxrpc_secure_connection() argument
286 if (conn->security->issue_challenge(conn) < 0) in rxrpc_secure_connection()
287 rxrpc_abort_conn(conn, NULL, RX_CALL_DEAD, -ENOMEM, in rxrpc_secure_connection()
294 void rxrpc_process_delayed_final_acks(struct rxrpc_connection *conn, bool force) in rxrpc_process_delayed_final_acks() argument
304 struct rxrpc_channel *chan = &conn->channels[channel]; in rxrpc_process_delayed_final_acks()
307 if (!test_bit(RXRPC_CONN_FINAL_ACK_0 + channel, &conn->flags)) in rxrpc_process_delayed_final_acks()
320 &conn->flags)) in rxrpc_process_delayed_final_acks()
321 rxrpc_conn_retransmit_call(conn, NULL, channel); in rxrpc_process_delayed_final_acks()
328 rxrpc_reduce_conn_timer(conn, next_j); in rxrpc_process_delayed_final_acks()
334 static void rxrpc_do_process_connection(struct rxrpc_connection *conn) in rxrpc_do_process_connection() argument
339 if (test_and_clear_bit(RXRPC_CONN_EV_CHALLENGE, &conn->events)) in rxrpc_do_process_connection()
340 rxrpc_secure_connection(conn); in rxrpc_do_process_connection()
342 /* go through the conn-level event packets, releasing the ref on this in rxrpc_do_process_connection()
344 while ((skb = skb_dequeue(&conn->rx_queue))) { in rxrpc_do_process_connection()
346 ret = rxrpc_process_event(conn, skb); in rxrpc_do_process_connection()
350 skb_queue_head(&conn->rx_queue, skb); in rxrpc_do_process_connection()
351 rxrpc_queue_conn(conn, rxrpc_conn_queue_retry_work); in rxrpc_do_process_connection()
362 struct rxrpc_connection *conn = in rxrpc_process_connection() local
365 rxrpc_see_connection(conn, rxrpc_conn_see_work); in rxrpc_process_connection()
367 if (__rxrpc_use_local(conn->local, rxrpc_local_use_conn_work)) { in rxrpc_process_connection()
368 rxrpc_do_process_connection(conn); in rxrpc_process_connection()
369 rxrpc_unuse_local(conn->local, rxrpc_local_unuse_conn_work); in rxrpc_process_connection()
378 static void rxrpc_post_packet_to_conn(struct rxrpc_connection *conn, in rxrpc_post_packet_to_conn() argument
381 _enter("%p,%p", conn, skb); in rxrpc_post_packet_to_conn()
384 skb_queue_tail(&conn->rx_queue, skb); in rxrpc_post_packet_to_conn()
385 rxrpc_queue_conn(conn, rxrpc_conn_queue_rx_work); in rxrpc_post_packet_to_conn()
391 bool rxrpc_input_conn_packet(struct rxrpc_connection *conn, struct sk_buff *skb) in rxrpc_input_conn_packet() argument
401 if (rxrpc_is_conn_aborted(conn)) in rxrpc_input_conn_packet()
403 rxrpc_input_conn_abort(conn, skb); in rxrpc_input_conn_packet()
404 rxrpc_abort_calls(conn); in rxrpc_input_conn_packet()
409 if (rxrpc_is_conn_aborted(conn)) { in rxrpc_input_conn_packet()
410 if (conn->completion == RXRPC_CALL_LOCALLY_ABORTED) in rxrpc_input_conn_packet()
411 rxrpc_send_conn_abort(conn); in rxrpc_input_conn_packet()
414 rxrpc_post_packet_to_conn(conn, skb); in rxrpc_input_conn_packet()
426 void rxrpc_input_conn_event(struct rxrpc_connection *conn, struct sk_buff *skb) in rxrpc_input_conn_event() argument
430 if (test_and_clear_bit(RXRPC_CONN_EV_ABORT_CALLS, &conn->events)) in rxrpc_input_conn_event()
431 rxrpc_abort_calls(conn); in rxrpc_input_conn_event()
436 if (conn->state != RXRPC_CONN_SERVICE) in rxrpc_input_conn_event()
440 rxrpc_call_is_secure(conn->channels[loop].call); in rxrpc_input_conn_event()
446 if (conn->flags & RXRPC_CONN_FINAL_ACK_MASK) in rxrpc_input_conn_event()
447 rxrpc_process_delayed_final_acks(conn, false); in rxrpc_input_conn_event()