diff --git a/sys/net/if_vxlan.c b/sys/net/if_vxlan.c --- a/sys/net/if_vxlan.c +++ b/sys/net/if_vxlan.c @@ -2504,7 +2504,7 @@ struct ip *ip; struct in_addr srcaddr, dstaddr; uint16_t srcport, dstport; - int len, mcast, error; + int plen, len, mcast, error; struct route route, *ro; struct sockaddr_in *sin; uint32_t csum_flags; @@ -2517,6 +2517,7 @@ dstaddr = fvxlsa->in4.sin_addr; dstport = fvxlsa->in4.sin_port; + plen = m->m_pkthdr.len; M_PREPEND(m, sizeof(struct ip) + sizeof(struct vxlanudphdr), M_NOWAIT); if (m == NULL) { @@ -2594,7 +2595,7 @@ error = ip_output(m, NULL, ro, 0, sc->vxl_im4o, NULL); if (error == 0) { if_inc_counter(ifp, IFCOUNTER_OPACKETS, 1); - if_inc_counter(ifp, IFCOUNTER_OBYTES, len); + if_inc_counter(ifp, IFCOUNTER_OBYTES, plen); if (mcast != 0) if_inc_counter(ifp, IFCOUNTER_OMCASTS, 1); } else @@ -2616,7 +2617,7 @@ struct ip6_hdr *ip6; const struct in6_addr *srcaddr, *dstaddr; uint16_t srcport, dstport; - int len, mcast, error; + int plen, len, mcast, error; struct route_in6 route, *ro; struct sockaddr_in6 *sin6; uint32_t csum_flags; @@ -2629,6 +2630,7 @@ dstaddr = &fvxlsa->in6.sin6_addr; dstport = fvxlsa->in6.sin6_port; + plen = m->m_pkthdr.len; M_PREPEND(m, sizeof(struct ip6_hdr) + sizeof(struct vxlanudphdr), M_NOWAIT); if (m == NULL) { @@ -2712,7 +2714,7 @@ error = ip6_output(m, NULL, ro, 0, sc->vxl_im6o, NULL, NULL); if (error == 0) { if_inc_counter(ifp, IFCOUNTER_OPACKETS, 1); - if_inc_counter(ifp, IFCOUNTER_OBYTES, len); + if_inc_counter(ifp, IFCOUNTER_OBYTES, plen); if (mcast != 0) if_inc_counter(ifp, IFCOUNTER_OMCASTS, 1); } else