mirror of
https://github.com/torvalds/linux.git
synced 2024-12-01 00:21:32 +00:00
ch_ktls: Update cheksum information
Checksum update was missing in the WR.
Fixes: 429765a149
("chcr: handle partial end part of a record")
Signed-off-by: Rohit Maheshwari <rohitm@chelsio.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
b1b5cb1803
commit
86716b51d1
@ -959,6 +959,7 @@ chcr_ktls_write_tcp_options(struct chcr_ktls_info *tx_info, struct sk_buff *skb,
|
||||
struct iphdr *ip;
|
||||
int credits;
|
||||
u8 buf[150];
|
||||
u64 cntrl1;
|
||||
void *pos;
|
||||
|
||||
iplen = skb_network_header_len(skb);
|
||||
@ -997,22 +998,28 @@ chcr_ktls_write_tcp_options(struct chcr_ktls_info *tx_info, struct sk_buff *skb,
|
||||
TXPKT_PF_V(tx_info->adap->pf));
|
||||
cpl->pack = 0;
|
||||
cpl->len = htons(pktlen);
|
||||
/* checksum offload */
|
||||
cpl->ctrl1 = 0;
|
||||
|
||||
pos = cpl + 1;
|
||||
|
||||
memcpy(buf, skb->data, pktlen);
|
||||
if (tx_info->ip_family == AF_INET) {
|
||||
/* we need to correct ip header len */
|
||||
ip = (struct iphdr *)(buf + maclen);
|
||||
ip->tot_len = htons(pktlen - maclen);
|
||||
cntrl1 = TXPKT_CSUM_TYPE_V(TX_CSUM_TCPIP);
|
||||
#if IS_ENABLED(CONFIG_IPV6)
|
||||
} else {
|
||||
ip6 = (struct ipv6hdr *)(buf + maclen);
|
||||
ip6->payload_len = htons(pktlen - maclen - iplen);
|
||||
cntrl1 = TXPKT_CSUM_TYPE_V(TX_CSUM_TCPIP6);
|
||||
#endif
|
||||
}
|
||||
|
||||
cntrl1 |= T6_TXPKT_ETHHDR_LEN_V(maclen - ETH_HLEN) |
|
||||
TXPKT_IPHDR_LEN_V(iplen);
|
||||
/* checksum offload */
|
||||
cpl->ctrl1 = cpu_to_be64(cntrl1);
|
||||
|
||||
pos = cpl + 1;
|
||||
|
||||
/* now take care of the tcp header, if fin is not set then clear push
|
||||
* bit as well, and if fin is set, it will be sent at the last so we
|
||||
* need to update the tcp sequence number as per the last packet.
|
||||
|
Loading…
Reference in New Issue
Block a user