diff --git a/sys/net/rtsock.c b/sys/net/rtsock.c index 1fb8821..817c553 100644 --- a/sys/net/rtsock.c +++ b/sys/net/rtsock.c @@ -1313,6 +1313,26 @@ sysctl_dumpentry(struct radix_node *rn, void *vw) return (0); } +static void +ifnet_gather_stats(struct ifnet *ifp, struct if_data *ifd) +{ + + /* Rewrite previous statistics */ + bzero(ifd, sizeof(*ifd)); + + IFNET_STAT_GET(ifp, ipackets, ifd->ifi_ipackets); + IFNET_STAT_GET(ifp, ierrors, ifd->ifi_ierrors); + IFNET_STAT_GET(ifp, opackets, ifd->ifi_opackets); + IFNET_STAT_GET(ifp, collisions, ifd->ifi_collisions); + IFNET_STAT_GET(ifp, ibytes, ifd->ifi_ibytes); + IFNET_STAT_GET(ifp, obytes, ifd->ifi_obytes); + IFNET_STAT_GET(ifp, imcasts, ifd->ifi_imcasts); + IFNET_STAT_GET(ifp, omcasts, ifd->ifi_omcasts); + IFNET_STAT_GET(ifp, iqdrops, ifd->ifi_iqdrops); + IFNET_STAT_GET(ifp, noproto, ifd->ifi_noproto); + +} + static int sysctl_iflist(int af, struct walkarg *w) { @@ -1340,7 +1360,7 @@ sysctl_iflist(int af, struct walkarg *w) ifm->ifm_index = ifp->if_index; ifm->ifm_flags = ifp->if_flags; - ifm->ifm_data = ifp->if_data; + ifnet_gather_stats(ifp, &ifm->ifm_data); ifm->ifm_addrs = rtinfo.rti_addrs; error = SYSCTL_OUT(w->w_req, ifm, msglen); if (error)