rxrpc: Note cksum in txbuf
Add a field to rxrpc_txbuf in which to store the checksum to go in the header as this may get overwritten in the wire header struct when transmitting as part of a jumbo packet. Signed-off-by: David Howells <dhowells@redhat.com> cc: Marc Dionne <marc.dionne@auristor.com> cc: "David S. Miller" <davem@davemloft.net> cc: Eric Dumazet <edumazet@google.com> cc: Jakub Kicinski <kuba@kernel.org> cc: Paolo Abeni <pabeni@redhat.com> cc: linux-afs@lists.infradead.org cc: netdev@vger.kernel.org
This commit is contained in:
parent
12bdff73a1
commit
41b8debba7
@ -803,6 +803,7 @@ struct rxrpc_txbuf {
|
||||
unsigned int flags;
|
||||
#define RXRPC_TXBUF_WIRE_FLAGS 0xff /* The wire protocol flags */
|
||||
#define RXRPC_TXBUF_RESENT 0x100 /* Set if has been resent */
|
||||
__be16 cksum; /* Checksum to go in header */
|
||||
u8 /*enum rxrpc_propose_ack_trace*/ ack_why; /* If ack, why */
|
||||
struct {
|
||||
/* The packet for encrypting and DMA'ing. We align it such
|
||||
|
@ -335,6 +335,7 @@ int rxrpc_send_data_packet(struct rxrpc_call *call, struct rxrpc_txbuf *txb)
|
||||
/* Each transmission of a Tx packet+ needs a new serial number */
|
||||
txb->serial = rxrpc_get_next_serial(conn);
|
||||
txb->wire.serial = htonl(txb->serial);
|
||||
txb->wire.cksum = txb->cksum;
|
||||
|
||||
if (test_bit(RXRPC_CONN_PROBING_FOR_UPGRADE, &conn->flags) &&
|
||||
txb->seq == 1)
|
||||
|
@ -378,7 +378,7 @@ static int rxkad_secure_packet(struct rxrpc_call *call, struct rxrpc_txbuf *txb)
|
||||
y = (y >> 16) & 0xffff;
|
||||
if (y == 0)
|
||||
y = 1; /* zero checksums are not permitted */
|
||||
txb->wire.cksum = htons(y);
|
||||
txb->cksum = htons(y);
|
||||
|
||||
switch (call->conn->security_level) {
|
||||
case RXRPC_SECURITY_PLAIN:
|
||||
|
@ -35,6 +35,7 @@ struct rxrpc_txbuf *rxrpc_alloc_txbuf(struct rxrpc_call *call, u8 packet_type,
|
||||
txb->ack_why = 0;
|
||||
txb->seq = call->tx_prepared + 1;
|
||||
txb->serial = 0;
|
||||
txb->cksum = 0;
|
||||
txb->wire.epoch = htonl(call->conn->proto.epoch);
|
||||
txb->wire.cid = htonl(call->cid);
|
||||
txb->wire.callNumber = htonl(call->call_id);
|
||||
|
Loading…
x
Reference in New Issue
Block a user