Index: /trunk/src/VBox/HostDrivers/VBoxNetAdp/darwin/VBoxNetAdp-darwin.cpp
===================================================================
--- /trunk/src/VBox/HostDrivers/VBoxNetAdp/darwin/VBoxNetAdp-darwin.cpp	(revision 57911)
+++ /trunk/src/VBox/HostDrivers/VBoxNetAdp/darwin/VBoxNetAdp-darwin.cpp	(revision 57912)
@@ -152,4 +152,5 @@
      */
     bpf_tap_out(pIface, DLT_EN10MB, pMBuf, NULL, 0);
+    ifnet_stat_increment_out(pIface, 1, mbuf_len(pMBuf), 0);
 
     mbuf_freem_list(pMBuf);
Index: /trunk/src/VBox/HostDrivers/VBoxNetFlt/darwin/VBoxNetFlt-darwin.cpp
===================================================================
--- /trunk/src/VBox/HostDrivers/VBoxNetFlt/darwin/VBoxNetFlt-darwin.cpp	(revision 57911)
+++ /trunk/src/VBox/HostDrivers/VBoxNetFlt/darwin/VBoxNetFlt-darwin.cpp	(revision 57912)
@@ -941,8 +941,11 @@
              * A packet from the host to a guest.  As we won't pass it
              * to the drvier/wire we need to feed it to bpf ourselves.
+             *
+             * XXX: TODO: bpf should be done before; use pfnPreRecv?
              */
             if (fSrc == INTNETTRUNKDIR_HOST)
             {
                 bpf_tap_out(pThis->u.s.pIfNet, DLT_EN10MB, pMBuf, NULL, 0);
+                ifnet_stat_increment_out(pThis->u.s.pIfNet, 1, mbuf_len(pMBuf), 0);
             }
         }
@@ -1151,4 +1154,5 @@
         /*
          * Create a mbuf for the gather list and push it onto the wire.
+         * BPF tap and stats will be taken care of by the driver.
          */
         if (fDst & INTNETTRUNKDIR_WIRE)
@@ -1167,4 +1171,5 @@
         /*
          * Create a mbuf for the gather list and push it onto the host stack.
+         * BPF tap and stats are on us.
          */
         if (fDst & INTNETTRUNKDIR_HOST)
@@ -1175,4 +1180,9 @@
                 void *pvEthHdr = mbuf_data(pMBuf);
                 unsigned const cbEthHdr = 14;
+                struct ifnet_stat_increment_param stats;
+
+                RT_ZERO(stats);
+                stats.packets_in = 1;
+                stats.bytes_in = mbuf_len(pMBuf); /* full ethernet frame */
 
                 mbuf_pkthdr_setrcvif(pMBuf, pIfNet);
@@ -1181,5 +1191,5 @@
 
                 bpf_tap_in(pIfNet, DLT_EN10MB, pMBuf, pvEthHdr, cbEthHdr);
-                errno_t err = ifnet_input(pIfNet, pMBuf, NULL);
+                errno_t err = ifnet_input(pIfNet, pMBuf, &stats);
                 if (err)
                     rc = RTErrConvertFromErrno(err);
