1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /* RxRPC packet transmission
4 * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved.
5 * Written by David Howells (dhowells@redhat.com)
8 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
10 #include <linux/net.h>
11 #include <linux/gfp.h>
12 #include <linux/skbuff.h>
13 #include <linux/export.h>
15 #include <net/af_rxrpc.h>
17 #include "ar-internal.h"
19 extern int udpv6_sendmsg(struct sock
*sk
, struct msghdr
*msg
, size_t len
);
21 static ssize_t
do_udp_sendmsg(struct socket
*socket
, struct msghdr
*msg
, size_t len
)
23 struct sockaddr
*sa
= msg
->msg_name
;
24 struct sock
*sk
= socket
->sk
;
26 if (IS_ENABLED(CONFIG_AF_RXRPC_IPV6
)) {
27 if (sa
->sa_family
== AF_INET6
) {
28 if (sk
->sk_family
!= AF_INET6
) {
29 pr_warn("AF_INET6 address on AF_INET socket\n");
32 return udpv6_sendmsg(sk
, msg
, len
);
35 return udp_sendmsg(sk
, msg
, len
);
38 struct rxrpc_abort_buffer
{
39 struct rxrpc_wire_header whdr
;
43 static const char rxrpc_keepalive_string
[] = "";
46 * Increase Tx backoff on transmission failure and clear it on success.
48 static void rxrpc_tx_backoff(struct rxrpc_call
*call
, int ret
)
51 if (call
->tx_backoff
< 1000)
52 call
->tx_backoff
+= 100;
59 * Arrange for a keepalive ping a certain time after we last transmitted. This
60 * lets the far side know we're still interested in this call and helps keep
61 * the route through any intervening firewall open.
63 * Receiving a response to the ping will prevent the ->expect_rx_by timer from
66 static void rxrpc_set_keepalive(struct rxrpc_call
*call
, ktime_t now
)
68 ktime_t delay
= ms_to_ktime(READ_ONCE(call
->next_rx_timo
) / 6);
70 call
->keepalive_at
= ktime_add(ktime_get_real(), delay
);
71 trace_rxrpc_timer_set(call
, delay
, rxrpc_timer_trace_keepalive
);
75 * Fill out an ACK packet.
77 static void rxrpc_fill_out_ack(struct rxrpc_call
*call
,
78 struct rxrpc_txbuf
*txb
,
80 rxrpc_serial_t serial
)
82 struct rxrpc_wire_header
*whdr
= txb
->kvec
[0].iov_base
;
83 struct rxrpc_acktrailer
*trailer
= txb
->kvec
[2].iov_base
+ 3;
84 struct rxrpc_ackpacket
*ack
= (struct rxrpc_ackpacket
*)(whdr
+ 1);
85 unsigned int qsize
, sack
, wrap
, to
;
86 rxrpc_seq_t window
, wtop
;
89 u8
*filler
= txb
->kvec
[2].iov_base
;
90 u8
*sackp
= txb
->kvec
[1].iov_base
;
92 rxrpc_inc_stat(call
->rxnet
, stat_tx_ack_fill
);
94 window
= call
->ackr_window
;
95 wtop
= call
->ackr_wtop
;
96 sack
= call
->ackr_sack_base
% RXRPC_SACK_SIZE
;
99 whdr
->type
= RXRPC_PACKET_TYPE_ACK
;
100 txb
->flags
|= RXRPC_SLOW_START_OK
;
101 ack
->bufferSpace
= 0;
103 ack
->firstPacket
= htonl(window
);
104 ack
->previousPacket
= htonl(call
->rx_highest_seq
);
105 ack
->serial
= htonl(serial
);
106 ack
->reason
= ack_reason
;
107 ack
->nAcks
= wtop
- window
;
112 if (ack_reason
== RXRPC_ACK_PING
)
113 txb
->flags
|= RXRPC_REQUEST_ACK
;
115 if (after(wtop
, window
)) {
116 txb
->len
+= ack
->nAcks
;
117 txb
->kvec
[1].iov_base
= sackp
;
118 txb
->kvec
[1].iov_len
= ack
->nAcks
;
120 wrap
= RXRPC_SACK_SIZE
- sack
;
121 to
= min_t(unsigned int, ack
->nAcks
, RXRPC_SACK_SIZE
);
123 if (sack
+ ack
->nAcks
<= RXRPC_SACK_SIZE
) {
124 memcpy(sackp
, call
->ackr_sack_table
+ sack
, ack
->nAcks
);
126 memcpy(sackp
, call
->ackr_sack_table
+ sack
, wrap
);
127 memcpy(sackp
+ wrap
, call
->ackr_sack_table
, to
- wrap
);
129 } else if (before(wtop
, window
)) {
130 pr_warn("ack window backward %x %x", window
, wtop
);
131 } else if (ack
->reason
== RXRPC_ACK_DELAY
) {
132 ack
->reason
= RXRPC_ACK_IDLE
;
135 mtu
= call
->peer
->if_mtu
;
136 mtu
-= call
->peer
->hdrsize
;
137 jmax
= rxrpc_rx_jumbo_max
;
138 qsize
= (window
- 1) - call
->rx_consumed
;
139 rsize
= max_t(int, call
->rx_winsize
- qsize
, 0);
140 txb
->ack_rwind
= rsize
;
141 trailer
->maxMTU
= htonl(rxrpc_rx_mtu
);
142 trailer
->ifMTU
= htonl(mtu
);
143 trailer
->rwind
= htonl(rsize
);
144 trailer
->jumbo_max
= htonl(jmax
);
148 * Record the beginning of an RTT probe.
150 static void rxrpc_begin_rtt_probe(struct rxrpc_call
*call
, rxrpc_serial_t serial
,
151 ktime_t now
, enum rxrpc_rtt_tx_trace why
)
153 unsigned long avail
= call
->rtt_avail
;
156 if (!(avail
& RXRPC_CALL_RTT_AVAIL_MASK
))
159 rtt_slot
= __ffs(avail
& RXRPC_CALL_RTT_AVAIL_MASK
);
160 if (!test_and_clear_bit(rtt_slot
, &call
->rtt_avail
))
163 call
->rtt_serial
[rtt_slot
] = serial
;
164 call
->rtt_sent_at
[rtt_slot
] = now
;
165 smp_wmb(); /* Write data before avail bit */
166 set_bit(rtt_slot
+ RXRPC_CALL_RTT_PEND_SHIFT
, &call
->rtt_avail
);
168 trace_rxrpc_rtt_tx(call
, why
, rtt_slot
, serial
);
172 trace_rxrpc_rtt_tx(call
, rxrpc_rtt_tx_no_slot
, rtt_slot
, serial
);
176 * Transmit an ACK packet.
178 static void rxrpc_send_ack_packet(struct rxrpc_call
*call
, struct rxrpc_txbuf
*txb
)
180 struct rxrpc_wire_header
*whdr
= txb
->kvec
[0].iov_base
;
181 struct rxrpc_connection
*conn
;
182 struct rxrpc_ackpacket
*ack
= (struct rxrpc_ackpacket
*)(whdr
+ 1);
187 if (test_bit(RXRPC_CALL_DISCONNECTED
, &call
->flags
))
192 msg
.msg_name
= &call
->peer
->srx
.transport
;
193 msg
.msg_namelen
= call
->peer
->srx
.transport_len
;
194 msg
.msg_control
= NULL
;
195 msg
.msg_controllen
= 0;
196 msg
.msg_flags
= MSG_SPLICE_PAGES
;
198 whdr
->flags
= txb
->flags
& RXRPC_TXBUF_WIRE_FLAGS
;
200 txb
->serial
= rxrpc_get_next_serial(conn
);
201 whdr
->serial
= htonl(txb
->serial
);
202 trace_rxrpc_tx_ack(call
->debug_id
, txb
->serial
,
203 ntohl(ack
->firstPacket
),
204 ntohl(ack
->serial
), ack
->reason
, ack
->nAcks
,
207 rxrpc_inc_stat(call
->rxnet
, stat_tx_ack_send
);
209 iov_iter_kvec(&msg
.msg_iter
, WRITE
, txb
->kvec
, txb
->nr_kvec
, txb
->len
);
210 rxrpc_local_dont_fragment(conn
->local
, false);
211 ret
= do_udp_sendmsg(conn
->local
->socket
, &msg
, txb
->len
);
212 call
->peer
->last_tx_at
= ktime_get_seconds();
214 trace_rxrpc_tx_fail(call
->debug_id
, txb
->serial
, ret
,
215 rxrpc_tx_point_call_ack
);
217 trace_rxrpc_tx_packet(call
->debug_id
, whdr
,
218 rxrpc_tx_point_call_ack
);
219 now
= ktime_get_real();
220 if (ack
->reason
== RXRPC_ACK_PING
)
221 rxrpc_begin_rtt_probe(call
, txb
->serial
, now
, rxrpc_rtt_tx_ping
);
222 if (txb
->flags
& RXRPC_REQUEST_ACK
)
223 call
->peer
->rtt_last_req
= now
;
224 rxrpc_set_keepalive(call
, now
);
226 rxrpc_tx_backoff(call
, ret
);
230 * Queue an ACK for immediate transmission.
232 void rxrpc_send_ACK(struct rxrpc_call
*call
, u8 ack_reason
,
233 rxrpc_serial_t serial
, enum rxrpc_propose_ack_trace why
)
235 struct rxrpc_txbuf
*txb
;
237 if (test_bit(RXRPC_CALL_DISCONNECTED
, &call
->flags
))
240 rxrpc_inc_stat(call
->rxnet
, stat_tx_acks
[ack_reason
]);
242 txb
= rxrpc_alloc_ack_txbuf(call
, call
->ackr_wtop
- call
->ackr_window
);
244 kleave(" = -ENOMEM");
250 rxrpc_fill_out_ack(call
, txb
, ack_reason
, serial
);
251 call
->ackr_nr_unacked
= 0;
252 atomic_set(&call
->ackr_nr_consumed
, 0);
253 clear_bit(RXRPC_CALL_RX_IS_IDLE
, &call
->flags
);
255 trace_rxrpc_send_ack(call
, why
, ack_reason
, serial
);
256 rxrpc_send_ack_packet(call
, txb
);
257 rxrpc_put_txbuf(txb
, rxrpc_txbuf_put_ack_tx
);
261 * Send an ABORT call packet.
263 int rxrpc_send_abort_packet(struct rxrpc_call
*call
)
265 struct rxrpc_connection
*conn
;
266 struct rxrpc_abort_buffer pkt
;
269 rxrpc_serial_t serial
;
272 /* Don't bother sending aborts for a client call once the server has
273 * hard-ACK'd all of its request data. After that point, we're not
274 * going to stop the operation proceeding, and whilst we might limit
275 * the reply, it's not worth it if we can send a new call on the same
276 * channel instead, thereby closing off this call.
278 if (rxrpc_is_client_call(call
) &&
279 test_bit(RXRPC_CALL_TX_ALL_ACKED
, &call
->flags
))
282 if (test_bit(RXRPC_CALL_DISCONNECTED
, &call
->flags
))
287 msg
.msg_name
= &call
->peer
->srx
.transport
;
288 msg
.msg_namelen
= call
->peer
->srx
.transport_len
;
289 msg
.msg_control
= NULL
;
290 msg
.msg_controllen
= 0;
293 pkt
.whdr
.epoch
= htonl(conn
->proto
.epoch
);
294 pkt
.whdr
.cid
= htonl(call
->cid
);
295 pkt
.whdr
.callNumber
= htonl(call
->call_id
);
297 pkt
.whdr
.type
= RXRPC_PACKET_TYPE_ABORT
;
298 pkt
.whdr
.flags
= conn
->out_clientflag
;
299 pkt
.whdr
.userStatus
= 0;
300 pkt
.whdr
.securityIndex
= call
->security_ix
;
302 pkt
.whdr
.serviceId
= htons(call
->dest_srx
.srx_service
);
303 pkt
.abort_code
= htonl(call
->abort_code
);
305 iov
[0].iov_base
= &pkt
;
306 iov
[0].iov_len
= sizeof(pkt
);
308 serial
= rxrpc_get_next_serial(conn
);
309 pkt
.whdr
.serial
= htonl(serial
);
311 iov_iter_kvec(&msg
.msg_iter
, WRITE
, iov
, 1, sizeof(pkt
));
312 ret
= do_udp_sendmsg(conn
->local
->socket
, &msg
, sizeof(pkt
));
313 conn
->peer
->last_tx_at
= ktime_get_seconds();
315 trace_rxrpc_tx_fail(call
->debug_id
, serial
, ret
,
316 rxrpc_tx_point_call_abort
);
318 trace_rxrpc_tx_packet(call
->debug_id
, &pkt
.whdr
,
319 rxrpc_tx_point_call_abort
);
320 rxrpc_tx_backoff(call
, ret
);
325 * Prepare a (sub)packet for transmission.
327 static void rxrpc_prepare_data_subpacket(struct rxrpc_call
*call
, struct rxrpc_txbuf
*txb
,
328 rxrpc_serial_t serial
)
330 struct rxrpc_wire_header
*whdr
= txb
->kvec
[0].iov_base
;
331 enum rxrpc_req_ack_trace why
;
332 struct rxrpc_connection
*conn
= call
->conn
;
334 _enter("%x,{%d}", txb
->seq
, txb
->len
);
336 txb
->serial
= serial
;
338 if (test_bit(RXRPC_CONN_PROBING_FOR_UPGRADE
, &conn
->flags
) &&
340 whdr
->userStatus
= RXRPC_USERSTATUS_SERVICE_UPGRADE
;
342 /* If our RTT cache needs working on, request an ACK. Also request
343 * ACKs if a DATA packet appears to have been lost.
345 * However, we mustn't request an ACK on the last reply packet of a
346 * service call, lest OpenAFS incorrectly send us an ACK with some
347 * soft-ACKs in it and then never follow up with a proper hard ACK.
349 if (txb
->flags
& RXRPC_REQUEST_ACK
)
350 why
= rxrpc_reqack_already_on
;
351 else if ((txb
->flags
& RXRPC_LAST_PACKET
) && rxrpc_sending_to_client(txb
))
352 why
= rxrpc_reqack_no_srv_last
;
353 else if (test_and_clear_bit(RXRPC_CALL_EV_ACK_LOST
, &call
->events
))
354 why
= rxrpc_reqack_ack_lost
;
355 else if (txb
->flags
& RXRPC_TXBUF_RESENT
)
356 why
= rxrpc_reqack_retrans
;
357 else if (call
->cong_mode
== RXRPC_CALL_SLOW_START
&& call
->cong_cwnd
<= 2)
358 why
= rxrpc_reqack_slow_start
;
359 else if (call
->tx_winsize
<= 2)
360 why
= rxrpc_reqack_small_txwin
;
361 else if (call
->peer
->rtt_count
< 3 && txb
->seq
& 1)
362 why
= rxrpc_reqack_more_rtt
;
363 else if (ktime_before(ktime_add_ms(call
->peer
->rtt_last_req
, 1000), ktime_get_real()))
364 why
= rxrpc_reqack_old_rtt
;
366 goto dont_set_request_ack
;
368 rxrpc_inc_stat(call
->rxnet
, stat_why_req_ack
[why
]);
369 trace_rxrpc_req_ack(call
->debug_id
, txb
->seq
, why
);
370 if (why
!= rxrpc_reqack_no_srv_last
)
371 txb
->flags
|= RXRPC_REQUEST_ACK
;
372 dont_set_request_ack
:
374 whdr
->flags
= txb
->flags
& RXRPC_TXBUF_WIRE_FLAGS
;
375 whdr
->serial
= htonl(txb
->serial
);
376 whdr
->cksum
= txb
->cksum
;
378 trace_rxrpc_tx_data(call
, txb
->seq
, txb
->serial
, txb
->flags
, false);
382 * Prepare a packet for transmission.
384 static size_t rxrpc_prepare_data_packet(struct rxrpc_call
*call
, struct rxrpc_txbuf
*txb
)
386 rxrpc_serial_t serial
;
388 /* Each transmission of a Tx packet needs a new serial number */
389 serial
= rxrpc_get_next_serial(call
->conn
);
391 rxrpc_prepare_data_subpacket(call
, txb
, serial
);
397 * Set timeouts after transmitting a packet.
399 static void rxrpc_tstamp_data_packets(struct rxrpc_call
*call
, struct rxrpc_txbuf
*txb
)
401 ktime_t now
= ktime_get_real();
402 bool ack_requested
= txb
->flags
& RXRPC_REQUEST_ACK
;
404 call
->tx_last_sent
= now
;
405 txb
->last_sent
= now
;
408 rxrpc_begin_rtt_probe(call
, txb
->serial
, now
, rxrpc_rtt_tx_data
);
410 call
->peer
->rtt_last_req
= now
;
411 if (call
->peer
->rtt_count
> 1) {
412 ktime_t delay
= rxrpc_get_rto_backoff(call
->peer
, false);
414 call
->ack_lost_at
= ktime_add(now
, delay
);
415 trace_rxrpc_timer_set(call
, delay
, rxrpc_timer_trace_lost_ack
);
419 if (!test_and_set_bit(RXRPC_CALL_BEGAN_RX_TIMER
, &call
->flags
)) {
420 ktime_t delay
= ms_to_ktime(READ_ONCE(call
->next_rx_timo
));
422 call
->expect_rx_by
= ktime_add(now
, delay
);
423 trace_rxrpc_timer_set(call
, delay
, rxrpc_timer_trace_expect_rx
);
426 rxrpc_set_keepalive(call
, now
);
430 * send a packet through the transport endpoint
432 static int rxrpc_send_data_packet(struct rxrpc_call
*call
, struct rxrpc_txbuf
*txb
)
434 struct rxrpc_wire_header
*whdr
= txb
->kvec
[0].iov_base
;
435 struct rxrpc_connection
*conn
= call
->conn
;
436 enum rxrpc_tx_point frag
;
441 _enter("%x,{%d}", txb
->seq
, txb
->len
);
443 len
= rxrpc_prepare_data_packet(call
, txb
);
445 if (IS_ENABLED(CONFIG_AF_RXRPC_INJECT_LOSS
)) {
447 if ((lose
++ & 7) == 7) {
449 trace_rxrpc_tx_data(call
, txb
->seq
, txb
->serial
,
455 iov_iter_kvec(&msg
.msg_iter
, WRITE
, txb
->kvec
, txb
->nr_kvec
, len
);
457 msg
.msg_name
= &call
->peer
->srx
.transport
;
458 msg
.msg_namelen
= call
->peer
->srx
.transport_len
;
459 msg
.msg_control
= NULL
;
460 msg
.msg_controllen
= 0;
461 msg
.msg_flags
= MSG_SPLICE_PAGES
;
463 /* Track what we've attempted to transmit at least once so that the
464 * retransmission algorithm doesn't try to resend what we haven't sent
467 if (txb
->seq
== call
->tx_transmitted
+ 1)
468 call
->tx_transmitted
= txb
->seq
;
470 /* send the packet with the don't fragment bit set if we currently
471 * think it's small enough */
472 if (txb
->len
>= call
->peer
->maxdata
) {
473 rxrpc_local_dont_fragment(conn
->local
, false);
474 frag
= rxrpc_tx_point_call_data_frag
;
476 rxrpc_local_dont_fragment(conn
->local
, true);
477 frag
= rxrpc_tx_point_call_data_nofrag
;
481 /* send the packet by UDP
482 * - returns -EMSGSIZE if UDP would have to fragment the packet
483 * to go out of the interface
484 * - in which case, we'll have processed the ICMP error
485 * message and update the peer record
487 rxrpc_inc_stat(call
->rxnet
, stat_tx_data_send
);
488 ret
= do_udp_sendmsg(conn
->local
->socket
, &msg
, len
);
489 conn
->peer
->last_tx_at
= ktime_get_seconds();
492 rxrpc_inc_stat(call
->rxnet
, stat_tx_data_send_fail
);
493 trace_rxrpc_tx_fail(call
->debug_id
, txb
->serial
, ret
, frag
);
495 trace_rxrpc_tx_packet(call
->debug_id
, whdr
, frag
);
498 rxrpc_tx_backoff(call
, ret
);
499 if (ret
== -EMSGSIZE
&& frag
== rxrpc_tx_point_call_data_frag
) {
500 rxrpc_local_dont_fragment(conn
->local
, false);
501 frag
= rxrpc_tx_point_call_data_frag
;
507 rxrpc_tstamp_data_packets(call
, txb
);
509 /* Cancel the call if the initial transmission fails,
510 * particularly if that's due to network routing issues that
511 * aren't going away anytime soon. The layer above can arrange
512 * the retransmission.
514 if (!test_and_set_bit(RXRPC_CALL_BEGAN_RX_TIMER
, &call
->flags
))
515 rxrpc_set_call_completion(call
, RXRPC_CALL_LOCAL_ERROR
,
519 _leave(" = %d [%u]", ret
, call
->peer
->maxdata
);
524 * Transmit a connection-level abort.
526 void rxrpc_send_conn_abort(struct rxrpc_connection
*conn
)
528 struct rxrpc_wire_header whdr
;
536 msg
.msg_name
= &conn
->peer
->srx
.transport
;
537 msg
.msg_namelen
= conn
->peer
->srx
.transport_len
;
538 msg
.msg_control
= NULL
;
539 msg
.msg_controllen
= 0;
542 whdr
.epoch
= htonl(conn
->proto
.epoch
);
543 whdr
.cid
= htonl(conn
->proto
.cid
);
546 whdr
.type
= RXRPC_PACKET_TYPE_ABORT
;
547 whdr
.flags
= conn
->out_clientflag
;
549 whdr
.securityIndex
= conn
->security_ix
;
551 whdr
.serviceId
= htons(conn
->service_id
);
553 word
= htonl(conn
->abort_code
);
555 iov
[0].iov_base
= &whdr
;
556 iov
[0].iov_len
= sizeof(whdr
);
557 iov
[1].iov_base
= &word
;
558 iov
[1].iov_len
= sizeof(word
);
560 len
= iov
[0].iov_len
+ iov
[1].iov_len
;
562 serial
= rxrpc_get_next_serial(conn
);
563 whdr
.serial
= htonl(serial
);
565 iov_iter_kvec(&msg
.msg_iter
, WRITE
, iov
, 2, len
);
566 ret
= do_udp_sendmsg(conn
->local
->socket
, &msg
, len
);
568 trace_rxrpc_tx_fail(conn
->debug_id
, serial
, ret
,
569 rxrpc_tx_point_conn_abort
);
570 _debug("sendmsg failed: %d", ret
);
574 trace_rxrpc_tx_packet(conn
->debug_id
, &whdr
, rxrpc_tx_point_conn_abort
);
576 conn
->peer
->last_tx_at
= ktime_get_seconds();
580 * Reject a packet through the local endpoint.
582 void rxrpc_reject_packet(struct rxrpc_local
*local
, struct sk_buff
*skb
)
584 struct rxrpc_wire_header whdr
;
585 struct sockaddr_rxrpc srx
;
586 struct rxrpc_skb_priv
*sp
= rxrpc_skb(skb
);
593 rxrpc_see_skb(skb
, rxrpc_skb_see_reject
);
595 iov
[0].iov_base
= &whdr
;
596 iov
[0].iov_len
= sizeof(whdr
);
597 iov
[1].iov_base
= &code
;
598 iov
[1].iov_len
= sizeof(code
);
600 msg
.msg_name
= &srx
.transport
;
601 msg
.msg_control
= NULL
;
602 msg
.msg_controllen
= 0;
605 memset(&whdr
, 0, sizeof(whdr
));
608 case RXRPC_SKB_MARK_REJECT_BUSY
:
609 whdr
.type
= RXRPC_PACKET_TYPE_BUSY
;
613 case RXRPC_SKB_MARK_REJECT_ABORT
:
614 whdr
.type
= RXRPC_PACKET_TYPE_ABORT
;
615 code
= htonl(skb
->priority
);
616 size
= sizeof(whdr
) + sizeof(code
);
623 if (rxrpc_extract_addr_from_skb(&srx
, skb
) == 0) {
624 msg
.msg_namelen
= srx
.transport_len
;
626 whdr
.epoch
= htonl(sp
->hdr
.epoch
);
627 whdr
.cid
= htonl(sp
->hdr
.cid
);
628 whdr
.callNumber
= htonl(sp
->hdr
.callNumber
);
629 whdr
.serviceId
= htons(sp
->hdr
.serviceId
);
630 whdr
.flags
= sp
->hdr
.flags
;
631 whdr
.flags
^= RXRPC_CLIENT_INITIATED
;
632 whdr
.flags
&= RXRPC_CLIENT_INITIATED
;
634 iov_iter_kvec(&msg
.msg_iter
, WRITE
, iov
, ioc
, size
);
635 ret
= do_udp_sendmsg(local
->socket
, &msg
, size
);
637 trace_rxrpc_tx_fail(local
->debug_id
, 0, ret
,
638 rxrpc_tx_point_reject
);
640 trace_rxrpc_tx_packet(local
->debug_id
, &whdr
,
641 rxrpc_tx_point_reject
);
646 * Send a VERSION reply to a peer as a keepalive.
648 void rxrpc_send_keepalive(struct rxrpc_peer
*peer
)
650 struct rxrpc_wire_header whdr
;
658 msg
.msg_name
= &peer
->srx
.transport
;
659 msg
.msg_namelen
= peer
->srx
.transport_len
;
660 msg
.msg_control
= NULL
;
661 msg
.msg_controllen
= 0;
664 whdr
.epoch
= htonl(peer
->local
->rxnet
->epoch
);
669 whdr
.type
= RXRPC_PACKET_TYPE_VERSION
; /* Not client-initiated */
670 whdr
.flags
= RXRPC_LAST_PACKET
;
672 whdr
.securityIndex
= 0;
676 iov
[0].iov_base
= &whdr
;
677 iov
[0].iov_len
= sizeof(whdr
);
678 iov
[1].iov_base
= (char *)rxrpc_keepalive_string
;
679 iov
[1].iov_len
= sizeof(rxrpc_keepalive_string
);
681 len
= iov
[0].iov_len
+ iov
[1].iov_len
;
683 iov_iter_kvec(&msg
.msg_iter
, WRITE
, iov
, 2, len
);
684 ret
= do_udp_sendmsg(peer
->local
->socket
, &msg
, len
);
686 trace_rxrpc_tx_fail(peer
->debug_id
, 0, ret
,
687 rxrpc_tx_point_version_keepalive
);
689 trace_rxrpc_tx_packet(peer
->debug_id
, &whdr
,
690 rxrpc_tx_point_version_keepalive
);
692 peer
->last_tx_at
= ktime_get_seconds();
697 * Schedule an instant Tx resend.
699 static inline void rxrpc_instant_resend(struct rxrpc_call
*call
,
700 struct rxrpc_txbuf
*txb
)
702 if (!__rxrpc_call_is_complete(call
))
707 * Transmit one packet.
709 void rxrpc_transmit_one(struct rxrpc_call
*call
, struct rxrpc_txbuf
*txb
)
713 ret
= rxrpc_send_data_packet(call
, txb
);
719 rxrpc_set_call_completion(call
, RXRPC_CALL_LOCAL_ERROR
,
723 _debug("need instant resend %d", ret
);
724 rxrpc_instant_resend(call
, txb
);
727 ktime_t delay
= ns_to_ktime(call
->peer
->rto_us
* NSEC_PER_USEC
);
729 call
->resend_at
= ktime_add(ktime_get_real(), delay
);
730 trace_rxrpc_timer_set(call
, delay
, rxrpc_timer_trace_resend_tx
);