EN JA
SNMP_ATM(3)
SNMP_ATM(3) FreeBSD Library Functions Manual SNMP_ATM(3)

名称

atmif_event_f, atm_find_if_name, atm_find_if, atm_notify_aif, atm_unnotify_aifsnmpd のための ATM ドライバモジュール

ライブラリ

(begemotSnmpdModulePath."netgraph" = /usr/lib/snmp_netgraph.so (FreeBSD)) (begemotSnmpdModulePath."mibII" = /usr/lib/snmp_mibII.so) (begemotSnmpdModulePath."atm" = /usr/lib/snmp_atm.so)

書式

#include < bsnmp/snmpmod.h>
#include < bsnmp/snmp_mibII.h>
#include < bsnmp/snmp_atm.h>

typedef void
(*atmif_event_f)( struct atmif *aif, enum atmif_notify event, uintptr_t data, void *uarg);

struct atmif *
atm_find_if_name( const char *name);

struct atmif *
atm_find_if( u_int ifindex);

void *
atm_notify_aif( struct atmif *aif, const struct lmodule *mod, atmif_event_f func, void *uarg);

void
atm_unnotify_aif( void *not);

解説

snmp_atm モジュールはリモートアクセスをシステムの ATM デバイスで有効にする多くのテーブルとスカラを実装します。また、多くの関数をエクスポートして、他のモジュールが容易に ATM デバイスにアクセスできるようにします。

モジュールはすべての ATM デバイスのために snmp_mibII(3) によってエクスポートされたインタフェース構造体への拡張を保守します。この構造体には、次のフィールドがあります:

struct atmif { 
 struct mibif *ifp; 
    /* 共通インタフェースデータ */ 
 struct atmif_mib *mib;  /* ATM MIB */ 
 enum atmif_carrier_state carrier; 
 enum atmif_suni_mode mode; 
    /* SUNI モード SDH または SONET */ 
};

フィールドには、次の意味があります:

ifp
フィールドは snmp_mibII(3) インタフェース構造体を指します。
mib
特別な ATM インタフェース MIB (下記参照)。
carrier
キャリアの現在の状態。次の 1 つです:
ATMIF_CARRIER_ON
キャリア検出
ATMIF_CARRIER_OFF
キャリアなし
ATMIF_CARRIER_UNKNOWN
キャリアの状態は未知
ATMIF_CARRIER_NONE
デバイスは、キャリアの考えがない、かそれをセンスすることができない
mode
SUNI チップがある ATM デバイスに関しては、インタフェースの現在のモードです:
ATMIF_SUNI_MODE_SONET
インタフェースは、SONET モード
ATMIF_SUNI_MODE_SDH
インタフェースは、SDH モード
ATMIF_SUNI_MODE_UNKNOWN
インタフェースには、SUNI インタフェースがないか、またはモードは未知です (例えば、インタフェースがダウンしている)。

名前か SNMP インタフェースインデックスによって ATM インタフェースを見つけることができます (インタフェースインデックスの議論に関しては snmp_mibII(3) 参照)。関数 atm_find_if_name() は与えられた名前でインタフェースを探します。関数 atm_find_if() はインタフェースインデックスによってインタフェースを探します。両方の関数はインタフェースを見つけることができないなら、NULL を返します。

ATM MIB は次のフィールドを含んでいます:

struct atmif_mib { 
 u_int version; /* 現在 0 */ 
 
 u_int device; /* ハードウェアのタイプ (システム特有) */ 
 u_int serial; /* カードシリアル番号 (デバイス特有) */ 
 u_int hw_version; 
   /* カードバージョン (デバイス特有) */ 
 u_int sw_version; 
   /* ファームウェアバージョン (デバイス特有) */ 
 u_int media; /* 物理的メディア (MIB 参照) */ 
 
 u_char esi[6]; /* 終わりのシステム識別子 (MAC) */ 
 u_int pcr; /* サポートされたピークセルレート */ 
 u_int vpi_bits; /* VPI フィールドの使用されたビットの数 */ 
 u_int vci_bits; /* VCI フィールドの使用されたビットの数 */ 
 u_int max_vpcs; /* VPC の最大数 */ 
 u_int max_vccs; /* VCC の最大数 */ 
};

通知

あるイベントが ATM インタフェースで起こるとき、他のモジュールは、通知を受信するために atmif_event_f で登録することができます。インタフェースへのポインタ、呼び出しモジュールのポインタ、コールバック関数、とコールバック関数に渡されるユーザ引数を取って、 atm_notify_aif() で登録は行われます。コールバック関数はインタフェースポインタ、通知コード、通知引数、とユーザ引数で呼び出されます。次の通知が定義されています:
ATMIF_NOTIFY_DESTROY
インタフェースは破壊されます。通知引数は使用されません。
ATMIF_NOTIFY_CARRIER
インタフェースのキャリア状態は変化しました。引数はキャリアの 古い 状態です。新しい状態はインタフェース構造から得ることができます。
ATMIF_NOTIFY_VCC
不変の VCC が作成されているか、または破壊されています。引数は次のように復号化 (デコード) することができる u_int です:

vpi = (arg >> 24) & 0xff; 
vci = (arg >>  8) & 0xffff; 
state = arg & 1;

state は、VCC が破壊されているなら 0、それが作成されているら 1 です。

通知のための登録は、 atm_notify_aif() から atm_unnotify_aif() までの返り値を渡すことによって、取り消すことができます。登録はインタフェースが破壊されるなら、自動的に削除されます。

MIB

モジュールによって実装された MIB は BEGEMOT-ATM.txt で定義されています。汎用部品では、2 つのテーブルと 1 つのスカラがあります、また、システムの特有のグループがあります:
begemotAtmIfTable
このテーブルは ifTable の拡張です。それは、それぞれの ATM インタフェースの列 (row) を含んでいて、 ifIndex があるインデックスです。すべてのフィールドは begemotAtmIfMode カラムを除いて読み込み専用です。
begemotAtmIfTableLastChange
行 (row) が上記のテーブルで作成されたか、または破壊されたとき、度数 (tick) を含むか、または、SNMP エージェントの始まりのときからテーブルが変更されていなかったなら 0 です。
begemotAtmHWTable
また、 ifIndex によってインデックス付けされて、ハードウェア特有の情報を含んでいます。このテーブルは読み込み専用です。

関連ファイル

/usr/share/snmp/defs/atm_tree.def
atmif_event_f. によって実装された MIB ツリーの記述。
/usr/share/snmp/mibs/BEGEMOT-ATM.txt
これはこのモジュールによって実装される MIB です。

作者

Hartmut Brandt <harti@FreeBSD.org>
May 23, 2005 FreeBSD