Module Name:    src
Committed By:   riastradh
Date:           Sat Jun 29 13:00:45 UTC 2024

Modified Files:
        src/sys/netinet6: icmp6.c ip6_flow.c ip6_forward.c ip6_input.c

Log Message:
netinet6: Use _NET_STAT* API instead of direct array access.

XXX Exception: ip6flow_addstats_rt _assigns_ one of the `statistics'
to the current count of ip6 flows in use, and we don't have anything
in the _NET_STAT* API for that.  So for now I abuse the abstraction,
until we sort out this one exceptional case properly.

PR kern/58380


To generate a diff of this commit:
cvs rdiff -u -r1.256 -r1.257 src/sys/netinet6/icmp6.c
cvs rdiff -u -r1.42 -r1.43 src/sys/netinet6/ip6_flow.c
cvs rdiff -u -r1.102 -r1.103 src/sys/netinet6/ip6_forward.c
cvs rdiff -u -r1.227 -r1.228 src/sys/netinet6/ip6_input.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/netinet6/icmp6.c
diff -u src/sys/netinet6/icmp6.c:1.256 src/sys/netinet6/icmp6.c:1.257
--- src/sys/netinet6/icmp6.c:1.256	Sat Feb 24 21:41:13 2024
+++ src/sys/netinet6/icmp6.c	Sat Jun 29 13:00:44 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: icmp6.c,v 1.256 2024/02/24 21:41:13 mlelstv Exp $	*/
+/*	$NetBSD: icmp6.c,v 1.257 2024/06/29 13:00:44 riastradh Exp $	*/
 /*	$KAME: icmp6.c,v 1.217 2001/06/20 15:03:29 jinmei Exp $	*/
 
 /*
@@ -62,7 +62,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: icmp6.c,v 1.256 2024/02/24 21:41:13 mlelstv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: icmp6.c,v 1.257 2024/06/29 13:00:44 riastradh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_compat_netbsd.h"
@@ -694,9 +694,10 @@ _icmp6_input(struct mbuf *m, int off, in
 		nicmp6->icmp6_type = ICMP6_ECHO_REPLY;
 		nicmp6->icmp6_code = 0;
 		if (n) {
-			uint64_t *icmp6s = ICMP6_STAT_GETREF();
-			icmp6s[ICMP6_STAT_REFLECT]++;
-			icmp6s[ICMP6_STAT_OUTHIST + ICMP6_ECHO_REPLY]++;
+			net_stat_ref_t icmp6s = ICMP6_STAT_GETREF();
+			_NET_STATINC_REF(icmp6s, ICMP6_STAT_REFLECT);
+			_NET_STATINC_REF(icmp6s,
+			    ICMP6_STAT_OUTHIST + ICMP6_ECHO_REPLY);
 			ICMP6_STAT_PUTREF();
 			icmp6_reflect(n, off);
 		}
@@ -807,9 +808,10 @@ _icmp6_input(struct mbuf *m, int off, in
 			nicmp6->icmp6_code = 0;
 		}
 		if (n) {
-			uint64_t *icmp6s = ICMP6_STAT_GETREF();
-			icmp6s[ICMP6_STAT_REFLECT]++;
-			icmp6s[ICMP6_STAT_OUTHIST + ICMP6_WRUREPLY]++;
+			net_stat_ref_t icmp6s = ICMP6_STAT_GETREF();
+			_NET_STATINC_REF(icmp6s, ICMP6_STAT_REFLECT);
+			_NET_STATINC_REF(icmp6s,
+			    ICMP6_STAT_OUTHIST + ICMP6_WRUREPLY);
 			ICMP6_STAT_PUTREF();
 			icmp6_reflect(n, sizeof(struct ip6_hdr));
 		}

Index: src/sys/netinet6/ip6_flow.c
diff -u src/sys/netinet6/ip6_flow.c:1.42 src/sys/netinet6/ip6_flow.c:1.43
--- src/sys/netinet6/ip6_flow.c:1.42	Fri Feb 19 14:52:00 2021
+++ src/sys/netinet6/ip6_flow.c	Sat Jun 29 13:00:44 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: ip6_flow.c,v 1.42 2021/02/19 14:52:00 christos Exp $	*/
+/*	$NetBSD: ip6_flow.c,v 1.43 2024/06/29 13:00:44 riastradh Exp $	*/
 
 /*
  * Copyright (c) 2007 The NetBSD Foundation, Inc.
@@ -38,7 +38,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ip6_flow.c,v 1.42 2021/02/19 14:52:00 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ip6_flow.c,v 1.43 2024/06/29 13:00:44 riastradh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_net_mpsafe.h"
@@ -379,17 +379,17 @@ out:
 static void
 ip6flow_addstats_rt(struct rtentry *rt, struct ip6flow *ip6f)
 {
-	uint64_t *ip6s;
+	net_stat_ref_t ip6s;
 
 	if (rt != NULL)
 		rt->rt_use += ip6f->ip6f_uses;
 	ip6s = IP6_STAT_GETREF();
-	ip6s[IP6_STAT_FASTFORWARDFLOWS] = ip6flow_inuse;
-	ip6s[IP6_STAT_CANTFORWARD] += ip6f->ip6f_dropped;
-	ip6s[IP6_STAT_ODROPPED] += ip6f->ip6f_dropped;
-	ip6s[IP6_STAT_TOTAL] += ip6f->ip6f_uses;
-	ip6s[IP6_STAT_FORWARD] += ip6f->ip6f_forwarded;
-	ip6s[IP6_STAT_FASTFORWARD] += ip6f->ip6f_forwarded;
+	ip6s->nsr_stats[IP6_STAT_FASTFORWARDFLOWS-1] = ip6flow_inuse; /* XXX */
+	_NET_STATADD_REF(ip6s, IP6_STAT_CANTFORWARD, ip6f->ip6f_dropped);
+	_NET_STATADD_REF(ip6s, IP6_STAT_ODROPPED, ip6f->ip6f_dropped);
+	_NET_STATADD_REF(ip6s, IP6_STAT_TOTAL, ip6f->ip6f_uses);
+	_NET_STATADD_REF(ip6s, IP6_STAT_FORWARD, ip6f->ip6f_forwarded);
+	_NET_STATADD_REF(ip6s, IP6_STAT_FASTFORWARD, ip6f->ip6f_forwarded);
 	IP6_STAT_PUTREF();
 }
 

Index: src/sys/netinet6/ip6_forward.c
diff -u src/sys/netinet6/ip6_forward.c:1.102 src/sys/netinet6/ip6_forward.c:1.103
--- src/sys/netinet6/ip6_forward.c:1.102	Fri Aug 28 06:32:24 2020
+++ src/sys/netinet6/ip6_forward.c	Sat Jun 29 13:00:44 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: ip6_forward.c,v 1.102 2020/08/28 06:32:24 ozaki-r Exp $	*/
+/*	$NetBSD: ip6_forward.c,v 1.103 2024/06/29 13:00:44 riastradh Exp $	*/
 /*	$KAME: ip6_forward.c,v 1.109 2002/09/11 08:10:17 sakane Exp $	*/
 
 /*
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ip6_forward.c,v 1.102 2020/08/28 06:32:24 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ip6_forward.c,v 1.103 2024/06/29 13:00:44 riastradh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_gateway.h"
@@ -78,13 +78,13 @@ ip6_cantforward(const struct ip6_hdr *ip
 	char sbuf[INET6_ADDRSTRLEN], dbuf[INET6_ADDRSTRLEN];
 	char reason[256];
 	va_list ap;
-	uint64_t *ip6s;
+	net_stat_ref_t ip6s;
 
 	/* update statistics */
 	ip6s = IP6_STAT_GETREF();
-	ip6s[IP6_STAT_CANTFORWARD]++;
+	_NET_STATINC_REF(ip6s, IP6_STAT_CANTFORWARD);
 	if (dstifp)
-		ip6s[IP6_STAT_BADSCOPE]++;
+		_NET_STATINC_REF(ip6s, IP6_STAT_BADSCOPE);
 	IP6_STAT_PUTREF();
 
 	if (dstifp)

Index: src/sys/netinet6/ip6_input.c
diff -u src/sys/netinet6/ip6_input.c:1.227 src/sys/netinet6/ip6_input.c:1.228
--- src/sys/netinet6/ip6_input.c:1.227	Fri Oct 28 05:18:39 2022
+++ src/sys/netinet6/ip6_input.c	Sat Jun 29 13:00:44 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: ip6_input.c,v 1.227 2022/10/28 05:18:39 ozaki-r Exp $	*/
+/*	$NetBSD: ip6_input.c,v 1.228 2024/06/29 13:00:44 riastradh Exp $	*/
 /*	$KAME: ip6_input.c,v 1.188 2001/03/29 05:34:31 itojun Exp $	*/
 
 /*
@@ -62,7 +62,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ip6_input.c,v 1.227 2022/10/28 05:18:39 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ip6_input.c,v 1.228 2024/06/29 13:00:44 riastradh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_gateway.h"
@@ -421,9 +421,9 @@ ip6_input(struct mbuf *m, struct ifnet *
 		if (ingroup) {
 			ours = 1;
 		} else if (!ip6_mrouter) {
-			uint64_t *ip6s = IP6_STAT_GETREF();
-			ip6s[IP6_STAT_NOTMEMBER]++;
-			ip6s[IP6_STAT_CANTFORWARD]++;
+			net_stat_ref_t ip6s = IP6_STAT_GETREF();
+			_NET_STATINC_REF(ip6s, IP6_STAT_NOTMEMBER);
+			_NET_STATINC_REF(ip6s, IP6_STAT_CANTFORWARD);
 			IP6_STAT_PUTREF();
 			in6_ifstat_inc(rcvif, ifs6_in_discard);
 			goto bad_unref;

Reply via email to