[SNMP4J] create snmp simulator
simon simon
simonsew2001 at hotmail.com
Fri Jun 18 09:25:20 CEST 2010
Hi,
I tried using one static oid and its value.
I'm still not able to retrieve the required value.
I copy and paste the TestAgent code.
public class AgentUtil extends BaseAgent {
static {
LogFactory.setLogFactory(new Log4jLogFactory());
}
private String address;
public static boolean STOP=false;
private Hashtable oid_values = new Hashtable();
public AgentUtil(String address,Hashtable oid_values) throws IOException {
super(new File("conf.agent"), new File("bootCounter.agent"),
new CommandProcessor(new OctetString(MPv3.createLocalEngineID())));
this.address = address;
this.oid_values = oid_values;
agent.setWorkerPool(ThreadPool.create("RequestPool", 4));
}
@Override
protected void registerManagedObjects() {
}
public void registerManagedObject(ManagedObject mo) {
try {
server.register(mo, null);
} catch (DuplicateRegistrationException ex) {
throw new RuntimeException(ex);
}
}
public void registerCustomMO() {
// String key = "";
try {
// Iterator iterator = oid_values.keySet().iterator();
// while(iterator.hasNext()) {
// key = (String) iterator.next();
server.register(createManagedObject(),null);
// }
} catch (DuplicateRegistrationException e) {
e.printStackTrace();
}
}
private ManagedObject createManagedObject() {
VariableBinding vb = new VariableBinding(new OID("0"),new OctetString("WinsXP"));
StaticMOGroup group = new StaticMOGroup(new OID("1.2.3.4.5.6.7"),new VariableBinding[]{vb});
return group;
}
public void unregisterManagedObject(MOGroup moGroup) {
moGroup.unregisterMOs(server, getContext(moGroup));
}
/*
* Empty implementation
*/
@Override
protected void addNotificationTargets(SnmpTargetMIB targetMIB,
SnmpNotificationMIB notificationMIB) {
targetMIB.addDefaultTDomains();
}
/**
* Minimal View based Access Control
*
* http://www.faqs.org/rfcs/rfc2575.html
*/
@Override
protected void addViews(VacmMIB vacm) {
vacm.addGroup(SecurityModel.SECURITY_MODEL_SNMPv2c, new OctetString(
"cpublic"), new OctetString("v1v2group"),
StorageType.nonVolatile);
vacm.addAccess(new OctetString("v1v2group"), new OctetString("public"),
SecurityModel.SECURITY_MODEL_ANY, SecurityLevel.NOAUTH_NOPRIV,
MutableVACM.VACM_MATCH_EXACT, new OctetString("fullReadView"),
new OctetString("fullWriteView"), new OctetString(
"fullNotifyView"), StorageType.nonVolatile);
vacm.addViewTreeFamily(new OctetString("fullReadView"), new OID("1.3"),
new OctetString(), VacmMIB.vacmViewIncluded,
StorageType.nonVolatile);
}
/**
* User based Security Model, only applicable to
* SNMP v.3
*
*/
protected void addUsmUser(USM usm) {
}
protected void initTransportMappings() throws IOException {
transportMappings = new TransportMapping[1];
Address addr = GenericAddress.parse(address);
TransportMapping tm = TransportMappings.getInstance()
.createTransportMapping(addr);
transportMappings[0] = tm;
}
/**
* Start method invokes some initialization methods needed to
* start the agent
* @throws IOException
*/
public void start() throws IOException {
init();
loadConfig(ImportModes.REPLACE_CREATE);
addShutdownHook();
getServer().addContext(new OctetString("public"));
finishInit();
registerCustomMO();
run();
sendColdStartNotification();
}
protected void unregisterManagedObjects() {
// here we should unregister those objects previously registered...
}
/**
* The table of community strings configured in the SNMP
* engine's Local Configuration Datastore (LCD).
*
* We only configure one, "public".
*/
protected void addCommunities(SnmpCommunityMIB communityMIB) {
Variable[] com2sec = new Variable[] {
new OctetString("public"), // community name
new OctetString("cpublic"), // security name
getAgent().getContextEngineID(), // local engine ID
new OctetString("public"), // default context name
new OctetString(), // transport tag
new Integer32(StorageType.nonVolatile), // storage type
new Integer32(RowStatus.active) // row status
};
MOTableRow row = communityMIB.getSnmpCommunityEntry().createRow(
new OctetString("public2public").toSubIndex(true), com2sec);
communityMIB.getSnmpCommunityEntry().addRow(row);
}
public void runAgent() throws IOException, InterruptedException {
while(!STOP) {
System.out.println("Agent running...");
Thread.sleep(5000);
}
}
}
Here's my snmp tester print outs
[Client] Target address : udp:127.0.0.1/162
[Client] Send PDU : GET[requestID=1075357385, errorStatus=Success(0), errorIndex=0, VBS[1.2.3.4.5.6.7 = Null]]
[Client] RESPONSE from 127.0.0.1/162 : noSuchObject
Here's some printout on the agent side
WARN : org.snmp4j.agent.io.MOServerPersistence - Context 'public' is no longer supported by agent
INFO : org.snmp4j.agent.DefaultMOServer - Registered MO StaticMOGroup[root=1.2.3.4.5.6.7,vbs={}] in default context with scope org.snmp4j.agent.DefaultMOScope[lowerBound=1.2.3.4.5.6.7,lowerIncluded=true,upperBound=1.2.3.4.5.6.8,upperIncluded=false]
INFO : org.snmp4j.agent.mo.snmp.NotificationOriginatorImpl - Notification 1.3.6.1.6.3.1.1.5.1 reported with [] for context
Agent running...
Agent running...
Agent running...
Agent running...
Agent running...
Agent running...
Am I doing it correctly?
Regards,
Simon
> Date: Thu, 17 Jun 2010 18:19:55 +0200
> From: fock at agentpp.com
> To: simonsew2001 at hotmail.com
> CC: snmp4j at agentpp.org
> Subject: Re: [SNMP4J] create snmp simulator
>
> Hi,
>
> (1) An object identifier (OID) does not start with a dot (".").
> That notation has been invented by the NET-SNMP
> team, but is not standard conform and thus not
> used by SNMP4J.
>
> (2) You can use StaticMOGroup instead individually
> registering scalars (saves memory).
>
> Best regards,
> Frank
>
> On 17.06.2010 10:07, simon simon wrote:
> > Hi..
> >
> > I tried the testAgent demo supplied by the Snmp4jAgent.
> > Not really sure how it works yet. Kinda complicated at least for me.
> >
> > Anyway,
> > I've created a simple apps. One is the agent and the other is client
> > which sends the pdu and get the response from agent.
> > From what I've told earlier, I would like to add in all the oids and
> > its value to the agent.
> >
> > I've done that but not sure it's correct or incorrect (I can't find
> > sample code for what I've wanted). The code for that is as follow
> >
> > public void registerCustomMO() {
> >
> > String key = "";
> > Iterator iterator = oid_values.keySet().iterator();
> > while(iterator.hasNext()) {
> > key = (String) iterator.next();
> > try {
> > server.register( new MOScalar(new OID("."+key),
> > MOAccessImpl.ACCESS_READ_ONLY,
> > new OctetString((String) oid_values.get(key))),
> > new OctetString((String) oid_values.get(key)));
> > } catch (DuplicateRegistrationException e) {
> > e.printStackTrace();
> > }
> >
> > }
> > }
> >
> >
> > For example in my agent, I registered
> > oid = 1.3.6.1.2.1.1.1.0 = Hardware: x86 Family 15 Model 6 Stepping 5
> > AT/AT COMPATIBLE - Software: Windows Version 5.2 (Build 3790
> > Multiprocessor Free)
> > 1.3.6.1.2.1.1.3.0 = 65 days, 0:21:29.42
> >
> > Once I've started the Agent. I ran the client.
> >
> > In the GET PDU, I requested value for oid "1.3.6.1.2.1.1.1.0".
> > What I get is "Windows XP .....".
> >
> > For oid "1.3.6.1.2.1.1.3.0", I got like "0:00:3.xxxx". (Coincidentally
> > reflect the duration that the agent has been running).
> >
> > So I guess it's still not registering or I'm doing something wrong here?
> > Do guide me.
> >
> > Thx.
> > Simon
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > ------------------------------------------------------------------------
> > Hotmail: Trusted email with powerful SPAM protection. Sign up now.
> > <https://signup.live.com/signup.aspx?id=60969>
>
> --
> AGENT++
> http://www.agentpp.com
> http://www.snmp4j.com
> http://www.mibexplorer.com
> http://www.mibdesigner.com
>
_________________________________________________________________
Hotmail: Trusted email with powerful SPAM protection.
https://signup.live.com/signup.aspx?id=60969
More information about the SNMP4J
mailing list