Section 14.3. SNMP set


14.3. SNMP set

The SnmpSet class looks very similar to the SnmpWalk class. As with the SnmpWalk class, _pduType is set to the appropriate SNMP operation we plan to perform:

       private int _pduType = PDU.SET; 

We've introduced a doSet( ) method that operates in a similar manner to the doWalk( ) method of the SnmpWalk class. An SNMP set has the following components:

  • An OID

  • The syntax for the OID

  • A new or different value you wish the OID to take on in the target's SNMP stack

The difference between these classes lies in that third element, the new value you are setting to.

Let's look at the Main class, which uses SnmpSet:

     public class Main{       public Main( ){       }       public static void main(String[] args){         System.out.println("Doing SNMPv2 set..");         SnmpSet set = new SnmpSet("127.0.0.1",           "1.3.6.1.2.1.1.6.0={s}Right here, right         now.");           set.doSet( );         System.out.println("Doing SNMPv3 set..");         set = new SnmpSet("127.0.0.1",           "1.3.6.1.2.1.1.6.0={s}Some place else..",           "kschmidt","MD5","mysecretpass","DES","mypassphrase");         set.doSet( );       }     } 

The notation we are using to specify the OID, syntax, and value is the same as the notation for the SNMP4J command-line tool. It has the following format:

     OID={syntax}value_for_OID 

Table 14-1 lists the different values that syntax can take on, along with the corresponding SNMP4J class that is used to encode value_for_OID into that type.

Table 14-1. Syntax values with SNMP4J class names

Syntax value

SNMP4J class

Meaning

i

Integer32

Signed 32-bit integer

u

UnsignedInteger32

Unsigned 32-bit integer

s

OctetString

Octet string

x

OctetString.fromString(value, ':', 16);

Octet string specified as a hex value with bytes separated by colons

d

OctetString.fromString(value, '.', 10);

Octet string specified as a decimal value with bytes separated with dots

b

OctetString.fromString(value, '', 2);

Octet string specified as a binary value with bytes separated with spaces

n

Null

Null value

o

OID

OID value

t

TimeTicks

TimeTicks value

a

IpAddress

IP Address


The getVariableBinding( ) method parses the OID, syntax, and value and encodes the value based on the syntax. Consider the following code:

     VariableBinding vb = new VariableBinding(new OID(oid));     ...     Variable variable;     ...     variable = new Integer32(Integer.parseInt(value));     ...     vb.setVariable(variable);     ...     v.add(vb); 

This sequence, taken from getVariableBinding( ), shows how to create a new VariableBinding from the OID we want to set, create a new Variable encoded with the proper syntax and value for the OID, and set it within the VariableBinding. The VariableBinding is then added to a Vector, which was created earlier.

The following code shows how the Vector containing the VariableBinding is placed into the request.

     PDU request = createPDU(_target);     for (int i=0; i<_vbs.size( ); i++) {       request.add((VariableBinding)_vbs.get(i));     } 

Since we loop over the Vector, you can add as many VariableBindings as desired to the Vector and they will all get placed in the PDU.

Finally, the SET request is now ready to send:

     responseEvent = snmp.send(request, _target); 

When we run the program, the output looks like this:

     $ java -classpath SNMP4J  .jar:. Main     Doing SNMPv2 set..     Received response after 18 millis     Received response: requestID=1713864373, errorIndex=0, errorStatus=Success(0)     1.3.6.1.2.1.1.6.0 = Right here, right now.     Doing SNMPv3 set..     Received response after 618 millis     Received response: requestID=1705592271, errorIndex=0, errorStatus=Success(0)     1.3.6.1.2.1.1.6.0 = Someplace else. 

Here we set the sysLocation (1.3.6.1.2.1.1.6)[*] to "Right here, right now." using SNMPv2c and then set it to "Someplace else..." using SNMPv3. We also see the errorIndex and errorStatus, which both confirm that the set operations succeeded.

[*] Recall that since sysName is a scalar object and not a columnar object, we use the OID 1.3.6.1.2.1.1.6.0 and not 1.3.6.1.2.1.1.6.




Essential SNMP
Essential SNMP, Second Edition
ISBN: 0596008406
EAN: 2147483647
Year: 2003
Pages: 165

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net