Snmp Method 動作パラメータの設定で「SNMP」を有効にすることで、カーネルのSNMPエージェントが動作します。 受信するパケット(SNMPコマンド)は以下です。 受信の制約は以下です。 送信するパケット(SNMPレスポンス、トラップ)は以下です。 ユーザアプリケーションプログラムから「SNMPアプリ登録」ファンクションの登録が無い場合、SNMPコマンド受信にてカーネルが管理していないオブジェクト識別子の指定があった場合
エラーを編集してSNMP応答します。 ユーザアプリケーションプログラムから「SNMPアプリ登録」ファンクションの登録があった場合、SNMPコマンド受信にてカーネルが管理していないオブジェクト識別子の指定があると
ユーザアプリケーションにメッセージを発行して、応答(ユーザアプリケーションからのメッセージ)を指定されたタイムアウト時間待ちます。応答があればその内容に従いSNMP応答パケット組み立てて送信します。応答がタイムアウトした場合は、エラーを編集してSNMP応答します。 アプリケーションプログラムはユーザが本装置のSNMPエージェントの管理するMIBに、ユーザ固有の企業MIBを実装(追加)することを可能にします。メッセージのやり取り以外のUDP処理、SNMPパケットの分析・組み立て処理をすべてカーネルのSNMPプロセスに委ねることができます。 アプリケーションプログラムはカーネルのSNMPプロセスを使用するために、まず「SNMPアプリ登録」ファンクションを呼び出す必要があります。 メッセージの送受信は「メッセージ追加」ファンクション,「メッセージ取得」ファンクションを使用して行ないます。 アプリケーションプログラムは「SNMPアプリ登録」ファンクションを呼び出さない場合でも、「SNMPMIB情報取得」ファンクション、「SNMPMIB情報設定」ファンクションは使用できます。 SNMPプロセスとやり取りするメッセージは以下の構造になります。 宛先プロセスID: 自プロセスID: メッセージ種別: コマンドコード: パラメータ長: ダブルポインタ: パラメータエリア(ダブルポインタが示す)の構造はになります。 SNMPメッセージ識別子: 処理結果: エラー位置: 返還リスト数: バージョン: 一般トラップ・特殊トラップ: 企業ID・トラップOID トラップ宛先IPアドレス リスト数 リスト(variable-binding-list) カーネルのSNMPプロセスがGET-REQUESTパケットを受信し、variable-bindingsリスト内にカーネル管理MIBの範囲外のオブジェクト識別子を検出した場合、アプリケーションにメッセージを発行します。 <カーネルが発行するメッセージ> <アプリケーションが応答するメッセージ> オブジェクトをサポートしていない場合は、オブジェクト識別子対応する「値」にnoSuchObject(0x80)を設定して下さい。 カーネルのSNMPプロセスがGET-NEXTREQUESTパケットを受信し、variable-bindingsリスト内にカーネル管理MIBの範囲外または、カーネル管理MIBの最終のオブジェクト識別子を検出した場合、アプリケーションにメッセージを発行します。 <カーネルが発行するメッセージ> <アプリケーションが応答するメッセージ> MIBデータベースの終了に遭遇した場合、「オブジェクト識別子」にはリストに設定されていた値を、「値」にはいendOfMibView(0x82)を設定して下さい。 カーネルのSNMPプロセスがSET-REQUESTパケットを受信し、variable-bindingsリスト内にカーネル管理MIBの範囲外のオブジェクト識別子を検出した場合、アプリケーションにメッセージを発行します。 <カーネルが発行するメッセージ> <アプリケーションが応答するメッセージ> カーネルのSNMPプロセスがGET-BULKREQUESTパケットを受信し、variable-bindingsリスト内にカーネル管理MIBの範囲外または、指定された繰り返し数による参照MIBがカーネル管理MIBの範囲外のオブジェクト識別子の場合、アプリケーションにメッセージを発行します。 <カーネルが発行するメッセージ> <アプリケーションが応答するメッセージ> GET-BULKREQUESTの場合、リスト内のパラメータ1の値(N)が重要な意味を持ちます。 例としまして MIBデータベースの終了に遭遇した場合、「オブジェクト識別子」にはリストに設定されている値を、「値」にはendOfMibView(0x82)を設定して下さい。 アプリケーションが発行するメッセージ カーネルが応答するメッセージ バージョンにV1を指定した場合は企業ID、一般トラップ、特殊トラップを設定して下さい。
カーネルのSNMPプロセスで、エージェントIPアドレスとタイムスタンプを付加します。 バージョンにV2を指定した場合はトラップOIDを設定して下さい。
カーネルのSNMPプロセスでタイムスタンプを付加します。 TRAPを複数のIPアドレスに送信した場合、処理結果はすべての送信が失敗した場合のみエラーになります。 処理結果の一覧を示します。 カーネルのSNMPプロセスは以下の場合、TRAPを送信します。 1)パワーオン 2)コミュニティ違反 3)アプリケーションプロセスからの要求 カーネルのSNMPプロセスとの間のメッセージの受け渡しでパラメータ格納領域を使用しないケースはありません。 ここでメッセージの送受信とメモリの確保、解放について以下の取り決めを守って下さい。 カーネルのSNMPプロセスからメッセージ(MSG_REQUEST)が発行される場合、 アプリケーションプロセスからメッセージ(MSG_REQUEST)が発行される場合、 メッセージの応答が無い(タイムアウト)した場合、メッセージを送信したプロセスにメモリを解放する権利がないため、放置します。
実際には、実装MIBを初期化して、UDP161番ポート(コマンド受信用)およびUDP1440番ポート(トラップ送信用)をオープンして、SNMPマネージャからの要求に応答するできる状態にします。
サポートするSNMPバージョンはV2ですが、アプリケーションからの指定でV1のトラップの送信も可能です。
GET-REQUEST
GET-NEXTREQUEST
SET-REQUEST
GET-BULKREQUEST
受信可能なUDPデータサイズは1472バイトまでです。
受信可能なvariable-binding-list数は最大65までです。
受信可能なOBJECT-IDENTFIER長は36バイトまでです。
受信可能なVALUE長は68バイトまでです。
GET-RESPONSE
TRAP-SNMPV2
TRAP-V1
これによりユーザアプリケーションにカーネルのSNMPプロセスのプロセスIDが通知されて、お互いに相手のプロセスにメッセージを発行することが可能になります。
メッセージに付加するパラメータ格納領域につきましてはメモリ管理を参照して下さい。
typedef struct {
short
dest;
宛先プロセスID
short
src;
自プロセスID
Byte
rqrs;
メッセージ種別
Byte
cmd;
コマンドコード
Word
prmlen;
パラメータ長
char
**prm;
ダブルポインタ
} TMsg;
sizeof(TMsg) = 12
アプリケーションから見れば、カーネルのSNMPプロセスのプロセスID(RegSnmpAplにて取得)
アプリケーションから見れば、アプリケーションプログラムのプロセスID(main(aPid)で引渡)
0:MSG_REQUEST 要求
1:MSG_RESPONSE 応答
2:MSG_ERROR エラー応答
30:MSG_GETREQ
31:MSG_GETNEXTREQ
32:MSG_SETREQ
33:MSG_GETBULKREQ
34:MSG_TRAPSEND
パラメータの全長(ダブルポインタの示すエリアのサイズ)
パラメータを示すダブルポインタ
typedef struct {
Word
id;
タグ
Word
len;
長さ
Byte
ct[68];
値の実体
} _ANLVAL;
sizeof(_ANLVAL) = 72
typedef struct {
Word
len;
長さ
Byte
ct[36];
オブジェクト識別子の実体
} _ANLOID;
sizeof(_ANLOID) = 38
typedef struct {
Word
param1;
パラメータ1
Word
param2;
パラメータ2
_ANLOID
oid;
オブジェクト識別子
_ANLVAL
val;
値
} _LIST;
sizeof(_LIST) = 114
typedef struct {
Word
listcnt;
リスト数
_LIST
list[65];
値
} _LISTC;
sizeof(_LISTC) = 7412
typedef struct {
Dword
msgid;
SNMPメッセージ識別子
Byte
err;
処理結果
Byte
err_idx;
エラー位置
Byte
trn_listcnt;
返還リスト数
Byte
ver;
バージョン
Byte
generic;
一般トラップ
Byte
specific;
特殊トラップ
_ANLOID
oid;
企業ID/トラップOID
Dword
ip;
トラップ宛先IPアドレス
_LISTC
var;
リスト群
} _EVLIST;
sizeof(_EVLIST) = 7464
メッセージ発行元のプロセスが、応答との対応を取るために使用します。
(応答するプロセスはこの値を変更してはいけません。)
処理結果を参照して下さい。
処理結果がnoErrorでない場合の、エラーインデックス。(リスト内の位置インデックス 1以上)
カーネルのSNMPプロセスがメッセージを発行する場合、パラメータ内の応答リスト数を設定します。
(アプリケーションプロセスは参照のみ可)。
アプリケーションプロセスがトラップ送信時にトラップフォーマットを指定します。
0=SNMPV1
1=SNMPV2
アプリケーションプロセスがトラップ送信時に、バージョンにV1を指定した場合に指定します。
アプリケーションプロセスがトラップ送信時に、バージョンの指定がV1の場合「企業ID(エンタープライズOID)、
V2の場合「SNMPトラップOID」を指定します。
アプリケーションプロセスがトラップ送信時に、宛先のIPアドレスを指定します。
有効なリストの要素数を設定します。最大65までです。
プロトコル要素のvariable-binding-list数に相当します
リスト要素
パラメータ1:0〜N
パラメータ2:リザーブ(変更不可)
oid:オブジェクト識別子
val:オブジェクト識別子に対応する値
GET-REQUESTの場合、variable-bindingsリスト内に設定されているオブジェクト識別子に対応する「値」を設定して応答します。
メッセージ種別
(MSG_REQUEST)
コマンドコード
(MSG_GETREQ)
SNMPメッセージ識別子
(識別番号)
返還リスト数
(=リスト数)
リスト数
(数値)
リスト
パラメータ1
(0)
オブジェクト識別子
(OBJECT-ID)
メッセージ種別
(MSG_RESPONSE)
コマンドコード
(MSG_GETREQ)
SNMPメッセージ識別子
(識別番号) そのまま返します
処理結果
(結果) を設定します
エラー位置
(エラー位置) を設定します
返還リスト数
(=リスト数) そのまま返します
リスト数
(数値) そのまま返します
リスト
パラメータ1
(0)そのまま返します
オブジェクト識別子
(OBJECT-ID)そのまま返します
識別子に対応した値
(VAL)新たに設定します
オブジェクトの実体が存在しない場合は、オブジェクト識別子対応する「値」にnoSuchInstance(0x81)を設定して下さい。
GET-NEXTREQUESTの場合、variable-bindingsリスト内に設定されているオブジェクト識別子の「次のオブジェクト識別子」とそれに対応する「値」を設定して応答します。
メッセージ種別
(MSG_REQUEST)
コマンドコード
(MSG_GETNEXTREQ)
SNMPメッセージ識別子
(識別番号)
返還リスト数
(=リスト数)
リスト数
(数値)
リスト
パラメータ1
(1)
オブジェクト識別子
(OBJECT-ID)
メッセージ種別
(MSG_RESPONSE)
コマンドコード
(MSG_GETNEXTREQ)
SNMPメッセージ識別子
(識別番号) そのまま返します
処理結果
(結果) を設定します
エラー位置
(エラー位置) を設定します
返還リスト数
(=リスト数) そのまま返します
リスト数
(数値) そのまま返します
リスト
パラメータ1
(1)そのまま返します
オブジェクト識別子
(次の識別子)新たに設定します
次の識別子に対応した値
(VAL)新たに設定します
SET-REQUESTの場合、variable-bindingsリスト内に設定されているオブジェクト識別子に対応する値の「設定結果」を設定して応答します。
メッセージ種別
(MSG_REQUEST)
コマンドコード
(MSG_SETREQ)
SNMPメッセージ識別子
(識別番号)
返還リスト数
(=リスト数)
リスト数
(数値)
リスト
パラメータ1
(0)
オブジェクト識別子
(OBJECT-ID)
識別子に対応した値
(VAL)
メッセージ種別
(MSG_RESPONSE)
コマンドコード
(MSG_SETREQUEST)
SNMPメッセージ識別子
(識別番号) そのまま返します
処理結果
(結果) を設定します
エラー位置
(エラー位置) を設定します
返還リスト数
(=リスト数) そのまま返します
リスト数
(数値) そのまま返します
リスト
パラメータ1
(1)そのまま返します
オブジェクト識別子
(OBJECT-ID)そのまま返します
識別子に対応した値
(VAL)そのまま返します
GET-BULKREQUESTの場合、variable-bindingsリスト内に設定されているオブジェクト識別子の「次のオブジェクト識別子から指定数分のオブジェクト識別子」とそれに対応する「値」を設定して応答します。
メッセージ種別
(MSG_REQUEST)
コマンドコード
(MSG_GETBULKREQ)
SNMPメッセージ識別子
(識別番号)
返還リスト数
(リスト数*N)
リスト数
(数値)
リスト
パラメータ1
(N)
オブジェクト識別子
(OBJECT-ID)
メッセージ種別
(MSG_RESPONSE)
コマンドコード
(MSG_GETBULKREQ)
SNMPメッセージ識別子
(識別番号) そのまま返します
処理結果
(結果) を設定します
エラー位置
(エラー位置) を設定します
返還リスト数
(リスト内のパラメータ1の合計) そのまま返します
リスト数
(再計算値) リスト要素数を設定します
リスト
パラメータ1
(N)そのまま返します
オブジェクト識別子
(次の識別子からN個)新たに設定します
値
(次の識別子からN個に対応した値)新たに設定します
GET-BULKREQUESTの場合、この値(N)は1以上になります。値(N)の意味は、リストに設定されているオブジェクト識別子の次からN個連続したオブジェクト識別子と、それに対応する値のリストを要求します。
従いまして、他のコマンドはリストの要素数が要求と応答で変化することはありませんが、GET-BULKREQUESTの場合増加する可能性があります。
リスト数=3 リスト(1)のパラメータ1=1 リスト(2)のパラメータ1=2 リスト(3)のパラメータ1=3
の場合、応答のリスト数は1+2+3=6になります。
ユーザアプリケーションが作成するリスト数は「返還リスト数」に一致するはずです。
メッセージ種別
(MSG_REQUEST)
コマンドコード
(MSG_TRAPSEND)
SNMPメッセージ識別子
(識別番号)
トラップ宛先IPアドレス
(IPアドレス)
バージョン
(V1/V2)
企業ID/トラップOID
(オブジェクト識別子)
一般トラップ(V1)
(番号)
特殊トラップ(V1)
(番号)
リスト数
(トラップ付加リスト数)
リスト
オブジェクト識別子
(OID)
識別子に対応する値
(VAL)
メッセージ種別
(MSG_RESPONSE)
コマンドコード
(MSG_TRAPSEND)
SNMPメッセージ識別子
(識別番号) そのまま返します
処理結果
(結果) を設定します
0
noError
get,next,set,bulk,trap
正常
1
tooBig
get,next,set,bulk
メッセージ・サイズ超過
2
noSuchName
未使用(インスタンスが存在しない)
3
badValue
未使用(設定値が正しくない)
4
readOnlye
未使用(書き込み禁止)
5
genErr
get,next,set,bulk
その他エラー
6
noAccess
set
アクセス不可
7
wrongType
set
設定値の形式(タグ)違反
8
wrongLength
set
設定値の長さ違反
9
wrongEncode
set
設定値の符号化違反
10
wrongValue
set
設定値の値違反
11
noCreation
set
作成不可
12
inconsistentValue
set
値が不正
13
resourceUnavailable
set
処理リソースがない
14
commitFailed
set
エラー発生、戻し成功
15
undoFailed
set
エラー発生、戻し失敗
16
authorizationError
未使用(セキュリティエラー)
17
notWritable
set
書き込み禁止
18
inconsistentName
set
オブジェクト名不正
50
ParamError
trap
パラメータエラー
51
VerError
trap
指定バージョンエラー
52
SendError
trap
送信エラー
ColdStart (SNMPV2)
送信条件 設定パラメータのSNMP設定の「Trap先IP」が0.0.0.0以外。
TRAP宛先 「Trap先IP」および設定パラメータの「汎用設定項目1〜8」にIPアドレス(ddd.ddd.ddd.ddd)が
設定されていれば、そのIPアドレス。
Auhentification failure (SNMPV2)
送信条件 設定パラメータのSNMP設定の「Trap先IP」が0.0.0.0以外。
且つ、設定パラメータのSNMP設定の「Trap設定」(SNMPマネージャからも変更可能)が1(ENABLE)。
TRAP宛先 1)と同様。
アプリケーション依存 (SNMPV1/SNMPV2)
送信条件 _EVLISTの「TRAP宛先IP」がユニキャストの場合。
_EVLISTの「TRAP宛先IP」がブロードキャストで、SNMP設定の「Trap先IP」が0.0.0.0以外。
TRAP宛先 ユニキャストの場合、指定されたIPアドレスのみ。
ブロードキャストの場合1)と同様。
メッセージに付加するパラメータ格納領域は「メモリ取得」ファンクションで取得,「メモリ解放」ファンクションで解放します。
MSG_GETREQ
MSG_GETNEXTREQ
MSG_SETREQ
MSG_GETBULKREQ -> カーネルプロセスがメモリ確保
(編集してアプリケーションプロセスへ)
(応答を編集してカーネルプロセスへ)
-> カーネルプロセスがメモリ解放/再利用
MSG_TRAPSEND -> アプリケーションプロセスがメモリ確保
(編集してカーネルプロセスへ)
(応答を編集してアプリケーションプロセスへ)
-> アプリケーションがメモリ解放/再利用