IBM i 7.1和IBM i 7.2版本最近得到了增强,以为SNMP相关功能提供新功能。 这些新功能为IBM i客户提供了改进的性能和增强的可用性。 在本文中,我将讨论这些新的增强功能,并提供一个使用其中一些功能的编程示例。 本文的主要重点是使用GetBulk
操作轻松地从标准SNMP表之一检索数据。
通过端口161发送SNMP响应
过去,IBM i通过UDP端口161接收SNMP请求,然后通过随机临时端口发送响应。 此行为使管理员难以配置防火墙,并且仍然允许SNMP通信在IBM i SNMP代理与基于SNMP的远程系统或网络管理应用程序之间流动。 SNMP代理已更改,因此现在将通过UDP端口161发送对SNMP请求的响应。现在还将通过端口161发送源自IBM i系统的SNMP陷阱消息。此更改不会影响IBM i陷阱管理器。 ,它将继续通过UDP端口162接收陷阱消息。IBM i陷阱管理器转发的陷阱也将通过端口161发送。此更改也不会影响将继续通过以下方式发送请求的本机IBM i SNMP管理器API。随机的临时端口。
配置存储池和磁盘块大小
随着存储池和单个磁盘单元的存储大小增加,原始SNMP设计的限制已达到或在某些情况下已超出。 例如,SNMP在IBM i系统上为8 TB磁盘单元返回的大小在某些系统管理应用程序中可能显示为负数,或者可能被标记为无效。 SNMP的最新增强功能允许配置块大小,以用于返回存储池和磁盘单元的存储大小信息。 要注意的一件事是,对磁盘单元使用这种支持可能会导致IBM i不符合RFC 1514标准,该标准将磁盘单元块的大小定义为1024字节。 可以使用“ Change SNMP Attributes (CHGSNMPA)
命令上的新块大小(BLKSIZE)参数来配置更大的块大小。 通过使用适当的块大小,可以避免与错误的存储大小值或系统管理应用程序将磁盘单元标记为无效有关的混乱。
GetBulk操作支持
SNMP GetBulk操作是在SNMP版本2(SNMPv2)中引入的,它提供了一种方法,可通过单个SNMP请求轻松获得相对大量的数据。 尽管IBM i不支持SNMPv2,但它确实支持SNMP版本3,该版本为SNMP消息提供了改进的安全性和保密性。 现在,IBM i 7.1和IBM i 7.2代理完全支持SNMPv3的GetBulk请求。 另外,在IBM i 7.2中,有一个新的SNMP管理器API snmpGetbulk_v3
,可用于将GetBulk请求发送到SNMPv3代理。
使用GetBulk检索表信息
现在,让我们看一下在IBM i系统上运行的SNMP管理器的C程序示例。 GetBulk操作用于从其他系统检索有关存储池的信息。 此示例假定SNMPv3已在SNMP管理器(SNMP请求的源)和代理(SNMP请求的目标 )上启用并配置。 有关此示例,请参考GetBulk源代码 。
以下步骤突出显示了此示例程序中的关键操作。
- 对于每个代理,程序必须在SNMP管理器程序和代理之间执行SNMPv3代理引擎ID发现。 这可以通过调用
snmpDiscover_v3()
API来完成。 如果API调用成功,则可以在管理器和代理之间进行SNMPv3操作。s
nmpDiscover_v3()
API返回一个控制块,其他SNMPv3 API使用该控制块进行时间同步和身份验证。 返回的控制块特定于代理。 因此,示例程序为每个代理发出一次snmpDiscover_v3()
API。
清单1.执行SNMPv3代理引擎ID发现
<