git: b16d7d17d197 - stable/12 - if_vxlan(4): Correct the statistic for output bytes

From: Zhenlei Huang <zlei_at_FreeBSD.org>
Date: Fri, 13 Jan 2023 04:33:37 UTC
The branch stable/12 has been updated by zlei:

URL: https://cgit.FreeBSD.org/src/commit/?id=b16d7d17d197b22c775d7ac609e0f753cb975efc

commit b16d7d17d197b22c775d7ac609e0f753cb975efc
Author:     Zhenlei Huang <zlei.huang@gmail.com>
AuthorDate: 2022-10-07 11:37:12 +0000
Commit:     Zhenlei Huang <zlei@FreeBSD.org>
CommitDate: 2023-01-13 04:30:20 +0000

    if_vxlan(4): Correct the statistic for output bytes
    
    The vxlan interface encapsulates the Ethernet frame by prepending IP/UDP
    and vxlan headers. For statistics, only the payload, i.e. the
    encapsulated (inner) frame should be counted.
    
    Event:          Aberdeen Hackathon 2022
    Reviewed by:    kp
    Approved by:    kp (mentor)
    Differential Revision:  https://reviews.freebsd.org/D36855
    
    (cherry picked from commit de1ea2d5171ec53acd69f93821b9507267ee44b7)
    (cherry picked from commit faa7d6c2f94aee09cdc92142d51a0b2eb12b3239)
---
 sys/net/if_vxlan.c | 16 +++++++---------
 1 file changed, 7 insertions(+), 9 deletions(-)

diff --git a/sys/net/if_vxlan.c b/sys/net/if_vxlan.c
index fc59e9fef820..f31b5dc5b2cd 100644
--- a/sys/net/if_vxlan.c
+++ b/sys/net/if_vxlan.c
@@ -2349,7 +2349,7 @@ vxlan_encap4(struct vxlan_softc *sc, const union vxlan_sockaddr *fvxlsa,
 	struct ip *ip;
 	struct in_addr srcaddr, dstaddr;
 	uint16_t srcport, dstport;
-	int len, mcast, error;
+	int plen, mcast, error;
 
 	ifp = sc->vxl_ifp;
 	srcaddr = sc->vxl_src_addr.in4.sin_addr;
@@ -2357,6 +2357,7 @@ vxlan_encap4(struct vxlan_softc *sc, const union vxlan_sockaddr *fvxlsa,
 	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) {
@@ -2364,11 +2365,9 @@ vxlan_encap4(struct vxlan_softc *sc, const union vxlan_sockaddr *fvxlsa,
 		return (ENOBUFS);
 	}
 
-	len = m->m_pkthdr.len;
-
 	ip = mtod(m, struct ip *);
 	ip->ip_tos = 0;
-	ip->ip_len = htons(len);
+	ip->ip_len = htons(m->m_pkthdr.len);
 	ip->ip_off = 0;
 	ip->ip_ttl = sc->vxl_ttl;
 	ip->ip_p = IPPROTO_UDP;
@@ -2384,7 +2383,7 @@ vxlan_encap4(struct vxlan_softc *sc, const union vxlan_sockaddr *fvxlsa,
 	error = ip_output(m, NULL, NULL, 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
@@ -2406,7 +2405,7 @@ vxlan_encap6(struct vxlan_softc *sc, const union vxlan_sockaddr *fvxlsa,
 	struct ip6_hdr *ip6;
 	const struct in6_addr *srcaddr, *dstaddr;
 	uint16_t srcport, dstport;
-	int len, mcast, error;
+	int plen, mcast, error;
 
 	ifp = sc->vxl_ifp;
 	srcaddr = &sc->vxl_src_addr.in6.sin6_addr;
@@ -2414,6 +2413,7 @@ vxlan_encap6(struct vxlan_softc *sc, const union vxlan_sockaddr *fvxlsa,
 	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) {
@@ -2421,8 +2421,6 @@ vxlan_encap6(struct vxlan_softc *sc, const union vxlan_sockaddr *fvxlsa,
 		return (ENOBUFS);
 	}
 
-	len = m->m_pkthdr.len;
-
 	ip6 = mtod(m, struct ip6_hdr *);
 	ip6->ip6_flow = 0;		/* BMV: Keep in forwarding entry? */
 	ip6->ip6_vfc = IPV6_VERSION;
@@ -2452,7 +2450,7 @@ vxlan_encap6(struct vxlan_softc *sc, const union vxlan_sockaddr *fvxlsa,
 	error = ip6_output(m, NULL, NULL, 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