
EVE-NGでTWSNMPのテスト6日目:Ciscoの拡張MIBの定義を添削しています
今朝は3時ぐらいから助手の猫さんが騒いで起こしてくれたいましたが、昨日寝るのが遅くなったのでまったく起きられませんでした。4時に何とか起きて猫さんにご飯をあげて二度寝しました。次に起きたのは明るくなった5時半です。
EVE-NGに追加したCisco Nexus 9000v(仮想スイッチ)にSNMPでアクセスするテストの続きです。
取得結果をMIBツリーで表示する処理は、

のような感じで完成しました。JavaScriptで長時間かかる処理で応答がないというメッセージを回避する技を習得しました。
Ciscoの拡張MIBを
からダウンロードしてTWSNMPに読み込んだ時に発生した沢山のエラーの調査です。

CISCOからはじまる拡張MIBファイルだけで1154ありました。
どうやら、CISCOで始まる拡張MIBファイルだけ読み込むとMIBツリーの親子関係が解決できないエラーが発生するようです。
ダウンロードしたMIBに含まれるBASIS-MIB.myなどを読み込むと、この問題は改善しましたが、まだ、同じエラーが残っています。
MIBファイルの読み込み方法を見直すと、階層が深いMIBの定義だと正しく読み込めない問題があることがわかりました。MIBツリーの親子が解決しない場合には、1回だけ再読み込みする作りになっていましたが、今回のCiscoの拡張MIBでは1回で解決できない場合があることがわかりました。
そこで
ディレクトリにある拡張MIBを一通り読み込む
ツリーの親子が解決できない拡張MIBをリストに追加する
リストの拡張MIBを再読込して、親子の解決ができらたリストから削除する
読み込めないリストが空になるか、再読み込みで親子関係を解決できた拡張MIBがなくなるまで続ける
リストが残っていたら、最後にもう一度読み込みをして、親子関係が解決できないものはエラーを記録する
というような処理に変えました。
これで深い階層の拡張MIBも読み込めるようになりました。
この改善の結果、拡張MIBの読み込みエラーは10件ぐらいに減りました。
残ったものはCiscoの人の定義が間違っているようです。
CISCO-IETF-PW-MPLS-CAPABILITY.my
no parent name=cpwVcMplsCapability,oid=cpwVcMplsCapability.1.1.1.1
のエラーを調べてみると
cpwVcMplsCapability AGENT-CAPABILITIES
PRODUCT-RELEASE "Cisco IOS 12.0(29)S"
STATUS current
|略
::= { cpwVcMplsCapability 1 }
END
のように、間違っていました。
cpwVcMplsCapabilityがcpwVcMplsCapability.1だと定義しています。自分が自分の1人目の子供という定義です。自分の親が自分という定義とも言えます。他の拡張MIBの定義を見習って
cpwVcMplsCapabilityV12R0029 AGENT-CAPABILITIES
PRODUCT-RELEASE "Cisco IOS 12.0(29)S"
STATUS current
|略
::= { cpwVcMplsCapability 1 }
END
のように修正すれば、エラーは消えました。
他にもいろいろありますが、
CISCO-ITP-GACT-CAPABILITY.my
60:21: unexpected "deprecated" (expected ("current" | "obsolete") ...)
46:21: unexpected "deprecated" (expected ("current" | "obsolete") ...)
が面白かったです。
たぶん、SNMPのMIBではobsolete(時代遅れ)と定義するところをdeprecated(旧式)と書いたのだと思います。プログラムの世界ではdeprecatedという言葉を使うので、その影響だと思います。
この間違いは、370ファイルに4000箇所以上あります。
ただ、どれも使う人がいないようなMIB定義なので修正するよりファイルを削除すればよいと思います。
あるいは、私のように面倒だからCiscoで始まる全部のMIBをコピーするのではなく必要なMIBファイルだけコピーすればよいと思います。
明日に続く
いいなと思ったら応援しよう!
