我正在研究使用snmp->get_bulk_request()
方法进行SNMP查询以从网络设备获取接口表详细信息的代码。
我面临的问题是有时,我从查询中收到的数据缺少一些细节。这是一个短暂的问题。
我相信放置一定数量的重试会降低出错的可能性。但是,当我浏览snmp->get_bulk_request()
的文档时,我找到了一个名为的参数
maxrepetitions
。我从文档中不清楚这个参数是做什么的。
我试图弄清maxrepetitions
参数与get_bulk_request
调用方法一起使用时的效果。我查看了“get_bulk_request() - send a SNMP get-bulk-request to the remote agent”中的文档,发现了这个:
$result = $session->get_bulk_request(
[-callback => sub {},] # non-blocking
[-delay => $seconds,] # non-blocking
[-contextengineid => $engine_id,] # v3
[-contextname => $name,] # v3
[-nonrepeaters => $non_reps,]
[-maxrepetitions => $max_reps,]
-varbindlist => \@oids,
);
get-bulk-request -maxrepetitions
的默认值为0. maxrepetitions
值指定要为变量绑定列表中的其余变量返回的后继数。
具体来说,我的问题是:
maxrepetitions
是否等同于为查询添加重试次数?。如果没有,确保SNMP查询返回的数据的概率误差很小的最佳方法是什么?
答案 0 :(得分:1)
从手册页: 在GETBULK PDU中设置max-repetitions字段。这指定了重复的最大迭代次数 变量。 实施例
snmpbulkget -v2c -Cn1 -Cr5 -Os -c public zeus system ifTable
will retrieve the variable system.sysDescr.0 (which is the lexicographically next object to system) and the first 5 objects in
the ifTable:
sysDescr.0 = STRING: "SunOS zeus.net.cmu.edu 4.1.3_U1 1 sun4m"
ifIndex.1 = INTEGER: 1
ifIndex.2 = INTEGER: 2
ifDescr.1 = STRING: "lo0"
et cetera.
答案 1 :(得分:1)
理解SNMP中字段的正确方法是直接转到RFC文档:
http://tools.ietf.org/search/rfc3416#page-14
在RFC 3416中详细解答了max-repetitions
的含义,因此您应该先阅读它。
(对于想要在我使用链接时对此答案进行投票的人)仅从该文档中提取max-repetitions
的解释相当困难,为了解释它你还需要知道什么是non-repeaters
。