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;
|
struct iphdr *ip;
|
||||||
int credits;
|
int credits;
|
||||||
u8 buf[150];
|
u8 buf[150];
|
||||||
|
u64 cntrl1;
|
||||||
void *pos;
|
void *pos;
|
||||||
|
|
||||||
iplen = skb_network_header_len(skb);
|
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));
|
TXPKT_PF_V(tx_info->adap->pf));
|
||||||
cpl->pack = 0;
|
cpl->pack = 0;
|
||||||
cpl->len = htons(pktlen);
|
cpl->len = htons(pktlen);
|
||||||
/* checksum offload */
|
|
||||||
cpl->ctrl1 = 0;
|
|
||||||
|
|
||||||
pos = cpl + 1;
|
|
||||||
|
|
||||||
memcpy(buf, skb->data, pktlen);
|
memcpy(buf, skb->data, pktlen);
|
||||||
if (tx_info->ip_family == AF_INET) {
|
if (tx_info->ip_family == AF_INET) {
|
||||||
/* we need to correct ip header len */
|
/* we need to correct ip header len */
|
||||||
ip = (struct iphdr *)(buf + maclen);
|
ip = (struct iphdr *)(buf + maclen);
|
||||||
ip->tot_len = htons(pktlen - maclen);
|
ip->tot_len = htons(pktlen - maclen);
|
||||||
|
cntrl1 = TXPKT_CSUM_TYPE_V(TX_CSUM_TCPIP);
|
||||||
#if IS_ENABLED(CONFIG_IPV6)
|
#if IS_ENABLED(CONFIG_IPV6)
|
||||||
} else {
|
} else {
|
||||||
ip6 = (struct ipv6hdr *)(buf + maclen);
|
ip6 = (struct ipv6hdr *)(buf + maclen);
|
||||||
ip6->payload_len = htons(pktlen - maclen - iplen);
|
ip6->payload_len = htons(pktlen - maclen - iplen);
|
||||||
|
cntrl1 = TXPKT_CSUM_TYPE_V(TX_CSUM_TCPIP6);
|
||||||
#endif
|
#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
|
/* 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
|
* 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.
|
* need to update the tcp sequence number as per the last packet.
|
||||||
|
Loading…
Reference in New Issue
Block a user