神奈川在住のITエンジニアの備忘録です。主にプログラミング(Perl, Java など)やネットワーク技術について、自分の中で整理するためにゆるゆると書いています。誰かのご参考になれば幸いです。


例えばnet-snmpのsnmpwalkコマンドなど、SNMP GetNextRequestを繰り返してMIBを次々取得するアプリケーションは、どのようにしてエージェント側のMIBの終了を知ることができるのか、についてちょっと調べてみた。


これについては rfc に以下の記載がある。

When an SNMPv2 access to MIB data returns a variable binding
containing an endOfMibView exception, it indicates that there are no
object instances available which lexicographically follow the object
in the request. In an SNMPv1 agent, this condition normally results
in a noSuchName error, and so the error-status field of the response
PDU SHALL be set to noSuchName. Also, the error-index field SHALL be
set to the index of the variable binding for which an exception
occurred (there may be more than one and it is an implementation
decision as to which is used), and the variable binding list from the
original request SHALL be returned with the response PDU.


これによると、SNMPv2の場合は、エージェントがvarbindに endOfMibView を入れてくるので、MIB取得側ではそれを以って「エージェントはもう返すMIBがないんだな」と知ることができる。一方で、SNMPv1の場合は noSuchName エラーが返ってくるようだ。