16.1.3 Compiling the MBeans and Agents
Compile all the classes in the examplesDir/current/Snmp/Agent directory. The classpath must
contain the current directory (.):
$ javac -classpath classpath -d . *.java
|
We are now ready to look at the implementation of SNMPv1/v2 and SNMPv3
agents and run the example applications.
16.2 SNMP Protocol Adaptor
Once your MIBs are implemented as MBeans, your
agent application needs an SNMP protocol adaptor to function as an SNMP agent.
Because the SNMP adaptor is also an MBean, it can be created and started dynamically
in your agent by a connected manager, or through the HTML adaptor.
Since Java DMK 5.1, the performance of the SNMP
protocol adaptor has been improved by the addition of multithread support.
The following SNMPv1/v2 Agent example launches
the protocol adaptor for SNMPv1/v2 agents, through the code of the agent application.
Example 16-1 SNMPv1/v2 Agent Application
public class Agent {
static SnmpAdaptorServer snmpAdaptor = null;
private static int nbTraps = -1;
public static void main(String args[]) {
final MBeanServer server;
final ObjectName htmlObjName;
final ObjectName snmpObjName;
final ObjectName mibObjName;
final ObjectName trapGeneratorObjName;
int htmlPort = 8082;
int snmpPort = 161;
[...]
try {
server = MBeanServerFactory.createMBeanServer();
String domain = server.getDefaultDomain();
// Create and start the HTML adaptor.
//
htmlObjName = new ObjectName( domain +
":class=HtmlAdaptorServer,protocol=html,port="
+ htmlPort);
HtmlAdaptorServer htmlAdaptor = new HtmlAdaptorServer(htmlPort);
server.registerMBean(htmlAdaptor, htmlObjName);
htmlAdaptor.start();
// Create and start the SNMP adaptor.
//
snmpObjName = new ObjectName(domain +
":class=SnmpAdaptorServer,protocol=snmp,port=" + snmpPort);
snmpAdaptor = new SnmpAdaptorServer(snmpPort);
server.registerMBean(snmpAdaptor, snmpObjName);
snmpAdaptor.start();
// The rest of the code is specific to our SNMP agent
// Send a coldStart SNMP Trap (use port = snmpPort+1)
// Trap communities are defined in the ACL file
//
snmpAdaptor.setTrapPort(new Integer(snmpPort+1));
snmpAdaptor.sendV1Trap(0, 0, null);
// Create the MIB-II (RFC 1213) and add it to the MBean server.
//
mibObjName = new ObjectName("snmp:class=RFC1213_MIB");
RFC1213_MIB mib2 = new RFC1213_MIB();
// The MBean will register all group and table entry MBeans
// during its pre-registration
server.registerMBean(mib2, mibObjName);
// Bind the SNMP adaptor to the MIB
snmpAdaptor.addMib(mib2);
[...]
} catch (Exception e) {
e.printStackTrace();
}
}
// Needed to get a reference on the SNMP adaptor object
static public SnmpAdaptorServer getSnmpAdaptor() {
return snmpAdaptor;
}
}
|
The following SNMPv3 AgentV3 example launches the protocol adaptor for SNMPv3 agents,
in the same way as in the SNMPv1/v2 Agent example.
This example creates a simple SNMPv3 agent, without encryption. See "Security Mechanisms in the SNMP Toolkit"
for details of how to implement SNMPv3 agents with encryption.
Example 16-2 SNMPv3 AgentV3 Application
public class AgentV3 {
static SnmpV3AdaptorServer snmpAdaptor = null;
private static int nbTraps = -1;
public static void main(String args[]) {
final MBeanServer server;
final ObjectName htmlObjName;
final ObjectName snmpObjName;
final ObjectName mibObjName;
final ObjectName trapGeneratorObjName;
int htmlPort = 8082;
int snmpPort = 161;
[...]
try {
server = MBeanServerFactory.createMBeanServer();
String domain = server.getDefaultDomain();
// Create and start the HTML adaptor.
//
htmlObjName = new ObjectName(domain +
":class=HtmlAdaptorServer,protocol=html,port="
+ htmlPort);
HtmlAdaptorServer htmlAdaptor = new HtmlAdaptorServer(htmlPort);
server.registerMBean(htmlAdaptor, htmlObjName);
htmlAdaptor.start();
// Create and start the SNMP adaptor.
//
snmpObjName = new ObjectName(domain +
":class=SnmpAdaptorServer,protocol=snmp,port=" + snmpPort);
snmpAdaptor = new SnmpV3AdaptorServer(snmpPort);
server.registerMBean(snmpAdaptor, snmpObjName);
snmpAdaptor.registerUsmMib(server, null);
snmpAdaptor.start();
// Send a coldStart SNMP Trap.
// Use port = snmpPort+1.
//
snmpAdaptor.setTrapPort(new Integer(snmpPort+1));
snmpAdaptor.snmpV1Trap(0, 0, null);
println("Done.");
// Create the MIB II (RFC 1213) and add it to the MBean server.
//
mibObjName= new ObjectName("snmp:class=RFC1213_MIB");
RFC1213_MIB mib2 = new RFC1213_MIB_IMPL();
server.registerMBean(mib2, mibObjName);
// Bind the SNMP adaptor to the MIB
snmpAdaptor.addMib(mib2, "TEST-CONTEXT");
} catch (Exception e) {
e.printStackTrace();
}
}
public static SnmpAdaptorServer getSnmpAdaptor() {
return snmpAdaptor;
}
|
|