整数オーバーフローの問題についていくつかの snmp コードをデバッグしています。基本的に、整数を使用してディスク/RAID 容量を KB 単位で格納します。ただし、2TB を超えるディスク/レイドを使用すると、オーバーフローします。
snmp v2cがinteger64またはunsigned64をサポートしていることをいくつかのインターネットフォーラムから読みました。私のテストでは、タイプを integer64 または unsigned64 に設定しても、下位 32 ビットのみが送信されます。
これが私がやった方法です:
スタンドアロン プログラムが容量を取得し、データをファイルに書き込みます。レイド容量の例
my-sub-oid Counter64 7813857280
/etc/snmp/snmpd.conf には、oid を通過するための句があります。
pass_persist mymiboid /path/to/snmpagent
mysnmpagent ソースで、oidmap をファイルから oid/type/value 構造に読み取り、stdout に出力します。
printf("%s\n", it->first.c_str()); printf("%s\n", it->second.type.c_str()); printf("%s\n", it->second.value.c_str()); fflush(stdout);
snmpget を使用してサブ oid を取得すると、以下が返されます。
mysuboid = Counter32: 3518889984
私は tcpdump を使用しており、値部分の最後のセグメントは次のとおりです。
41 0500 d1be 0000
41 はタグ、05 は長さ、値は容量の下位 32 ビットのみを運ぶ必要があります。(注 7813857280 は 0x1.d1.be.00.00 です)
文字列型を使用すると正しい値が送信されることがわかりました(オクテットストリング形式)。しかし、snmp v2c で 64 ビット整数を使用する方法があるかどうか知りたいです。
ただし、NET-SNMP 5.4.2.1 を実行しています。どうもありがとう。
アップデート:
net-snmp doc pageの pass (およびおそらく pass_persist も) に関する snmpd.conf から以下を見つけました。Counter64 を Counter32 に強制していると思います。
Note:
The SMIv2 type counter64 and SNMPv2 noSuchObject exception are not supported.