14.3. SNMP setThe 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:
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.
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.
|