if_atsam: Allow stats reset via sysctl

Update #4651.
This commit is contained in:
Sebastian Huber 2022-05-25 09:26:53 +02:00
parent ea80d58015
commit f05e62515b

View File

@ -1128,6 +1128,28 @@ if_atsam_poll_hw_stats(struct if_atsam_softc *sc)
sc->stats.udp_checksum_errors += pHw->GMAC_UCE; 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 static void
if_atsam_add_sysctls(device_t dev) if_atsam_add_sysctls(device_t dev)
@ -1146,6 +1168,9 @@ if_atsam_add_sysctls(device_t dev)
NULL, "if_atsam statistics"); NULL, "if_atsam statistics");
statsnode = SYSCTL_CHILDREN(tree); 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, tree = SYSCTL_ADD_NODE(ctx, statsnode, OID_AUTO, "sw", CTLFLAG_RD,
NULL, "if_atsam software statistics"); NULL, "if_atsam software statistics");
child = SYSCTL_CHILDREN(tree); child = SYSCTL_CHILDREN(tree);