【发布时间】:2013-12-18 21:49:42
【问题描述】:
我正在编写代码,该代码使用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 查询返回的数据中错误概率低的最佳方法是什么?
【问题讨论】:
-
1) 您是否尝试过在命令行中使用
snmpwalk来复制问题? (这可能很困难,因为您说问题是暂时的,但可以排除Net::SNMP本身的问题。2)尝试启用调试模式:$session->debug([$mask]);3)检查/增加max_msg_size:$octets = $session->max_msg_size([$octets]);