svn commit: r271691 - head/sys/net
Alexander V. Chernikov
melifaro at FreeBSD.org
Tue Sep 16 21:48:49 UTC 2014
Author: melifaro
Date: Tue Sep 16 21:48:48 2014
New Revision: 271691
URL: http://svnweb.freebsd.org/changeset/base/271691
Log:
* Fix if_omcast handling
* Convert if_oerrors to pcpu.
Suggested by: glebius
MFC after: 2 weeks
Modified:
head/sys/net/if_vlan.c
Modified: head/sys/net/if_vlan.c
==============================================================================
--- head/sys/net/if_vlan.c Tue Sep 16 21:26:24 2014 (r271690)
+++ head/sys/net/if_vlan.c Tue Sep 16 21:48:48 2014 (r271691)
@@ -104,14 +104,15 @@ struct vlan_mc_entry {
struct ifvlan {
struct ifvlantrunk *ifv_trunk;
struct ifnet *ifv_ifp;
- void *ifv_cookie;
counter_u64_t ifv_ipackets;
counter_u64_t ifv_ibytes;
counter_u64_t ifv_opackets;
counter_u64_t ifv_obytes;
counter_u64_t ifv_omcasts;
+ counter_u64_t ifv_oerrors;
#define TRUNK(ifv) ((ifv)->ifv_trunk)
#define PARENT(ifv) ((ifv)->ifv_trunk->parent)
+ void *ifv_cookie;
int ifv_pflags; /* special flags we have set on parent */
struct ifv_linkmib {
int ifvm_encaplen; /* encapsulation length */
@@ -959,6 +960,7 @@ vlan_clone_create(struct if_clone *ifc,
ifv->ifv_ibytes = counter_u64_alloc(M_WAITOK);
ifv->ifv_obytes = counter_u64_alloc(M_WAITOK);
ifv->ifv_omcasts = counter_u64_alloc(M_WAITOK);
+ ifv->ifv_oerrors = counter_u64_alloc(M_WAITOK);
ifp->if_softc = ifv;
/*
@@ -1026,6 +1028,7 @@ vlan_clone_destroy(struct if_clone *ifc,
counter_u64_free(ifv->ifv_ibytes);
counter_u64_free(ifv->ifv_obytes);
counter_u64_free(ifv->ifv_omcasts);
+ counter_u64_free(ifv->ifv_oerrors);
free(ifv, M_VLAN);
ifc_free_unit(ifc, unit);
@@ -1063,7 +1066,7 @@ vlan_transmit(struct ifnet *ifp, struct
*/
if (!UP_AND_RUNNING(p)) {
m_freem(m);
- ifp->if_oerrors++;
+ counter_u64_add(ifv->ifv_oerrors, 1);
return (ENETDOWN);
}
@@ -1090,7 +1093,7 @@ vlan_transmit(struct ifnet *ifp, struct
if (n > 0) {
if_printf(ifp, "cannot pad short frame\n");
- ifp->if_oerrors++;
+ counter_u64_add(ifv->ifv_oerrors, 1);
m_freem(m);
return (0);
}
@@ -1110,7 +1113,7 @@ vlan_transmit(struct ifnet *ifp, struct
m = ether_vlanencap(m, ifv->ifv_vid);
if (m == NULL) {
if_printf(ifp, "unable to prepend VLAN header\n");
- ifp->if_oerrors++;
+ counter_u64_add(ifv->ifv_oerrors, 1);
return (0);
}
}
@@ -1122,9 +1125,9 @@ vlan_transmit(struct ifnet *ifp, struct
if (error == 0) {
counter_u64_add(ifv->ifv_opackets, 1);
counter_u64_add(ifv->ifv_obytes, len);
- counter_u64_add(ifv->ifv_omcasts, 1);
+ counter_u64_add(ifv->ifv_omcasts, mcast);
} else
- ifp->if_oerrors++;
+ counter_u64_add(ifv->ifv_oerrors, 1);
return (error);
}
@@ -1146,6 +1149,8 @@ vlan_get_counter(struct ifnet *ifp, ifne
return (counter_u64_fetch(ifv->ifv_obytes));
case IFCOUNTER_OMCASTS:
return (counter_u64_fetch(ifv->ifv_omcasts));
+ case IFCOUNTER_OERRORS:
+ return (counter_u64_fetch(ifv->ifv_oerrors));
default:
return (if_get_counter_compat(ifp, cnt));
}
More information about the svn-src-all
mailing list