PDU(協議數據單元),用來表示管理站跟代理站進行通信的數據。包括PDU的類型、傳輸的數據集合、錯誤說明等。
除SNMPv1 Trap外,其他操作類型的PDU大致相同。
SNMP4J針對SNMP的各個版本,開發了三個有關PDU的類。PDU(針對SNMPv2c)、PDUv1(針對SNMPv1)、ScopedPDU(針對SNMPv3),但三個類除各自特別的一些參數外,都基本相同。所以SNMP4J在設計的時候,將PDU設計成另外兩個的超類(Super Class,java中定義被繼承的類爲SuperClass,也可譯爲父類),使他們能夠共享大部分功能。
(1)PDU
1)pdu類型(SNMPv1 支持5種:get、set、getnext、trap、getresponse,SNMPv2c增加了getbulk、inform)
int getType() void setType(int type)
2)錯誤(主要有6種錯誤)
void setErrorStatus(int status) int getErrorStatus() String getErrorStatusText() void setErrorIndex(int index) int getErrorIndex()
3)變量
void add(VariableBinding vb) //對於除了get、getnext、getbulk外 void addAll(VariableBinding[] vbs) // 對於除get、getnext、getbulk外的 void addOID(VariableBinding vb) // 對於get、getnext、getbulk void addAllOID(VariableBinding[] vbs) // 對於get、getnext、getbulk VariableBinding get(int i) VariableBinding[] toArray() Vector getVariableBindings() void set(int i, VariableBinding vb) void remove(int i) void clear() void size()
(2)PDUv1
PDUv1繼承了PDU,除SNMPv1 Trap操作外,其他都跟PDU相同。因爲PDUv1的Trap設計PDU不同於其他操作的PDU,它包括:對象標識符(OID)、代理IP地址(agent-addr)、時間戳(time-stamp)、通用代理類型(generic-trap)、特定代理類型(specific-trap)。所以相應的增加了對這些字段的get/set操作。
(3)ScopedPDU
SNMPv3採用了不同安全策略,它的PDU也增加了有關安全方面的幾個字段:上下文名稱(contextName)、上下文引擎ID(contextEngineID)等,其他PDU字段屬於USM來管理。
所以ScopedPDU在PDU的基礎上增加了相應的get/set操作。