Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  1. For each context create a separate ManagedObject instance and register it with the target context using MOServer.register.

    Code Block
    languagejava
    MOScalar myScalarObjAContext1 = new MyScalarObjA(..);
    MOScalar myScalarObjAContext2 = new MyScalarObjA(..);
     
    MOServer server = ..;
    server.register(myScalarObjAContext1, new OctetString("context1"));
    server.register(myScalarObjAContext2, new OctetString("context2"));
  2. Use the same ManagedObject instance for all target contexts by calling MOServer.register repeatedly for each context with the same instance. The single instance is then responsible to deliver and update its content (MIB data) based on the context information given in the ManagedObject.get, .next, .prepare, .commit, .undo, and .cleanup SubRequest parameter in the MOScope (in fact it is then a MOContextScope) member.

    Code Block
    languagejava
    OctetString context1 = new OctetString("context1");
    OctetString context2 = new OctetString("context2");
     
    MOScalar myScalarObjA = new MyScalarObjA(..) {
    	public void get(SubRequest request) {
    		if (request.gewtScope() instanceof MOContextScope) {
    			MOContextScope scope = (MOContextScope)request.gewtScope();
    			if (context1.equals(scope.getContext()) {
    				// return value from context1
    				..
    			}
    			else if (context2.equals(scope.getContext()) {				
    				// return value from context2
    				..
    			}
    			else {
    				// cannot be reached
    			}
    		}
    	}
    }
    
    MOServer server = ..;
    server.register(myScalarObjA, context1);
    server.register(myScalarObjA, context2));
  3. Any combination of the above two approaches will work too.

Step-by-step guide

 

...

  1. Let AgenPro generate the MIB object stub and agent main code as described in: Generate code for SNMP4J-Agent with AgenPro.
  2. Edit the Agent.java file (or modify the AgenPro template) as follows:
    1. Define the context values you want to support in the agent:

      Code Block
      languagejava
      //|:AgenPro|=members
      OctetString context1 = new OctetString("ctx1");
      OctetString context2 = new OctetString("ctx2");
      //|AgenPro:|
    2. Add the contexts to the MOServer instance(s) you use in the agent:

      Code Block
      languagejava
      public static void main(String[] args) {
         //|:AgenPro|=main
         server.addContext(context1);
         server.addContext(context2);
         defaultMain(args);
         //|AgenPro:|
      }
      
      
    3. Register your MIB object instances for each context separately (as explained above in the Background section):

      Code Block
      languagejava
        protected void registerMIBs()
        {
      //|:AgenPro|=registerBefore
           // Create a new instance per generated MIB module (you can use different MOFactory instances per context if needed):
           Snmp4jAgentTutorialMib tutorialMibCtx1 = new Snmp4jAgentTutorialMib(getFactory()); 
           tutorialMibCtx1.register(server, context1);
           Snmp4jAgentTutorialMib tutorialMibCtx2 = new Snmp4jAgentTutorialMib(getFactory()); 
           tutorialMibCtx2.register(server, context2);
      //|AgenPro:|
        ..
      }
  3. Configure the SNMPv3 View-based Access Control Model (VACM) MIB to allow SNMPv3 (and/or SNMPv1/2vc) users to access the new non-default contexts:

    Code Block
    languagejava
      protected void registerMIBs()
      {
       ..
    //|:AgenPro|=registerAfter
         VacmMIB vacm = agent.getAgentConfigManager().getVacmMIB();
         vacm.addAccess(new OctetString("v3group"), context1,
                   SecurityModel.SECURITY_MODEL_ANY,
                   SecurityLevel.AUTH_PRIV,
                   MutableVACM.VACM_MATCH_EXACT,
                   new OctetString("fullReadView"),
                   new OctetString("fullWriteView"),
                   new OctetString("fullNotifyView"),
                   StorageType.nonVolatile);
         vacm.addAccess(new OctetString("v3group"), context2,
                   SecurityModel.SECURITY_MODEL_ANY,
                   SecurityLevel.AUTH_PRIV,
                   MutableVACM.VACM_MATCH_EXACT,
                   new OctetString("fullReadView"),
                   new OctetString("fullWriteView"),
                   new OctetString("fullNotifyView"),
                   StorageType.nonVolatile);
         ..
    //|AgenPro:|

Related articles

Content by Label
showLabelsfalse
max5
spacesSNMP4J
sortmodified
showSpacefalse
reversetrue
typepage
labelsSNMPv3 context AgenPro

...