![見出し画像](https://assets.st-note.com/production/uploads/images/124769578/rectangle_large_type_2_73739aea31f591596d1e7f9b10f5dd32.png?width=1200)
拡張MIBに対応したSNMPエージェントのソースコードを自動生成
ASN.1で定義した拡張MIBをSNMPエージェントに組み込むためにNET-SNMPのmib2cでソースコードを自動生成する方法の説明です。
SNMP拡張エージェントの開発の流れは
![](https://assets.st-note.com/img/1702759728207-DSkm54r9OG.png)
ほとんどのSNMP開発キットでは、ASN.1で拡張MIBを定義すると、ASN.1のMIBモジュールファイルからMIBコンパイラによって、自動的に拡張MIB対応部分のソースコードを生成することができます。生成されたソースコードを実際に管理情報の取得やTRAPの送信などの部分を加えることで拡張MIB対応のSNMPエージェントを完成させることができます。
ほとんどのSNMP開発キットと書いていますが、今SNMPのエージェントを開発するために使えるのはNET-SNMPだけしかないように思います。
データ処理モデル
管理情報の取得とSNMPエージェント内部での記憶方法によって、いくつかのデータ処理モデルがあります。
①イベント駆動モデル
イベント駆動モデルは下の図に示すようにSNMPマネージャからのリクエスト毎に、情報源からの取得を行う方式です。最新の情報をSNMPマネージャに返せる反面、情報源からの取得に時間がかかる場合、応答時間も大きくなるという欠点をもっています。また、SNMPエージェント以外のソフトが同じ情報源にアクセスする場合、競合問題についても検討する必要がでてきます。
![](https://assets.st-note.com/img/1702760157951-bFOIc4mJ0n.png?width=1200)
②変数共有(データウォッチ)モデル
変数共有モデルは下の図に示すようにMIBのオブジェクトは共通の変数に格納されていて、データ取得/設定の処理が変数に情報源から取得したデータを書き込んだり、変数が変化した場合に、情報源に通知を行います。SNMPマネージャからのリクエストに対しては、変数の値を返したり、変数の変更を行うのみですみます。共通変数の変更に関する競合に注意する必要があります。SNMPの応答時間は、非常に早くすることができます。しかし、情報の更新は、一定周期で行われるため、必ずしも最新の情報を返せないという欠点が生じます。特に設定(SET)の場合は、この問題が深刻になる可能性があります。
![](https://assets.st-note.com/img/1702760304657-RGmH2LtKoz.png?width=1200)
両方を併用した実装も可能です。例えば、ほとんどのMIBオブジェクトは、変数共有モデルで実装し、特定のオブジェクトの取得や設定の場合だけ、イベント駆動モデルで実装する方式です。
気象観測システムの例では下の図に示すようなデータ処理モデルで実装しています。基本的には、変数共有モデルですが、閾値の変更などは、イベント駆動モデルを使用しています。WEBでの情報表示とSNMPエージェントが情報を共有できるように、気象観測装置からのデータ取得は別プロセスで行って、SNMPエージェントには、ファイルで情報を渡しています。SNMPエージェントは、ファイルが変更された場合、読み出して情報を更新します。
![](https://assets.st-note.com/img/1702760459524-jmGT6DX4jx.png?width=1200)
ここから先は
![](https://assets.st-note.com/production/uploads/images/14333815/profile_ee1accba5615957e5029db85d57fdb0a.jpg?fit=bounds&format=jpeg&quality=85&width=330)
実践SNMP教科書 復刻版
20年近く前に書いた「実践SNMP教科書」を現在でも通用する部分だけ書き直して復刻するマガジンです。最近MIBの設計で困っている人に遭遇し…
開発のための諸経費(機材、Appleの開発者、サーバー運用)に利用します。 ソフトウェアのマニュアルをnoteの記事で提供しています。 サポートによりnoteの運営にも貢献できるのでよろしくお願います。