Commit 86716b51 authored by Rohit Maheshwari's avatar Rohit Maheshwari Committed by Jakub Kicinski

ch_ktls: Update cheksum information

Checksum update was missing in the WR.

Fixes: 429765a1 ("chcr: handle partial end part of a record")
Signed-off-by: default avatarRohit Maheshwari <rohitm@chelsio.com>
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent b1b5cb18
...@@ -959,6 +959,7 @@ chcr_ktls_write_tcp_options(struct chcr_ktls_info *tx_info, struct sk_buff *skb, ...@@ -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, ...@@ -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.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment