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:59:09 +0200
commit5650e92685929911d7feefd3ec4bcf9d36fc249d (patch)
treea1830580e290ef847b619368820a8db74fa3f3da
parentlibbsd.txt: Move issues and TODO (diff)
downloadrtems-libbsd-5650e92685929911d7feefd3ec4bcf9d36fc249d.tar.bz2
if_atsam: Allow stats reset via sysctl
Update #4652.
-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);