xref: /illumos-gate/usr/src/man/man9e/mc_getstat.9e (revision 72d3dbb9ab4481606cb93caca98ba3b3a8eb6ce2)
152d2369aSRobert Mustacchi.\"
252d2369aSRobert Mustacchi.\" This file and its contents are supplied under the terms of the
352d2369aSRobert Mustacchi.\" Common Development and Distribution License ("CDDL"), version 1.0.
452d2369aSRobert Mustacchi.\" You may only use this file in accordance with the terms of version
552d2369aSRobert Mustacchi.\" 1.0 of the CDDL.
652d2369aSRobert Mustacchi.\"
752d2369aSRobert Mustacchi.\" A full copy of the text of the CDDL should have accompanied this
852d2369aSRobert Mustacchi.\" source.  A copy of the CDDL is also available via the Internet at
952d2369aSRobert Mustacchi.\" http://www.illumos.org/license/CDDL.
1052d2369aSRobert Mustacchi.\"
1152d2369aSRobert Mustacchi.\"
1252d2369aSRobert Mustacchi.\" Copyright 2016 Joyent, Inc.
1352d2369aSRobert Mustacchi.\"
1452d2369aSRobert Mustacchi.Dd May 31, 2016
1552d2369aSRobert Mustacchi.Dt MC_GETSTAT 9E
1652d2369aSRobert Mustacchi.Os
1752d2369aSRobert Mustacchi.Sh NAME
1852d2369aSRobert Mustacchi.Nm mc_getstat
1952d2369aSRobert Mustacchi.Nd get device statistics information
2052d2369aSRobert Mustacchi.Sh SYNOPSIS
2152d2369aSRobert Mustacchi.In sys/mac_provider.h
2252d2369aSRobert Mustacchi.In sys/mac_ether.h
2352d2369aSRobert Mustacchi.Ft int
2452d2369aSRobert Mustacchi.Fo prefix_m_getstat
2552d2369aSRobert Mustacchi.Fa "void *driver"
2652d2369aSRobert Mustacchi.Fa "uint_t stat"
2752d2369aSRobert Mustacchi.Fa "uint64_t *stat_value"
2852d2369aSRobert Mustacchi.Fc
2952d2369aSRobert Mustacchi.Sh INTERFACE LEVEL
3052d2369aSRobert Mustacchiillumos DDI specific
3152d2369aSRobert Mustacchi.Sh PARAMETERS
3252d2369aSRobert Mustacchi.Bl -tag -width Fa
3352d2369aSRobert Mustacchi.It Fa driver
3452d2369aSRobert MustacchiA pointer to the driver's private data that was passed in via the
3552d2369aSRobert Mustacchi.Sy m_pdata
3652d2369aSRobert Mustacchimember of the
3752d2369aSRobert Mustacchi.Xr mac_register 9S
3852d2369aSRobert Mustacchistructure to the
3952d2369aSRobert Mustacchi.Xr mac_register 9F
4052d2369aSRobert Mustacchifunction.
4152d2369aSRobert Mustacchi.It Fa stat
4252d2369aSRobert MustacchiThe numeric identifier of a statistic.
4352d2369aSRobert Mustacchi.It Fa stat_value
4452d2369aSRobert MustacchiA pointer to a 64-bit unsigned value in which the device driver should
4552d2369aSRobert Mustacchiplace the statistic.
4652d2369aSRobert Mustacchi.El
4752d2369aSRobert Mustacchi.Sh DESCRIPTION
4852d2369aSRobert MustacchiThe
4952d2369aSRobert Mustacchi.Fn mc_getstat
50*72d3dbb9SYuri Pankoventry point is used to get statistics from the device driver.
51*72d3dbb9SYuri PankovStatistics are stored as monotonic values.
52*72d3dbb9SYuri PankovThey should only ever increase over the lifetime of a device, resetting only as
53*72d3dbb9SYuri Pankovpart of the instance of a device attaching and detaching.
54*72d3dbb9SYuri PankovWhen hardware has values that may overflow, it is up to the device driver to
55*72d3dbb9SYuri Pankovstore them as a 64-bit quantity that does not overflow in its soft state.
5652d2369aSRobert Mustacchi.Pp
5752d2369aSRobert MustacchiMost device drivers will use a
5852d2369aSRobert Mustacchi.Sy switch
5952d2369aSRobert Mustacchistatement, switching on the value of the statistic
6052d2369aSRobert Mustacchi.Fa stat .
6152d2369aSRobert MustacchiThe full list of supported statistics is available in the
6252d2369aSRobert Mustacchi.Sx STATISTICS
6352d2369aSRobert Mustacchisection of
6452d2369aSRobert Mustacchi.Xr mac 9E .
6552d2369aSRobert Mustacchi.Pp
6652d2369aSRobert MustacchiIf a device driver recognizes the value of
6752d2369aSRobert Mustacchi.Fa stat ,
6852d2369aSRobert Mustacchithen it should store the current 64-bit unsigned integer into
6952d2369aSRobert Mustacchi.Fa stat_value .
7052d2369aSRobert MustacchiIf the device driver does not support the statistic or does not
7152d2369aSRobert Mustacchirecognize the requested statistic, then it should not set anything in
7252d2369aSRobert Mustacchi.Fa stat_value
7352d2369aSRobert Mustacchiand instead return
7452d2369aSRobert Mustacchi.Er ENOTSUP .
7552d2369aSRobert Mustacchi.Pp
7652d2369aSRobert MustacchiThe device driver can obtain access to its soft state through the
7752d2369aSRobert Mustacchi.Fa driver
78*72d3dbb9SYuri Pankovmember.
79*72d3dbb9SYuri PankovIt should be cast to the appropriate structure.
80*72d3dbb9SYuri PankovThe device driver should employ any necessary locking to access the statistic
81*72d3dbb9SYuri Pankovmembers of its soft state to ensure that the data is properly serialized.
8252d2369aSRobert Mustacchi.Sh RETURN VALUES
8352d2369aSRobert MustacchiUpon successful completion, the device driver should fill in
8452d2369aSRobert Mustacchi.Fa stat_value
8552d2369aSRobert Mustacchiand return
8652d2369aSRobert Mustacchi.Sy 0 .
8752d2369aSRobert MustacchiOtherwise it should return a non-zero error number to indicate an error
8852d2369aSRobert Mustacchioccurred.
8952d2369aSRobert Mustacchi.Sh EXAMPLES
9052d2369aSRobert MustacchiThe following example shows how a driver might structure its
9152d2369aSRobert Mustacchi.Fn mc_getstat
9252d2369aSRobert Mustacchientry point.
9352d2369aSRobert Mustacchi.Bd -literal
9452d2369aSRobert Mustacchi#include <sys/mac_provider.h>
9552d2369aSRobert Mustacchi#include <sys/mac_ether.h>
9652d2369aSRobert Mustacchi
9752d2369aSRobert Mustacchi/*
9852d2369aSRobert Mustacchi * Note, this example merely shows the structure of the function. For
9952d2369aSRobert Mustacchi * the purpose of this example, we assume that we have a device which
10052d2369aSRobert Mustacchi * has members that indicate its stats and that it has a lock which is
10152d2369aSRobert Mustacchi * used to serialize access to this data.
10252d2369aSRobert Mustacchi */
10352d2369aSRobert Mustacchi
10452d2369aSRobert Mustacchistatic int
10552d2369aSRobert Mustacchiexample_m_getstat(void *arg, uint_t stat, uint64_t *val)
10652d2369aSRobert Mustacchi{
10752d2369aSRobert Mustacchi	example_t *ep = arg;
10852d2369aSRobert Mustacchi
10952d2369aSRobert Mustacchi	mutex_enter(&ep->ep_lock);
11052d2369aSRobert Mustacchi	switch (stat) {
11152d2369aSRobert Mustacchi	case MAC_STAT_RBYTES:
11252d2369aSRobert Mustacchi		*val = ep->ep_stats.eps_rbytes;
11352d2369aSRobert Mustacchi		break;
11452d2369aSRobert Mustacchi	case MAC_STAT_OBYTES:
11552d2369aSRobert Mustacchi		*val = ep->ep_stats.eps_obytes;
11652d2369aSRobert Mustacchi		break;
11752d2369aSRobert Mustacchi	case MAC_STAT_IPACKETS:
11852d2369aSRobert Mustacchi		*val = ep->ep_stats.eps_ipackets;
11952d2369aSRobert Mustacchi		break;
12052d2369aSRobert Mustacchi	case MAC_STAT_OPACKETS:
12152d2369aSRobert Mustacchi		*val = ep->ep_stats.eps_opackets;
12252d2369aSRobert Mustacchi		break;
12352d2369aSRobert Mustacchi
12452d2369aSRobert Mustacchi	/*
12552d2369aSRobert Mustacchi	 * Note, there are many more stats that should be checked and
12652d2369aSRobert Mustacchi	 * filled in if supported. You should use one case statement for
12752d2369aSRobert Mustacchi	 * each stat.
12852d2369aSRobert Mustacchi	 */
12952d2369aSRobert Mustacchi
13052d2369aSRobert Mustacchi	default:
13152d2369aSRobert Mustacchi		mutex_exit(&ep->ep_lock);
13252d2369aSRobert Mustacchi		return (ENOTSUP);
13352d2369aSRobert Mustacchi	}
13452d2369aSRobert Mustacchi	mutex_exit(&ep->ep_lock);
13552d2369aSRobert Mustacchi
13652d2369aSRobert Mustacchi	return (0);
13752d2369aSRobert Mustacchi}
13852d2369aSRobert Mustacchi.Ed
13952d2369aSRobert Mustacchi.Sh ERRORS
140*72d3dbb9SYuri PankovThe device driver may return one of the following errors.
141*72d3dbb9SYuri PankovWhile this list is not intended to be exhaustive, it is recommended to use one
142*72d3dbb9SYuri Pankovof these if possible.
14352d2369aSRobert Mustacchi.Bl -tag -width Er
14452d2369aSRobert Mustacchi.It Er ENOTSUP
14552d2369aSRobert MustacchiThe specified statistic is unknown, unsupported, or unimplemented.
14652d2369aSRobert Mustacchi.It Er EIO
14752d2369aSRobert MustacchiA transport or DMA FM related error occurred while trying to sync data
14852d2369aSRobert Mustacchifrom the device.
14952d2369aSRobert Mustacchi.It Er ECANCELLED
15052d2369aSRobert MustacchiThe device is not currently in a state where it can currently service
15152d2369aSRobert Mustacchithe request.
15252d2369aSRobert Mustacchi.El
15352d2369aSRobert Mustacchi.Sh SEE ALSO
15452d2369aSRobert Mustacchi.Xr mac 9E ,
15552d2369aSRobert Mustacchi.Xr mac_register 9F ,
15652d2369aSRobert Mustacchi.Xr mac_register 9S
157