Index: sys/dev/bnxt/bnxt_en/if_bnxt.c =================================================================== --- sys/dev/bnxt/bnxt_en/if_bnxt.c +++ sys/dev/bnxt/bnxt_en/if_bnxt.c @@ -3731,12 +3731,38 @@ static uint64_t bnxt_get_counter(if_ctx_t ctx, ift_counter cnt) { + struct bnxt_softc *softc = iflib_get_softc(ctx); if_t ifp = iflib_get_ifp(ctx); - if (cnt < IFCOUNTERS) - return if_get_counter_default(ifp, cnt); + if (cnt >= IFCOUNTERS) + return 0; - return 0; + switch (cnt) { + case IFCOUNTER_IPACKETS: + return (softc->rx_port_stats->rx_total_frames); + case IFCOUNTER_OPACKETS: + return (softc->tx_port_stats->tx_total_frames); + case IFCOUNTER_IBYTES: + return (softc->rx_port_stats->rx_bytes); + case IFCOUNTER_OBYTES: + return (softc->tx_port_stats->tx_bytes); + case IFCOUNTER_IMCASTS: + return (softc->rx_port_stats->rx_mcast_frames); + case IFCOUNTER_OMCASTS: + return (softc->tx_port_stats->tx_mcast_frames); + case IFCOUNTER_COLLISIONS: + return (softc->tx_port_stats->tx_total_collisions); + case IFCOUNTER_IQDROPS: + return (softc->rx_port_stats->rx_stat_discard); + case IFCOUNTER_OQDROPS: + return (softc->tx_port_stats->tx_stat_discard); + case IFCOUNTER_IERRORS: + return (softc->rx_port_stats->rx_stat_err); + case IFCOUNTER_OERRORS: + return (softc->tx_port_stats->tx_stat_error); + default: + return (if_get_counter_default(ifp, cnt)); + } } static void