[SNMP4J] SNMP Agent isn't Emulating SNMP Device

. . nfn_nln at hotmail.com
Fri May 13 21:04:29 CEST 2005


I am trying to emulate an SNMP enabled UPS to fake-out another device.

When I walk the actual UPS I get (among other things), but what I really 
care about is the things with *'s.:

OID: 1.3.6.1.2.1.33.1.2.1.0  type: snmp.SNMPInteger  value: 2
OID: 1.3.6.1.2.1.33.1.2.2.0  type: snmp.SNMPInteger  value: 0
OID: 1.3.6.1.2.1.33.1.2.3.0  type: snmp.SNMPInteger  value: 0
OID: 1.3.6.1.2.1.33.1.2.4.0  type: snmp.SNMPInteger  value: 100 *
OID: 1.3.6.1.2.1.33.1.2.5.0  type: snmp.SNMPInteger  value: 1118
OID: 1.3.6.1.2.1.33.1.2.6.0  type: snmp.SNMPInteger  value: 0
OID: 1.3.6.1.2.1.33.1.2.7.0  type: snmp.SNMPInteger  value: 22

AND

OID: 1.3.6.1.2.1.33.1.3.3.1.1.1  type: snmp.SNMPInteger  value: 1
OID: 1.3.6.1.2.1.33.1.3.3.1.2.1  type: snmp.SNMPInteger  value: 600
OID: 1.3.6.1.2.1.33.1.3.3.1.3.1  type: snmp.SNMPInteger  value: 206 *
OID: 1.3.6.1.2.1.33.1.3.3.1.4.1  type: snmp.SNMPInteger  value: 0
OID: 1.3.6.1.2.1.33.1.3.3.1.5.1  type: snmp.SNMPInteger  value: 0

When I do a simple getOID, I get:

OID: 1.3.6.1.2.1.33.1.2.4.0  type: snmp.SNMPInteger  value: 100

AND

OID: 1.3.6.1.2.1.33.1.3.3.1.3.1  type: snmp.SNMPInteger  value: 206

-------------------------------------------------------------------

Now for my virtual UPS, I implemented the following:

  private static DefaultMOTable createStaticUpsChargeTable() {
    MOTableSubIndex[] subIndexes =
        new MOTableSubIndex[] { new 
MOTableSubIndex(SMIConstants.SYNTAX_INTEGER) };
    MOTableIndex indexDef = new MOTableIndex(subIndexes, false);
    MOColumn[] columns = new MOColumn[7];
    int c = 0;
    columns[c++] =
        new MOColumn(c, SMIConstants.SYNTAX_INTEGER, null);
    columns[c++] =
        new MOColumn(c, SMIConstants.SYNTAX_INTEGER, null);
    columns[c++] =
        new MOColumn(c, SMIConstants.SYNTAX_INTEGER, null);
    columns[c++] =
        new MOColumn(c, SMIConstants.SYNTAX_INTEGER, null);
    columns[c++] =
        new MOColumn(c, SMIConstants.SYNTAX_INTEGER, null);
    columns[c++] =
        new MOColumn(c, SMIConstants.SYNTAX_INTEGER, null);
    columns[c++] =
        new MOColumn(c, SMIConstants.SYNTAX_INTEGER, null);

    DefaultMOTable upsTable =
        new DefaultMOTable(new OID("1.3.6.1.2.1.33.1.2"), indexDef, 
columns);
    MOMutableTableModel model = (MOMutableTableModel) upsTable.getModel();
    Variable[] rowValues1 = new Variable[] {
        new Integer32(2),
        new Integer32(0),
	new Integer32(0),
	upsCharge,
	new Integer32(1118),
	new Integer32(0),
	new Integer32(25)
    };

    model.addRow(new DefaultMOMutableRow2PC(new OID("0"), rowValues1));
    return upsTable;
  }

  private static DefaultMOTable createStaticUpsVoltageTable() {
    MOTableSubIndex[] subIndexes =
        new MOTableSubIndex[] { new 
MOTableSubIndex(SMIConstants.SYNTAX_INTEGER) };
    MOTableIndex indexDef = new MOTableIndex(subIndexes, false);
    MOColumn[] columns = new MOColumn[5];
    int c = 0;
    columns[c++] =
        new MOColumn(c, SMIConstants.SYNTAX_INTEGER, null);
    columns[c++] =
        new MOColumn(c, SMIConstants.SYNTAX_INTEGER, null);
    columns[c++] =
        new MOColumn(c, SMIConstants.SYNTAX_INTEGER, null);
    columns[c++] =
        new MOColumn(c, SMIConstants.SYNTAX_INTEGER, null);
    columns[c++] =
        new MOColumn(c, SMIConstants.SYNTAX_INTEGER, null);

    DefaultMOTable upsTable =
        new DefaultMOTable(new OID("1.3.6.1.2.1.33.1.3.3.1.3"), indexDef, 
columns);
    MOMutableTableModel model = (MOMutableTableModel) upsTable.getModel();
    Variable[] rowValues1 = new Variable[] {
        new Integer32(1),
	new Integer32(599),
	upsVoltage,
	new Integer32(0),
	new Integer32(0)
    };

    model.addRow(new DefaultMOMutableRow2PC(new OID("1"), rowValues1));
    return upsTable;
  }



When I walk my virtual UPS I get:

OID: 1.3.6.1.2.1.33.1.2.1.0  type: snmp.SNMPInteger  value: 2
OID: 1.3.6.1.2.1.33.1.2.2.0  type: snmp.SNMPInteger  value: 0
OID: 1.3.6.1.2.1.33.1.2.3.0  type: snmp.SNMPInteger  value: 0
OID: 1.3.6.1.2.1.33.1.2.4.0  type: snmp.SNMPInteger  value: 100
OID: 1.3.6.1.2.1.33.1.2.5.0  type: snmp.SNMPInteger  value: 1118
OID: 1.3.6.1.2.1.33.1.2.6.0  type: snmp.SNMPInteger  value: 0
OID: 1.3.6.1.2.1.33.1.2.7.0  type: snmp.SNMPInteger  value: 25

AND

OID: 1.3.6.1.2.1.33.1.3.3.1.3.1.1  type: snmp.SNMPInteger  value: 1
OID: 1.3.6.1.2.1.33.1.3.3.1.3.2.1  type: snmp.SNMPInteger  value: 599
OID: 1.3.6.1.2.1.33.1.3.3.1.3.3.1  type: snmp.SNMPInteger  value: 208
OID: 1.3.6.1.2.1.33.1.3.3.1.3.4.1  type: snmp.SNMPInteger  value: 0
OID: 1.3.6.1.2.1.33.1.3.3.1.3.5.1  type: snmp.SNMPInteger  value: 0

This *looks* correct until I try to get OID's:

Exception during retrieval:  snmp.SNMPGetException: OID 
1.3.6.1.2.1.33.1.2.4.0 not available for retrieval

AND

OID: 1.3.6.1.2.1.33.1.3.3.1.3.1  type: snmp.SNMPNull  value: Null

-------------------------------------------------------------------

1) How can I make my SNMP4J Agent better emulate the actual SNMP device?

-------------------------------------------------------------------

2) In addition, the walk of the actual UPS yielded 
"1.3.6.1.2.1.33.1.3.3.1.3.1", but I KNOW that the actual OID being querried 
is actually "1.3.6.1.2.1.33.1.3.3.1.3".





More information about the SNMP4J mailing list