设备驱动程序为其管理的设备实例维护一组统计信息。MAC 层通过驱动程序的 mc_getstat(9E) 入口点查询这些统计信息。
int mc_getstat(void *driver_handle, uint_t stat, uint64_t *stat_value);
GLDv3 框架使用 stat 指定所查询的统计信息。驱动程序使用 stat_value 返回 stat 指定的统计信息的值。如果返回了统计信息的值,则 mc_getstat() 必须返回 0。如果驱动程序不支持 stat 统计信息,mc_getstat() 必须返回 ENOTSUP。
所支持的 GLDv3 统计信息是通用 MAC 统计信息和特定于以太网的统计信息的联合。有关所支持的统计信息的完整列表,请参见 mc_getstat(9E) 手册页。
示例 19-7 mc_getstat() 入口点int xx_m_getstat(void *arg, uint_t stat, uint64_t *val) { xx_t *xxp = arg; mutex_enter(&xxp->xx_xmtlock); if ((xxp->xx_flags & (XX_RUNNING|XX_SUSPENDED)) == XX_RUNNING) xx_reclaim(xxp); mutex_exit(&xxp->xx_xmtlock); switch (stat) { case MAC_STAT_MULTIRCV: *val = xxp->xx_multircv; break; /* ... */ case ETHER_STAT_MACRCV_ERRORS: *val = xxp->xx_macrcv_errors; break; /* ... */ default: return (ENOTSUP); } return (0); }
mri_stat() 环入口点是一个强制的环入口点,支持环功能的所有设备驱动程序都必须实现该入口点。框架将使用该入口点查询为每个硬件传送环和接收环维护的统计信息。
对于硬件传送环,框架将查询以下统计信息:
MAC_STAT_OERRORS
MAC_STAT_OBYTES
MAC_STAT_OPACKETS
对于硬件接收环,框架将查询以下统计信息:
MAC_STAT_IERRORS
MAC_STAT_RBYTES
MAC_STAT_IPACKETS