Index: sys/dev/ixgbe/ixgbe.c
===================================================================
--- sys/dev/ixgbe/ixgbe.c	(revision 239102)
+++ sys/dev/ixgbe/ixgbe.c	(working copy)
@@ -3519,7 +3519,6 @@
 ixgbe_txeof(struct tx_ring *txr)
 {
 	struct adapter	*adapter = txr->adapter;
-	struct ifnet	*ifp = adapter->ifp;
 	u32	first, last, done, processed;
 	struct ixgbe_tx_buf *tx_buffer;
 	struct ixgbe_legacy_tx_desc *tx_desc, *eop_desc;
@@ -3527,8 +3526,8 @@
 	mtx_assert(&txr->tx_mtx, MA_OWNED);
 
 #ifdef DEV_NETMAP
-	if (ifp->if_capenable & IFCAP_NETMAP) {
-		struct netmap_adapter *na = NA(ifp);
+	if (adapter->ifp->if_capenable & IFCAP_NETMAP) {
+		struct netmap_adapter *na = NA(adapter->ifp);
 		struct netmap_kring *kring = &na->tx_rings[txr->me];
 
 		tx_desc = (struct ixgbe_legacy_tx_desc *)txr->tx_base;
@@ -3630,7 +3629,6 @@
 			    (struct ixgbe_legacy_tx_desc *)&txr->tx_base[first];
 		}
 		++txr->packets;
-		++ifp->if_opackets;
 		/* See if there is more work now */
 		last = tx_buffer->eop_index;
 		if (last != -1) {
@@ -4503,7 +4501,7 @@
 		/* Make sure bad packets are discarded */
 		if (((staterr & IXGBE_RXDADV_ERR_FRAME_ERR_MASK) != 0) ||
 		    (rxr->discard)) {
-			ifp->if_ierrors++;
+			adapter->dropped_pkts++;
 			rxr->rx_discarded++;
 			if (eop)
 				rxr->discard = FALSE;
@@ -4644,11 +4642,12 @@
 		/* Sending this frame? */
 		if (eop) {
 			sendmp->m_pkthdr.rcvif = ifp;
-			ifp->if_ipackets++;
 			rxr->rx_packets++;
+			rxr->rx_bytes += sendmp->m_pkthdr.len;
+
 			/* capture data for AIM */
+			rxr->packets++;
 			rxr->bytes += sendmp->m_pkthdr.len;
-			rxr->rx_bytes += sendmp->m_pkthdr.len;
 			if ((ifp->if_capenable & IFCAP_RXCSUM) != 0)
 				ixgbe_rx_checksum(staterr, sendmp, ptype);
 #if __FreeBSD_version >= 800000
@@ -5168,6 +5167,8 @@
 		adapter->stats.pxon2offc[i] +=
 		    IXGBE_READ_REG(hw, IXGBE_PXON2OFFCNT(i));
 	}
+	adapter->stats.mpctotal = total_missed_rx;
+
 	for (int i = 0; i < 16; i++) {
 		adapter->stats.qprc[i] += IXGBE_READ_REG(hw, IXGBE_QPRC(i));
 		adapter->stats.qptc[i] += IXGBE_READ_REG(hw, IXGBE_QPTC(i));
@@ -5252,10 +5253,10 @@
 	adapter->stats.ptc1522 += IXGBE_READ_REG(hw, IXGBE_PTC1522);
 	adapter->stats.bptc += IXGBE_READ_REG(hw, IXGBE_BPTC);
 	adapter->stats.xec += IXGBE_READ_REG(hw, IXGBE_XEC);
-	adapter->stats.fccrc += IXGBE_READ_REG(hw, IXGBE_FCCRC);
-	adapter->stats.fclast += IXGBE_READ_REG(hw, IXGBE_FCLAST);
 	/* Only read FCOE on 82599 */
 	if (hw->mac.type != ixgbe_mac_82598EB) {
+		adapter->stats.fccrc += IXGBE_READ_REG(hw, IXGBE_FCCRC);
+		adapter->stats.fclast += IXGBE_READ_REG(hw, IXGBE_FCLAST);
 		adapter->stats.fcoerpdc += IXGBE_READ_REG(hw, IXGBE_FCOERPDC);
 		adapter->stats.fcoeprc += IXGBE_READ_REG(hw, IXGBE_FCOEPRC);
 		adapter->stats.fcoeptc += IXGBE_READ_REG(hw, IXGBE_FCOEPTC);
@@ -5273,7 +5274,7 @@
 
 	/* Rx Errors */
 	ifp->if_ierrors = total_missed_rx + adapter->stats.crcerrs +
-		adapter->stats.rlec;
+		adapter->stats.rlec + adapter->dropped_pkts;
 }
 
 /** ixgbe_sysctl_tdh_handler - Handler function
@@ -5484,8 +5485,7 @@
 				"LRO Flushed");
 	}
 
-	/* MAC stats get the own sub node */
-
+	/* MAC stats get their own sub node */
 	stat_node = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, "mac_stats", 
 				    CTLFLAG_RD, NULL, "MAC Statistics");
 	stat_list = SYSCTL_CHILDREN(stat_node);
@@ -5502,6 +5502,9 @@
 	SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "short_discards",
 			CTLFLAG_RD, &stats->mspdc,
 			"MAC Short Packets Discarded");
+	SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "missed_packets",
+			CTLFLAG_RD, &stats->mpctotal,
+			"Missed Packets");
 	SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "local_faults",
 			CTLFLAG_RD, &stats->mlfc,
 			"MAC Local Faults");
