デバイスドライバは、管理対象のデバイスインスタンスに関する一連の統計情報を管理します。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 統計情報と Ethernet 固有の統計情報を合わせたものです。サポートされる統計情報の完全な一覧については、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