SNMPSet.java revision e75c2484bff064fbbf51e92aed4f37b08e6427b7
78a072e1b56619e3230735ae073668311232ec94vboxsync * CDDL HEADER START
78a072e1b56619e3230735ae073668311232ec94vboxsync * The contents of this file are subject to the terms of the
78a072e1b56619e3230735ae073668311232ec94vboxsync * Common Development and Distribution License, Version 1.0 only
cc260ed3418d1fd2771d0395f818f76808b60238vboxsync * (the "License"). You may not use this file except in compliance
78a072e1b56619e3230735ae073668311232ec94vboxsync * with the License.
78a072e1b56619e3230735ae073668311232ec94vboxsync * You can obtain a copy of the license at
78a072e1b56619e3230735ae073668311232ec94vboxsync * trunk/opends/resource/legal-notices/OpenDS.LICENSE
d5d45608052fd506e4114bf112df6efae7fcd8a7vboxsync * See the License for the specific language governing permissions
d5d45608052fd506e4114bf112df6efae7fcd8a7vboxsync * and limitations under the License.
78a072e1b56619e3230735ae073668311232ec94vboxsync * When distributing Covered Code, include this CDDL HEADER in each
78a072e1b56619e3230735ae073668311232ec94vboxsync * file and include the License file at
78a072e1b56619e3230735ae073668311232ec94vboxsync * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
78a072e1b56619e3230735ae073668311232ec94vboxsync * add the following below this CDDL HEADER, with the fields enclosed
78a072e1b56619e3230735ae073668311232ec94vboxsync * by brackets "[]" replaced with your own identifying information:
78a072e1b56619e3230735ae073668311232ec94vboxsync * Portions Copyright [yyyy] [name of copyright owner]
78a072e1b56619e3230735ae073668311232ec94vboxsync * CDDL HEADER END
78a072e1b56619e3230735ae073668311232ec94vboxsync * Copyright 2008 Sun Microsystems, Inc.
78a072e1b56619e3230735ae073668311232ec94vboxsync// OpenDS imports
78a072e1b56619e3230735ae073668311232ec94vboxsyncimport org.opends.server.snmp.DIRECTORY_SERVER_MIBOidTable;
78a072e1b56619e3230735ae073668311232ec94vboxsync// OpenDMK imports
2d86fd6bcfe35a4bb83bb8a4fe68090693cdce95vboxsyncimport com.sun.management.snmp.SnmpEngineParameters;
78a072e1b56619e3230735ae073668311232ec94vboxsyncimport com.sun.management.snmp.manager.SnmpParameters;
78a072e1b56619e3230735ae073668311232ec94vboxsyncimport com.sun.management.snmp.manager.usm.SnmpUsmPeer;
78a072e1b56619e3230735ae073668311232ec94vboxsyncimport com.sun.management.snmp.manager.usm.SnmpUsmParameters;
78a072e1b56619e3230735ae073668311232ec94vboxsync * This class perform a SNMP set operation.
78a072e1b56619e3230735ae073668311232ec94vboxsyncpublic class SNMPSet {
78a072e1b56619e3230735ae073668311232ec94vboxsync * Gets the calling arguments.
78a072e1b56619e3230735ae073668311232ec94vboxsync * @param args SNMP agent version + SNMP agent host + SNMP agent port
78a072e1b56619e3230735ae073668311232ec94vboxsync * @return 0 if the init succeeded or 1 if the init failed
67927207a2d6bb545eb655ef14cdb090b1957120vboxsync // Missing arguments
c3d2b15ad840b405062f4c2c6b127d6fc107c7b2vboxsync "usage: " +
67927207a2d6bb545eb655ef14cdb090b1957120vboxsync " -v <SNMP version>" +
67927207a2d6bb545eb655ef14cdb090b1957120vboxsync " -h <remoteHost>" +
67927207a2d6bb545eb655ef14cdb090b1957120vboxsync " -p <port>" +
67927207a2d6bb545eb655ef14cdb090b1957120vboxsync " -o <oids>" +
67927207a2d6bb545eb655ef14cdb090b1957120vboxsync " -c <community>" +
67927207a2d6bb545eb655ef14cdb090b1957120vboxsync " -u <user>" +
67927207a2d6bb545eb655ef14cdb090b1957120vboxsync " -l <securityLevel>" +
67927207a2d6bb545eb655ef14cdb090b1957120vboxsync " -f <securityFile>" +
67927207a2d6bb545eb655ef14cdb090b1957120vboxsync " -s <connectionStatus>" +
67927207a2d6bb545eb655ef14cdb090b1957120vboxsync " -n <checkOIDs>");
78a072e1b56619e3230735ae073668311232ec94vboxsync System.out.println("Unknown option -" + opt.charAt(1) + ".");
78a072e1b56619e3230735ae073668311232ec94vboxsync * Open SNMP connection with SNMP agent.
78a072e1b56619e3230735ae073668311232ec94vboxsync * @return 0 if the connect succeeded or 1 if the connect failed
78a072e1b56619e3230735ae073668311232ec94vboxsync public int connect() {
c3d2b15ad840b405062f4c2c6b127d6fc107c7b2vboxsync // The OidTable generated by mibgen when compiling DIRECTORY_SERVER_MIB
78a072e1b56619e3230735ae073668311232ec94vboxsync final SnmpOidTableSupport oidTable = new DIRECTORY_SERVER_MIBOidTable();
78a072e1b56619e3230735ae073668311232ec94vboxsync // Specify the OidTable containing all the DIRECTORY_SERVER_MIB knowledge
78a072e1b56619e3230735ae073668311232ec94vboxsync // Create the session
78a072e1b56619e3230735ae073668311232ec94vboxsync session = new SnmpSession("Set V" + version + " session");
78a072e1b56619e3230735ae073668311232ec94vboxsync // Create an SnmpPeer object for representing the entity
78a072e1b56619e3230735ae073668311232ec94vboxsync // to communicate with.
78a072e1b56619e3230735ae073668311232ec94vboxsync final SnmpPeer agent = new SnmpPeer(remoteHost, port);
78a072e1b56619e3230735ae073668311232ec94vboxsync // Specify the read and write community to be used
78a072e1b56619e3230735ae073668311232ec94vboxsync // Specify the protocol version
78a072e1b56619e3230735ae073668311232ec94vboxsync params.setProtocolVersion(SnmpDefinitions.snmpVersionOne);
78a072e1b56619e3230735ae073668311232ec94vboxsync params.setProtocolVersion(SnmpDefinitions.snmpVersionTwo);
78a072e1b56619e3230735ae073668311232ec94vboxsync // Associate the parameters with the agent
78a072e1b56619e3230735ae073668311232ec94vboxsync // Set the default peer (agent) to a SnmpSession
78a072e1b56619e3230735ae073668311232ec94vboxsync // Custom engine parameters
78a072e1b56619e3230735ae073668311232ec94vboxsync // Activate encryption
78a072e1b56619e3230735ae073668311232ec94vboxsync // Set the security file
78a072e1b56619e3230735ae073668311232ec94vboxsync // Create the session
cc260ed3418d1fd2771d0395f818f76808b60238vboxsync "Set V3 session",
cc260ed3418d1fd2771d0395f818f76808b60238vboxsync // SNMP V3 introduces the notion of SnmpEngine. An engine is
cc260ed3418d1fd2771d0395f818f76808b60238vboxsync // associated to the session. Other objects might need
cc260ed3418d1fd2771d0395f818f76808b60238vboxsync // the engine. You can access it using getEngine method.
cc260ed3418d1fd2771d0395f818f76808b60238vboxsync // Create an SnmpUsmPeer object for representing the entity
cc260ed3418d1fd2771d0395f818f76808b60238vboxsync // to communicate with
cc260ed3418d1fd2771d0395f818f76808b60238vboxsync final SnmpUsmPeer agentV3 = new SnmpUsmPeer(engine, remoteHost, port);
cc260ed3418d1fd2771d0395f818f76808b60238vboxsync // Create USM parameters for the principal defaultuser (user used when
cc260ed3418d1fd2771d0395f818f76808b60238vboxsync // requests are sent: the defaultuser is a template and for this
cc260ed3418d1fd2771d0395f818f76808b60238vboxsync // reason we cannot find it under the user mib (not created as a user)
cc260ed3418d1fd2771d0395f818f76808b60238vboxsync final SnmpUsmParameters paramsV3 = new SnmpUsmParameters(
cc260ed3418d1fd2771d0395f818f76808b60238vboxsync // Set the security level authentication but without privacy
f06e830c9fdbc3d9e89867d4429404c5446bc513vboxsync // Set the context name
f06e830c9fdbc3d9e89867d4429404c5446bc513vboxsync // Set the contextEngineId discovered by the peer upon
f06e830c9fdbc3d9e89867d4429404c5446bc513vboxsync // its creation
f06e830c9fdbc3d9e89867d4429404c5446bc513vboxsync paramsV3.setContextEngineId(agentV3.getEngineId().getBytes());
f06e830c9fdbc3d9e89867d4429404c5446bc513vboxsync // Associate the parameters with the agent
f06e830c9fdbc3d9e89867d4429404c5446bc513vboxsync // Discover timeliness of creation and boot
f06e830c9fdbc3d9e89867d4429404c5446bc513vboxsync if (connectStatus.compareTo("SnmpStatusException") == 0) {
f06e830c9fdbc3d9e89867d4429404c5446bc513vboxsync "connect() of SNMPSet catched as expected a " +
f06e830c9fdbc3d9e89867d4429404c5446bc513vboxsync "SNMP status exception: " + e.getMessage() + "\"");
f06e830c9fdbc3d9e89867d4429404c5446bc513vboxsync "connect() of SNMPSet should not catch a " +
78a072e1b56619e3230735ae073668311232ec94vboxsync "SNMP status exception: " + e.getMessage() + "\"");
f001a45ec92f71f1e4c1015485fc1ddf84e8059cvboxsync } catch (Exception e) {
78a072e1b56619e3230735ae073668311232ec94vboxsync "connect() of SNMPSet catched an unexpected exception: " +
78a072e1b56619e3230735ae073668311232ec94vboxsync // Set the default peer (agent) to a SnmpSession
78a072e1b56619e3230735ae073668311232ec94vboxsync "connect() of SNMPSet: Unknown SNMP version: "
78a072e1b56619e3230735ae073668311232ec94vboxsync } catch (Exception e) {
78a072e1b56619e3230735ae073668311232ec94vboxsync "connect() of SNMPSet catched an unexpected exception: " +
78a072e1b56619e3230735ae073668311232ec94vboxsync System.out.println("connect() of SNMPSet succeeded");
78a072e1b56619e3230735ae073668311232ec94vboxsync System.out.println("connect() of SNMPSet succeeded");
78a072e1b56619e3230735ae073668311232ec94vboxsync * Perform an SNMP set request on SNMP agent.
78a072e1b56619e3230735ae073668311232ec94vboxsync * @return 0 if the setRequest succeeded or 1 if the setRequest failed
78a072e1b56619e3230735ae073668311232ec94vboxsync public int setRequest() {
78a072e1b56619e3230735ae073668311232ec94vboxsync // Build the list of variables you want to query
78a072e1b56619e3230735ae073668311232ec94vboxsync final SnmpVarBindList list = new SnmpVarBindList("Get varbind list");
78a072e1b56619e3230735ae073668311232ec94vboxsync // Write one specific OID
78a072e1b56619e3230735ae073668311232ec94vboxsync // Make the SNMP set request
78a072e1b56619e3230735ae073668311232ec94vboxsync "setRequest() of SNMPSet: Start SNMP V" + version +
78a072e1b56619e3230735ae073668311232ec94vboxsync // Set request
78a072e1b56619e3230735ae073668311232ec94vboxsync SnmpRequest request = session.snmpSetRequest(null, list);
78a072e1b56619e3230735ae073668311232ec94vboxsync // Check for a timeout of the request
78a072e1b56619e3230735ae073668311232ec94vboxsync boolean completed = request.waitForCompletion((maxRetries + 1) * timeOut);
78a072e1b56619e3230735ae073668311232ec94vboxsync if (completed == false) {
78a072e1b56619e3230735ae073668311232ec94vboxsync "setRequest() of SNMPSet: Request timed out, " +
78a072e1b56619e3230735ae073668311232ec94vboxsync "check reachability of agent.");
78a072e1b56619e3230735ae073668311232ec94vboxsync // Print request
78a072e1b56619e3230735ae073668311232ec94vboxsync "setRequest() of SNMPSet: Request= " +
78a072e1b56619e3230735ae073668311232ec94vboxsync "getRequest() of SNMPGet: Finish SNMP V" +
78a072e1b56619e3230735ae073668311232ec94vboxsync // Now we have a response. Check if the response contains an error
78a072e1b56619e3230735ae073668311232ec94vboxsync String errorStatus = SnmpRequest.snmpErrorToString(
78a072e1b56619e3230735ae073668311232ec94vboxsync "getRequest() of SNMPGet: Error status= " +
78a072e1b56619e3230735ae073668311232ec94vboxsync "getRequest() of SNMPGet: Error index= " +
78a072e1b56619e3230735ae073668311232ec94vboxsync "getRequest() of SNMPGet: Get request failed as " +
78a072e1b56619e3230735ae073668311232ec94vboxsync "getRequest() of SNMPGet: Get request should " +
78a072e1b56619e3230735ae073668311232ec94vboxsync // Now we shall display the content of the result
78a072e1b56619e3230735ae073668311232ec94vboxsync SnmpVarBindList resp = request.getResponseVarBindList();
78a072e1b56619e3230735ae073668311232ec94vboxsync System.out.println("getRequest() of SNMPGet: Result=");
78a072e1b56619e3230735ae073668311232ec94vboxsync // Request should failed
78a072e1b56619e3230735ae073668311232ec94vboxsync "getRequest() of SNMPGet: Get request should " +
78a072e1b56619e3230735ae073668311232ec94vboxsync // Check that we obtain correct values for the OIDs
78a072e1b56619e3230735ae073668311232ec94vboxsync "getRequest() of SNMPGet: Returned values for" +
78a072e1b56619e3230735ae073668311232ec94vboxsync " OIDs are correct.");
78a072e1b56619e3230735ae073668311232ec94vboxsync "getRequest() of SNMPGet: Returned values for" +
78a072e1b56619e3230735ae073668311232ec94vboxsync " OIDs are not correct.");
78a072e1b56619e3230735ae073668311232ec94vboxsync // Check that we obtain incorrect values for the OIDs
78a072e1b56619e3230735ae073668311232ec94vboxsync "getRequest() of SNMPGet: Returned values for" +
78a072e1b56619e3230735ae073668311232ec94vboxsync " OIDs should not be correct.");
78a072e1b56619e3230735ae073668311232ec94vboxsync "getRequest() of SNMPGet: Returned values for" +
78a072e1b56619e3230735ae073668311232ec94vboxsync " OIDs are not correct as expected.");
78a072e1b56619e3230735ae073668311232ec94vboxsync } catch (Exception e) {
78a072e1b56619e3230735ae073668311232ec94vboxsync "setRequest() of SNMPSet catched an unexpected exception: " +
78a072e1b56619e3230735ae073668311232ec94vboxsync System.out.println("setRequest() of SNMPSet succeeded");
78a072e1b56619e3230735ae073668311232ec94vboxsync System.out.println("setRequest() of SNMPSet failed");
78a072e1b56619e3230735ae073668311232ec94vboxsync * Close SNMP connection with SNMP agent.
78a072e1b56619e3230735ae073668311232ec94vboxsync public void disconnect() {
78a072e1b56619e3230735ae073668311232ec94vboxsync // Stop and destroy the SnmpSession if still there
78a072e1b56619e3230735ae073668311232ec94vboxsync } catch (Exception e) {
78a072e1b56619e3230735ae073668311232ec94vboxsync // possible session already ended
78a072e1b56619e3230735ae073668311232ec94vboxsync System.out.println("disconnect() of SNMPSet succeeded");
78a072e1b56619e3230735ae073668311232ec94vboxsync * @param args arguments
78a072e1b56619e3230735ae073668311232ec94vboxsync // Retrieve parameters
3f6d4775faa373634b2f3fc2a90fc517733f6fd6vboxsync // If init() succeeded then open connection
67927207a2d6bb545eb655ef14cdb090b1957120vboxsync // If connect() succeeded then perform set request
67927207a2d6bb545eb655ef14cdb090b1957120vboxsync if (rc == 0 && connectStatus.compareTo("SnmpStatusException") != 0) {
3f6d4775faa373634b2f3fc2a90fc517733f6fd6vboxsync // Close connection
3f6d4775faa373634b2f3fc2a90fc517733f6fd6vboxsync // Arguments
f06e830c9fdbc3d9e89867d4429404c5446bc513vboxsync boolean validOIDs = true;
3f6d4775faa373634b2f3fc2a90fc517733f6fd6vboxsync // SnmpSession