diff options
author | kmacy <kmacy@FreeBSD.org> | 2008-12-17 08:12:50 +0000 |
---|---|---|
committer | kmacy <kmacy@FreeBSD.org> | 2008-12-17 08:12:50 +0000 |
commit | 7efe2ccd487653a48a680daec35810cb43bdb1f2 (patch) | |
tree | ca34783be25df5766e77748292e76d4c92011158 /sys/net | |
parent | 39a3668dccb441d4080c6f8653899b5361f948e7 (diff) | |
download | FreeBSD-src-7efe2ccd487653a48a680daec35810cb43bdb1f2.zip FreeBSD-src-7efe2ccd487653a48a680daec35810cb43bdb1f2.tar.gz |
Keep stats in drbr_enqueue
Discussed with: ps
Diffstat (limited to 'sys/net')
-rw-r--r-- | sys/net/if_var.h | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/sys/net/if_var.h b/sys/net/if_var.h index 6e6d2db..250bed9 100644 --- a/sys/net/if_var.h +++ b/sys/net/if_var.h @@ -550,16 +550,29 @@ do { \ } while (0) #ifdef _KERNEL +static __inline void +drbr_stats_update(struct ifnet *ifp, int len, int mflags) +{ + + ifp->if_obytes += len; + if (mflags & M_MCAST) + ifp->if_omcasts++; +} + static __inline int -drbr_enqueue(struct buf_ring *br, struct mbuf *m) +drbr_enqueue(struct ifnet *ifp, struct buf_ring *br, struct mbuf *m) { int error = 0; + int len = m->m_pkthdr.len; + int mflags = m->m_flags; if ((error = buf_ring_enqueue(br, m)) == ENOBUFS) { br->br_drops++; + _IF_DROP(&ifp->if_snd); m_freem(m); - } - + } else + drbr_stats_update(ifp, len, mflags); + return (error); } |