IFMIB(4)

名称
ifmib - ネットワークインタフェースの MIB

概要
#include <sys/types.h> #include <sys/socket.h> #include <sys/sysctl.h> #include <sys/time.h> #include <net/if.h> #include <net/if_mib.h>

解説
ifmib 機能は、 netstat(1,) slstat(8) 及び SNMP 管理エージェントのようなクライアントアプリケーションに対し、 ネットワークインタフェースに関する管理情報を提供する sysctl(3) インタフェースのアプリケーションです。 この情報は、表のそれぞれの行が論理的なネットワークインタフェース (ハードウェアデバイスまたは lo(4) のようなソフトウェアによる仮想デバイスのどちらか) からなる表形式で 構築されます。 表には 2 つの列があり、それぞれの列はひとつの構造体を持ちます。 ひとつの列はすべてのインタフェースに関連する一般的な情報を含み、 もう一方の列はインタフェースの特定のクラスに固有な情報を含みます。 (一般的に後者は、もし存在しカーネルに実装可能であれば、 特定のインタフェースクラスを定義する SNMP MIB を実装します。)

ifmib 機能は sysctl(3) MIB の “net.link.generic” ブランチ経由でアクセスされます。 sysctl(3) name のそれぞれのレベルの明白な定数は <net/if_mib.h> で定義されます。 インタフェースの総数 (そしてつまり表の行数) は “net.link.generic.system.ifcount” (または、明白な定数である CTL_NET, PF_LINK, NETLINK_GENERIC, IFMIB_SYSTEM, IFMIB_IFCOUNT) によって与えられます。 特定のインタフェースを検索する管理アプリケーションは、1 番目の行から 開始し、指定されたインタフェースが検出されるか、インタフェースの総数に 達するまで、行から行へと表を移動します。

すべてのインタフェースに共通な、一般的なインタフェース情報は下記の手順で アクセスできます:

    int
    get_ifmib_general(int row, struct ifmibdata *ifmd)
    {
    	int name[6];
    	name[0] = CTL_NET;
    	name[1] = PF_LINK;
    	name[2] = NETLINK_GENERIC;
    	name[3] = IFMIB_IFDATA;
    	name[4] = row;
    	name[5] = IFDATA_GENERAL;
    	return sysctl(name, 6, ifmd, sizeof *ifmd, (void *)0, 0);
    }

ifmibdata 構造体 のフィールドは下記のとおりです:

ifmd_name
    (char []) ユニット番号を含む、インタフェースの名前

ifmd_pcount
    (int) 無差別に接続を待っている数

ifmd_flags
    (int) インタフェースのフラグ ( <net/if.h> で定義されています)

ifmd_snd_len
    (int) 送信キューの現在の瞬間的な長さ

ifmd_snd_drops
    (int) 送信キューが一杯だったためこのインタフェースがドロップしたパケット数

ifmd_data
    (struct if_data) <net/if.h> に定義されている構造体からの詳細情報 (if_data(9) を参照して下さい)

クラス固有な情報は IFDATA_LINKSPECIFIC 列を代わりに調べることによって取得できます。構造体の形式および長さは インタフェースのクラスに依存することに注意して下さい。 IFT_ETHER, IFT_ISO88023, IFT_STARLAN インタフェースについては, 構造体は “struct ifmib_iso_8802_3” ( <net/if_mib.h> で定義されています) と呼ばれていて、 イーサネットライクなネットワークのための RFC 1650 MIB のスーパセットを実装しています。 IFT_SLIP については, 構造体は “struct sl_softc” (<net/if_slvar.h>) です。

関連項目
sysctl(3), intro(4), ifnet(9) Definitions of Managed Objects for the Ethernet-like Interface Types Using SMIv2, F. Kastenholz, 1994年 8月, RFC 1650.

バグ
ほとんどのイーサネットライクなインタフェースは Ethernet MIB を まだサポートしていません。サポートすることを知られているインタフェースには ed(4) 及び de(4) を含みます。 にもかかわらず、すべてのインタフェースは自動的に generic MIB をサポートします。

歴史
ifmib は FreeBSD 2.2 で初めて出現しました。