diff --git a/net.c b/net.c
index fefed6c..d950029 100644
--- a/net.c
+++ b/net.c
@@ -478,7 +478,10 @@
         return size;
     }
 
-    return vc->receive(vc, data, size);
+    if (flags & QEMU_NET_PACKET_FLAG_RAW && vc->receive_raw)
+        return vc->receive_raw(vc, data, size);
+    else
+        return vc->receive(vc, data, size);
 }
 
 static ssize_t qemu_vlan_deliver_packet(VLANClientState *sender,
@@ -503,7 +506,10 @@
             continue;
         }
 
-        len = vc->receive(vc, buf, size);
+        if (flags & QEMU_NET_PACKET_FLAG_RAW && vc->receive_raw)
+            len = vc->receive_raw(vc, buf, size);
+        else
+            len = vc->receive(vc, buf, size);
 
         ret = (ret >= 0) ? ret : len;
     }
@@ -541,9 +547,10 @@
     qemu_net_queue_flush(queue);
 }
 
-ssize_t qemu_send_packet_async(VLANClientState *sender,
-                               const uint8_t *buf, int size,
-                               NetPacketSent *sent_cb)
+static ssize_t qemu_send_packet_async_with_flags(VLANClientState *sender,
+                                                 unsigned flags,
+                                                 const uint8_t *buf, int size,
+                                                 NetPacketSent *sent_cb)
 {
     NetQueue *queue;
 
@@ -562,9 +569,15 @@
         queue = sender->vlan->send_queue;
     }
 
-    return qemu_net_queue_send(queue, sender,
-                               QEMU_NET_PACKET_FLAG_NONE,
-                               buf, size, sent_cb);
+    return qemu_net_queue_send(queue, sender, flags, buf, size, sent_cb);
+}
+
+ssize_t qemu_send_packet_async(VLANClientState *sender,
+                               const uint8_t *buf, int size,
+                               NetPacketSent *sent_cb)
+{
+    return qemu_send_packet_async_with_flags(sender, QEMU_NET_PACKET_FLAG_NONE,
+                                             buf, size, sent_cb);
 }
 
 void qemu_send_packet(VLANClientState *vc, const uint8_t *buf, int size)
@@ -572,6 +585,12 @@
     qemu_send_packet_async(vc, buf, size, NULL);
 }
 
+ssize_t qemu_send_packet_raw(VLANClientState *vc, const uint8_t *buf, int size)
+{
+    return qemu_send_packet_async_with_flags(vc, QEMU_NET_PACKET_FLAG_RAW,
+                                             buf, size, NULL);
+}
+
 static ssize_t vc_sendv_compat(VLANClientState *vc, const struct iovec *iov,
                                int iovcnt)
 {
@@ -641,6 +660,8 @@
             continue;
         }
 
+        assert(!(flags & QEMU_NET_PACKET_FLAG_RAW));
+
         if (vc->receive_iov) {
             len = vc->receive_iov(vc, iov, iovcnt);
         } else {
