|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [qemu-xen staging] hw/net: Added CSO for IPv6
commit 9a8d949245a0a3f90842d1611f56df6ae705560d
Author: Andrew <andrew@xxxxxxxxxx>
AuthorDate: Mon Jun 29 04:17:59 2020 +0300
Commit: Jason Wang <jasowang@xxxxxxxxxx>
CommitDate: Wed Jul 15 21:00:13 2020 +0800
hw/net: Added CSO for IPv6
Added fix for checksum offload for IPv6 if a backend doesn't
have a virtual header.
This patch is a part of IPv6 fragmentation.
Signed-off-by: Andrew Melnychenko <andrew@xxxxxxxxxx>
Signed-off-by: Jason Wang <jasowang@xxxxxxxxxx>
---
hw/net/net_tx_pkt.c | 15 ++++++++++++---
1 file changed, 12 insertions(+), 3 deletions(-)
diff --git a/hw/net/net_tx_pkt.c b/hw/net/net_tx_pkt.c
index 162f802dd7..331c73cfc0 100644
--- a/hw/net/net_tx_pkt.c
+++ b/hw/net/net_tx_pkt.c
@@ -468,8 +468,8 @@ static void net_tx_pkt_do_sw_csum(struct NetTxPkt *pkt)
/* num of iovec without vhdr */
uint32_t iov_len = pkt->payload_frags + NET_TX_PKT_PL_START_FRAG - 1;
uint16_t csl;
- struct ip_header *iphdr;
size_t csum_offset = pkt->virt_hdr.csum_start + pkt->virt_hdr.csum_offset;
+ uint16_t l3_proto = eth_get_l3_proto(iov, 1, iov->iov_len);
/* Put zero to checksum field */
iov_from_buf(iov, iov_len, csum_offset, &csum, sizeof csum);
@@ -477,9 +477,18 @@ static void net_tx_pkt_do_sw_csum(struct NetTxPkt *pkt)
/* Calculate L4 TCP/UDP checksum */
csl = pkt->payload_len;
+ csum_cntr = 0;
+ cso = 0;
/* add pseudo header to csum */
- iphdr = pkt->vec[NET_TX_PKT_L3HDR_FRAG].iov_base;
- csum_cntr = eth_calc_ip4_pseudo_hdr_csum(iphdr, csl, &cso);
+ if (l3_proto == ETH_P_IP) {
+ csum_cntr = eth_calc_ip4_pseudo_hdr_csum(
+ pkt->vec[NET_TX_PKT_L3HDR_FRAG].iov_base,
+ csl, &cso);
+ } else if (l3_proto == ETH_P_IPV6) {
+ csum_cntr = eth_calc_ip6_pseudo_hdr_csum(
+ pkt->vec[NET_TX_PKT_L3HDR_FRAG].iov_base,
+ csl, pkt->l4proto, &cso);
+ }
/* data checksum */
csum_cntr +=
--
generated by git-patchbot for /home/xen/git/qemu-xen.git#staging
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |