summaryrefslogtreecommitdiffstats
path: root/sys/net/if_vlan.c
diff options
context:
space:
mode:
authoryongari <yongari@FreeBSD.org>2011-12-29 18:40:58 +0000
committeryongari <yongari@FreeBSD.org>2011-12-29 18:40:58 +0000
commit69a9d9792b2212389b3858aaca3b6cd5db06da58 (patch)
tree579f657f05faf1e619eaae8a272741c1940333c8 /sys/net/if_vlan.c
parent7a0151720c2fe467008a6d652b662b6bf34f8f4b (diff)
downloadFreeBSD-src-69a9d9792b2212389b3858aaca3b6cd5db06da58.zip
FreeBSD-src-69a9d9792b2212389b3858aaca3b6cd5db06da58.tar.gz
Update if_obytes and if_omcast after successful transmit.
While I'm here update if_oerrors if parent interface of vlan is not up and running. Previously it updated collision counter and it was confusing to interprete it. PR: kern/163478 Reviewed by: glebius, jhb Tested by: Joe Holden < lists <> rewt dot org dot uk >
Diffstat (limited to 'sys/net/if_vlan.c')
-rw-r--r--sys/net/if_vlan.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/sys/net/if_vlan.c b/sys/net/if_vlan.c
index 51e1c6c..7fea183 100644
--- a/sys/net/if_vlan.c
+++ b/sys/net/if_vlan.c
@@ -1012,10 +1012,12 @@ vlan_transmit(struct ifnet *ifp, struct mbuf *m)
{
struct ifvlan *ifv;
struct ifnet *p;
- int error;
+ int error, len, mcast;
ifv = ifp->if_softc;
p = PARENT(ifv);
+ len = m->m_pkthdr.len;
+ mcast = (m->m_flags & (M_MCAST | M_BCAST)) ? 1 : 0;
BPF_MTAP(ifp, m);
@@ -1025,7 +1027,7 @@ vlan_transmit(struct ifnet *ifp, struct mbuf *m)
*/
if (!UP_AND_RUNNING(p)) {
m_freem(m);
- ifp->if_collisions++;
+ ifp->if_oerrors++;
return (0);
}
@@ -1081,9 +1083,11 @@ vlan_transmit(struct ifnet *ifp, struct mbuf *m)
* Send it, precisely as ether_output() would have.
*/
error = (p->if_transmit)(p, m);
- if (!error)
+ if (!error) {
ifp->if_opackets++;
- else
+ ifp->if_omcasts += mcast;
+ ifp->if_obytes += len;
+ } else
ifp->if_oerrors++;
return (error);
}
OpenPOWER on IntegriCloud