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;