summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2022-05-25 09:26:53 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2022-06-01 09:55:25 +0200
commitf05e62515bc0dffe76fb8c456098f594f6f159a4 (patch)
treec5eb6df14bf4b2cb0c921f1cbce94f29e5214ef8
parenttcpdump: Do not use signals and chroot (diff)
downloadrtems-libbsd-f05e62515bc0dffe76fb8c456098f594f6f159a4.tar.bz2
if_atsam: Allow stats reset via sysctl
Update #4651.
-rw-r--r--rtemsbsd/sys/dev/atsam/if_atsam.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/rtemsbsd/sys/dev/atsam/if_atsam.c b/rtemsbsd/sys/dev/atsam/if_atsam.c
index f7ab01d4..970cb67b 100644
--- a/rtemsbsd/sys/dev/atsam/if_atsam.c
+++ b/rtemsbsd/sys/dev/atsam/if_atsam.c
@@ -1128,6 +1128,28 @@ if_atsam_poll_hw_stats(struct if_atsam_softc *sc)
sc->stats.udp_checksum_errors += pHw->GMAC_UCE;
}
+static int
+if_atsam_stats_reset(SYSCTL_HANDLER_ARGS)
+{
+ struct if_atsam_softc *sc = arg1;
+ int value;
+ int error;
+
+ value = 0;
+ error = sysctl_handle_int(oidp, &value, 0, req);
+ if (error != 0 || req->newptr == NULL) {
+ return (error);
+ }
+
+ if (value != 0) {
+ IF_ATSAM_LOCK(sc);
+ if_atsam_poll_hw_stats(sc);
+ memset(&sc->stats, 0, sizeof(sc->stats));
+ IF_ATSAM_UNLOCK(sc);
+ }
+
+ return (0);
+}
static void
if_atsam_add_sysctls(device_t dev)
@@ -1146,6 +1168,9 @@ if_atsam_add_sysctls(device_t dev)
NULL, "if_atsam statistics");
statsnode = SYSCTL_CHILDREN(tree);
+ SYSCTL_ADD_PROC(ctx, statsnode, OID_AUTO, "reset", CTLTYPE_INT |
+ CTLFLAG_WR, sc, 0, if_atsam_stats_reset, "I", "Reset");
+
tree = SYSCTL_ADD_NODE(ctx, statsnode, OID_AUTO, "sw", CTLFLAG_RD,
NULL, "if_atsam software statistics");
child = SYSCTL_CHILDREN(tree);