input.c (a05754295e01f006a651eec759c5dbe682ef6cef) input.c (adc9613ff66c26ebaff9814973181ac178beb90b)
1// SPDX-License-Identifier: GPL-2.0-or-later
2/* RxRPC packet reception
3 *
4 * Copyright (C) 2007, 2016 Red Hat, Inc. All Rights Reserved.
5 * Written by David Howells (dhowells@redhat.com)
6 */
7
8#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt

--- 889 unchanged lines hidden (view full) ---

898 ack_serial, true, true,
899 rxrpc_propose_ack_respond_to_ping);
900 } else if (sp->hdr.flags & RXRPC_REQUEST_ACK) {
901 rxrpc_propose_ACK(call, RXRPC_ACK_REQUESTED,
902 ack_serial, true, true,
903 rxrpc_propose_ack_respond_to_ack);
904 }
905
1// SPDX-License-Identifier: GPL-2.0-or-later
2/* RxRPC packet reception
3 *
4 * Copyright (C) 2007, 2016 Red Hat, Inc. All Rights Reserved.
5 * Written by David Howells (dhowells@redhat.com)
6 */
7
8#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt

--- 889 unchanged lines hidden (view full) ---

898 ack_serial, true, true,
899 rxrpc_propose_ack_respond_to_ping);
900 } else if (sp->hdr.flags & RXRPC_REQUEST_ACK) {
901 rxrpc_propose_ACK(call, RXRPC_ACK_REQUESTED,
902 ack_serial, true, true,
903 rxrpc_propose_ack_respond_to_ack);
904 }
905
906 /* If we get an EXCEEDS_WINDOW ACK from the server, it probably
907 * indicates that the client address changed due to NAT. The server
908 * lost the call because it switched to a different peer.
909 */
910 if (unlikely(buf.ack.reason == RXRPC_ACK_EXCEEDS_WINDOW) &&
911 first_soft_ack == 1 &&
912 prev_pkt == 0 &&
913 rxrpc_is_client_call(call)) {
914 rxrpc_set_call_completion(call, RXRPC_CALL_REMOTELY_ABORTED,
915 0, -ENETRESET);
916 return;
917 }
918
919 /* If we get an OUT_OF_SEQUENCE ACK from the server, that can also
920 * indicate a change of address. However, we can retransmit the call
921 * if we still have it buffered to the beginning.
922 */
923 if (unlikely(buf.ack.reason == RXRPC_ACK_OUT_OF_SEQUENCE) &&
924 first_soft_ack == 1 &&
925 prev_pkt == 0 &&
926 call->tx_hard_ack == 0 &&
927 rxrpc_is_client_call(call)) {
928 rxrpc_set_call_completion(call, RXRPC_CALL_REMOTELY_ABORTED,
929 0, -ENETRESET);
930 return;
931 }
932
906 /* Discard any out-of-order or duplicate ACKs (outside lock). */
907 if (!rxrpc_is_ack_valid(call, first_soft_ack, prev_pkt)) {
908 trace_rxrpc_rx_discard_ack(call->debug_id, ack_serial,
909 first_soft_ack, call->ackr_first_seq,
910 prev_pkt, call->ackr_prev_seq);
911 return;
912 }
913

--- 553 unchanged lines hidden ---
933 /* Discard any out-of-order or duplicate ACKs (outside lock). */
934 if (!rxrpc_is_ack_valid(call, first_soft_ack, prev_pkt)) {
935 trace_rxrpc_rx_discard_ack(call->debug_id, ack_serial,
936 first_soft_ack, call->ackr_first_seq,
937 prev_pkt, call->ackr_prev_seq);
938 return;
939 }
940

--- 553 unchanged lines hidden ---