Lines Matching refs:conn

22 static bool rxrpc_set_conn_aborted(struct rxrpc_connection *conn, struct sk_buff *skb,
28 if (conn->state != RXRPC_CONN_ABORTED) {
29 spin_lock(&conn->state_lock);
30 if (conn->state != RXRPC_CONN_ABORTED) {
31 conn->abort_code = abort_code;
32 conn->error = err;
33 conn->completion = compl;
35 smp_store_release(&conn->state, RXRPC_CONN_ABORTED);
36 set_bit(RXRPC_CONN_DONT_REUSE, &conn->flags);
37 set_bit(RXRPC_CONN_EV_ABORT_CALLS, &conn->events);
40 spin_unlock(&conn->state_lock);
49 int rxrpc_abort_conn(struct rxrpc_connection *conn, struct sk_buff *skb,
54 if (rxrpc_set_conn_aborted(conn, skb, abort_code, err,
58 rxrpc_poke_conn(conn, rxrpc_conn_get_poke_abort);
66 static bool rxrpc_input_conn_abort(struct rxrpc_connection *conn,
69 return rxrpc_set_conn_aborted(conn, skb, skb->priority, -ECONNABORTED,
76 void rxrpc_conn_retransmit_call(struct rxrpc_connection *conn,
96 _enter("%d", conn->debug_id);
106 chan = &conn->channels[channel];
115 msg.msg_name = &conn->peer->srx.transport;
116 msg.msg_namelen = conn->peer->srx.transport_len;
128 serial = rxrpc_get_next_serial(conn);
130 pkt.whdr.epoch = htonl(conn->proto.epoch);
131 pkt.whdr.cid = htonl(conn->proto.cid | channel);
136 pkt.whdr.flags = conn->out_clientflag;
138 pkt.whdr.securityIndex = conn->security_ix;
140 pkt.whdr.serviceId = htons(conn->service_id);
152 mtu = conn->peer->if_mtu;
153 mtu -= conn->peer->hdrsize;
181 ret = kernel_sendmsg(conn->local->socket, &msg, iov, ioc, len);
182 conn->peer->last_tx_at = ktime_get_seconds();
196 static void rxrpc_abort_calls(struct rxrpc_connection *conn)
201 _enter("{%d},%x", conn->debug_id, conn->abort_code);
204 call = conn->channels[i].call;
207 conn->completion,
208 conn->abort_code,
209 conn->error);
230 static int rxrpc_process_event(struct rxrpc_connection *conn,
236 if (conn->state == RXRPC_CONN_ABORTED)
239 _enter("{%d},{%u,%%%u},", conn->debug_id, sp->hdr.type, sp->hdr.serial);
243 return conn->security->respond_to_challenge(conn, skb);
246 ret = conn->security->verify_response(conn, skb);
250 ret = conn->security->init_connection_security(
251 conn, conn->key->payload.data[0]);
255 spin_lock(&conn->state_lock);
256 if (conn->state == RXRPC_CONN_SERVICE_CHALLENGING)
257 conn->state = RXRPC_CONN_SERVICE;
258 spin_unlock(&conn->state_lock);
260 if (conn->state == RXRPC_CONN_SERVICE) {
267 skb_queue_head(&conn->local->rx_queue, skb);
268 rxrpc_wake_up_io_thread(conn->local);
281 static void rxrpc_secure_connection(struct rxrpc_connection *conn)
283 if (conn->security->issue_challenge(conn) < 0)
284 rxrpc_abort_conn(conn, NULL, RX_CALL_DEAD, -ENOMEM,
291 void rxrpc_process_delayed_final_acks(struct rxrpc_connection *conn, bool force)
301 struct rxrpc_channel *chan = &conn->channels[channel];
304 if (!test_bit(RXRPC_CONN_FINAL_ACK_0 + channel, &conn->flags))
317 &conn->flags))
318 rxrpc_conn_retransmit_call(conn, NULL, channel);
325 rxrpc_reduce_conn_timer(conn, next_j);
331 static void rxrpc_do_process_connection(struct rxrpc_connection *conn)
336 if (test_and_clear_bit(RXRPC_CONN_EV_CHALLENGE, &conn->events))
337 rxrpc_secure_connection(conn);
339 /* go through the conn-level event packets, releasing the ref on this
341 while ((skb = skb_dequeue(&conn->rx_queue))) {
343 ret = rxrpc_process_event(conn, skb);
347 skb_queue_head(&conn->rx_queue, skb);
348 rxrpc_queue_conn(conn, rxrpc_conn_queue_retry_work);
359 struct rxrpc_connection *conn =
362 rxrpc_see_connection(conn, rxrpc_conn_see_work);
364 if (__rxrpc_use_local(conn->local, rxrpc_local_use_conn_work)) {
365 rxrpc_do_process_connection(conn);
366 rxrpc_unuse_local(conn->local, rxrpc_local_unuse_conn_work);
375 static void rxrpc_post_packet_to_conn(struct rxrpc_connection *conn,
378 _enter("%p,%p", conn, skb);
381 skb_queue_tail(&conn->rx_queue, skb);
382 rxrpc_queue_conn(conn, rxrpc_conn_queue_rx_work);
388 bool rxrpc_input_conn_packet(struct rxrpc_connection *conn, struct sk_buff *skb)
398 if (rxrpc_is_conn_aborted(conn))
400 rxrpc_input_conn_abort(conn, skb);
401 rxrpc_abort_calls(conn);
406 if (rxrpc_is_conn_aborted(conn)) {
407 if (conn->completion == RXRPC_CALL_LOCALLY_ABORTED)
408 rxrpc_send_conn_abort(conn);
411 rxrpc_post_packet_to_conn(conn, skb);
423 void rxrpc_input_conn_event(struct rxrpc_connection *conn, struct sk_buff *skb)
427 if (test_and_clear_bit(RXRPC_CONN_EV_ABORT_CALLS, &conn->events))
428 rxrpc_abort_calls(conn);
432 if (conn->state != RXRPC_CONN_SERVICE)
436 rxrpc_call_is_secure(conn->channels[loop].call);
441 if (conn->flags & RXRPC_CONN_FINAL_ACK_MASK)
442 rxrpc_process_delayed_final_acks(conn, false);