diff options
author | Akihiko Odaki <akihiko.odaki@daynix.com> | 2023-03-24 18:54:33 +0900 |
---|---|---|
committer | Jason Wang <jasowang@redhat.com> | 2023-03-28 13:10:55 +0800 |
commit | 4cf3a63849c24021bf5a023d94c797acbb89b5b8 (patch) | |
tree | 5bb2d4ae9963c00108721cda3e8c1f65ad5532e3 | |
parent | f4fdaf009cc85e95a00aba47a6b5b9df920d51c4 (diff) | |
download | qemu-4cf3a63849c24021bf5a023d94c797acbb89b5b8.zip qemu-4cf3a63849c24021bf5a023d94c797acbb89b5b8.tar.gz qemu-4cf3a63849c24021bf5a023d94c797acbb89b5b8.tar.bz2 |
hw/net/net_tx_pkt: Ignore ECN bit
No segmentation should be performed if gso type is
VIRTIO_NET_HDR_GSO_NONE even if ECN bit is set.
Fixes: e263cd49c7 ("Packet abstraction for VMWARE network devices")
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1544
Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
-rw-r--r-- | hw/net/net_tx_pkt.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/hw/net/net_tx_pkt.c b/hw/net/net_tx_pkt.c index cb606cc..efe80b1 100644 --- a/hw/net/net_tx_pkt.c +++ b/hw/net/net_tx_pkt.c @@ -796,11 +796,13 @@ bool net_tx_pkt_send_custom(struct NetTxPkt *pkt, bool offload, { assert(pkt); + uint8_t gso_type = pkt->virt_hdr.gso_type & ~VIRTIO_NET_HDR_GSO_ECN; + /* * Since underlying infrastructure does not support IP datagrams longer * than 64K we should drop such packets and don't even try to send */ - if (VIRTIO_NET_HDR_GSO_NONE != pkt->virt_hdr.gso_type) { + if (VIRTIO_NET_HDR_GSO_NONE != gso_type) { if (pkt->payload_len > ETH_MAX_IP_DGRAM_LEN - pkt->vec[NET_TX_PKT_L3HDR_FRAG].iov_len) { @@ -808,7 +810,7 @@ bool net_tx_pkt_send_custom(struct NetTxPkt *pkt, bool offload, } } - if (offload || pkt->virt_hdr.gso_type == VIRTIO_NET_HDR_GSO_NONE) { + if (offload || gso_type == VIRTIO_NET_HDR_GSO_NONE) { if (!offload && pkt->virt_hdr.flags & VIRTIO_NET_HDR_F_NEEDS_CSUM) { net_tx_pkt_do_sw_csum(pkt, &pkt->vec[NET_TX_PKT_L2HDR_FRAG], pkt->payload_frags + NET_TX_PKT_PL_START_FRAG - 1, |