qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] net/vmnet: Pad short Ethernet frames
@ 2024-01-06 22:35 William Hooper
  2024-01-07 22:23 ` Bin Meng
  2024-01-08 15:36 ` Philippe Mathieu-Daudé
  0 siblings, 2 replies; 11+ messages in thread
From: William Hooper @ 2024-01-06 22:35 UTC (permalink / raw)
  To: qemu-devel; +Cc: Bin Meng, William Hooper

At least on macOS 12.7.2, vmnet doesn't pad Ethernet frames, such as the
host's ARP replies, to the minimum size (60 bytes before the frame check
sequence) defined in IEEE Std 802.3-2022, so guests' Ethernet device
drivers may drop them with "frame too short" errors.

This patch calls eth_pad_short_frame() to add padding, as in net/tap.c
and net/slirp.c.

Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2058
Signed-off-by: William Hooper <wsh@wshooper.org>
---
 net/vmnet-common.m | 20 +++++++++++++++++---
 1 file changed, 17 insertions(+), 3 deletions(-)

diff --git a/net/vmnet-common.m b/net/vmnet-common.m
index 2958283485..f8f7163226 100644
--- a/net/vmnet-common.m
+++ b/net/vmnet-common.m
@@ -18,6 +18,7 @@
 #include "qemu/error-report.h"
 #include "qapi/error.h"
 #include "sysemu/runstate.h"
+#include "net/eth.h"
 
 #include <vmnet/vmnet.h>
 #include <dispatch/dispatch.h>
@@ -150,10 +151,23 @@ static int vmnet_read_packets(VmnetState *s)
  */
 static void vmnet_write_packets_to_qemu(VmnetState *s)
 {
+    uint8_t *pkt;
+    size_t pktsz;
+    uint8_t min_pkt[ETH_ZLEN];
+    size_t min_pktsz = sizeof(min_pkt);
+
     while (s->packets_send_current_pos < s->packets_send_end_pos) {
-        ssize_t size = qemu_send_packet_async(&s->nc,
-                                      s->iov_buf[s->packets_send_current_pos].iov_base,
-                                      s->packets_buf[s->packets_send_current_pos].vm_pkt_size,
+        pkt = s->iov_buf[s->packets_send_current_pos].iov_base;
+        pktsz = s->packets_buf[s->packets_send_current_pos].vm_pkt_size;
+
+        if (net_peer_needs_padding(&s->nc)) {
+            if (eth_pad_short_frame(min_pkt, &min_pktsz, pkt, pktsz)) {
+                pkt = min_pkt;
+                pktsz = min_pktsz;
+            }
+        }
+
+        ssize_t size = qemu_send_packet_async(&s->nc, pkt, pktsz,
                                       vmnet_send_completed);
 
         if (size == 0) {
-- 
2.37.1



^ permalink raw reply related	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2024-12-31 17:42 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-01-06 22:35 [PATCH] net/vmnet: Pad short Ethernet frames William Hooper
2024-01-07 22:23 ` Bin Meng
2024-01-08 15:36 ` Philippe Mathieu-Daudé
2024-01-10  5:34   ` William Hooper
2024-08-18  6:33     ` [PATCH v2] " William Hooper
2024-10-20  3:16       ` Ping: " William Hooper
2024-10-30 12:49         ` Phil Dennis-Jordan
2024-11-02 20:56           ` [PATCH v3] " William Hooper
2024-11-17  2:08             ` Ping: " William Hooper
2024-12-30 21:05             ` Ping (2): " William Hooper
2024-12-31 17:42               ` Philippe Mathieu-Daudé

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).