[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-ppc] [PATCH 1/2] fsl_etsec: Pad short payloads with zeros

From: Jason Wang
Subject: Re: [Qemu-ppc] [PATCH 1/2] fsl_etsec: Pad short payloads with zeros
Date: Wed, 30 Nov 2016 18:41:12 +0800
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0

On 2016年11月29日 02:13, Andrey Smirnov wrote:
Depending on QEMU network setup it is possible for us to receive a
complete Ethernet packet that is less 64 bytes long. One such example is
when QEMU is configured to use a standalone TAP device (not set to be a
part of any bridge) receives and ARP packet. In cases like that we need
to add more than just 4-bytes of CRC padding and ensure that our payload
is at least 60 bytes long, such that, when combined with CRC padding
bytes the resulting size is at least 802.3 minimum MTU bytes
long (64). Failing to do that results in code in etsec_walk_rx_ring()
setting BD_RX_SH which, in turn, makes corresponding Linux driver of
emulated host to reject buffer as a runt packet

Signed-off-by: Andrey Smirnov <address@hidden>
  hw/net/fsl_etsec/rings.c | 7 +++++++
  1 file changed, 7 insertions(+)

diff --git a/hw/net/fsl_etsec/rings.c b/hw/net/fsl_etsec/rings.c
index 79d2f14..1434c91 100644
--- a/hw/net/fsl_etsec/rings.c
+++ b/hw/net/fsl_etsec/rings.c
@@ -474,6 +474,13 @@ static void rx_init_frame(eTSEC *etsec, const uint8_t 
*buf, size_t size)
      /* CRC padding (We don't have to compute the CRC) */
      etsec->rx_padding = 4;
+ /*
+     * Ensure that payload length + CRC length is at least 802.3
+     * minimum MTU size bytes long (64)
+     */
+    if (etsec->rx_buffer_len < 60)
+        etsec->rx_padding += 60 - etsec->rx_buffer_len;
      etsec->rx_first_in_frame = 1;
      etsec->rx_remaining_data = etsec->rx_buffer_len;
      RING_DEBUG("%s: rx_buffer_len:%u rx_padding+crc:%u\n", __func__,

Applied, thanks.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]