diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2022-05-25 09:26:53 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2022-06-01 09:59:09 +0200 |
commit | 5650e92685929911d7feefd3ec4bcf9d36fc249d (patch) | |
tree | a1830580e290ef847b619368820a8db74fa3f3da /rtemsbsd/sys/dev | |
parent | libbsd.txt: Move issues and TODO (diff) | |
download | rtems-libbsd-5650e92685929911d7feefd3ec4bcf9d36fc249d.tar.bz2 |
if_atsam: Allow stats reset via sysctl
Update #4652.
Diffstat (limited to 'rtemsbsd/sys/dev')
-rw-r--r-- | rtemsbsd/sys/dev/atsam/if_atsam.c | 25 |
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); |