Hi Denis,

Before I can answer your question, I need to know what you exactly mean
by "Network Discovery"?

Often IP multi-cast was used for that. Nowadays this is often no longer possible because switches/router/firewalls block multi-cast packets for security reasons.

In addition, multi-cast works only with SNMPv1 and v2c (community based) and
SNMPv3 with noAuthNoPriv.

Best regards,
Frank

Am 17.09.2015 um 11:14 schrieb Denis Ioan:
Hi to everybody,
    I'm new to the SNMP protocol but I had to implement an Agent in v3.
Using SNMP4J I've implemented and all works fine except the agent cannot
be discovered automatically from the Network Discovery functions.
I guess I forgot to insert something in the configuration. I post here
the Agent class and the way I use it in the software:

public class SNMPAgent extends BaseAgent {
private final String GROUP_NAME = "v3group"; private String address;
     private String baseOID;
     private String securityName; // User
     private String SHAPassword;
     private String AES128Passphrase;
     private String trapIPAddress;
     private String trapPort;
/**
      *
      * @param address
      * @throws IOException
      */
     public SNMPAgent(String address, String baseOID,
             String securityName, String SHAPassword, String
AES128Passphrase, String trapIPAddress, String trapPort) throws
IOException {

             /**
              * Creates a base agent with boot-counter, config file, and
a
              * CommandProcessor for processing SNMP requests.
Parameters:
              * "bootCounterFile" - a file with serialized boot-counter
information
              * (read/write). If the file does not exist it is created on
shutdown of
              * the agent. "configFile" - a file with serialized
configuration
              * information (read/write). If the file does not exist it
is created on
              * shutdown of the agent. "commandProcessor" - the
CommandProcessor
              * instance that handles the SNMP requests.
              */
             super(new File("conf.agent"), new File("bootCounter.agent"),
                             new CommandProcessor(
                                             new
OctetString(MPv3.createLocalEngineID())));
this.address = address;
             this.baseOID = baseOID;
             this.securityName = securityName;
             this.SHAPassword = SHAPassword;
             this.AES128Passphrase = AES128Passphrase;
             this.trapIPAddress = trapIPAddress;
             this.trapPort = trapPort;
}

     /**
      * Adds community to security name mappings needed for SNMPv1 and
SNMPv2c.
      */
     @Override
     protected void addCommunities(SnmpCommunityMIB communityMIB) {
}

     /**
      * Adds initial notification targets and filters.
      */
     @Override
     protected void addNotificationTargets(final SnmpTargetMIB targetMIB,
         final SnmpNotificationMIB notificationMIB) {
     }

     /**
      * Adds all the necessary initial users to the USM.
      */
     @Override
     protected void addUsmUser(USM usm)
     {
         UsmUser user = new UsmUser(
                         new OctetString(securityName),
                         AuthSHA.ID,
                         new OctetString(SHAPassword),
                         PrivAES128.ID,
                         new OctetString(AES128Passphrase)
                         );

         usm.addUser(user.getSecurityName(), null, user);
     }

     /**
      * Adds initial VACM configuration.
      */
     @Override
     protected void addViews(VacmMIB vacm)
     {          
         vacm.addGroup(
                 SecurityModel.SECURITY_MODEL_USM,
                 new OctetString(securityName),
                 new OctetString(GROUP_NAME),
                 StorageType.nonVolatile
                 );

         vacm.addAccess(
                 new OctetString(GROUP_NAME),
                 new OctetString(),
                 SecurityModel.SECURITY_MODEL_USM,
                 SecurityLevel.AUTH_PRIV,
                 MutableVACM.VACM_MATCH_EXACT,
                 new OctetString("fullReadView"),
                 new OctetString("fullWriteView"),
                 new OctetString("fullNotifyView"),
                 StorageType.nonVolatile
                 );

         vacm.addViewTreeFamily(
                 new OctetString("fullReadView"),
                 new OID(baseOID),
                 new OctetString(),
                 VacmMIB.vacmViewIncluded,
                 StorageType.nonVolatile
                 );

         vacm.addViewTreeFamily(
                 new OctetString("fullWriteView"),
                 new OID(baseOID),
                 new OctetString(),
                 VacmMIB.vacmViewIncluded,
                 StorageType.nonVolatile
                 );
vacm.addViewTreeFamily(new OctetString("fullReadView"), new
OID("1.3"),
                                new OctetString(), VacmMIB.vacmViewIncluded,
                                StorageType.nonVolatile);
     }

     /**
      * Unregister the basic MIB modules from the agent's MOServer.
      */
     @Override
     protected void unregisterManagedObjects() {
             // TODO Auto-generated method stub

     }

     /**
      * Register additional managed objects at the agent's server.
      */
     @Override
     protected void registerManagedObjects() {
             // TODO Auto-generated method stub

     }

     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();
             // This method reads some old config from a file and causes
             // unexpected behavior.
             // loadConfig(ImportModes.REPLACE_CREATE);
             addShutdownHook();
             //getServer().addContext(new OctetString("public"));
             finishInit();
             run();
             sendColdStartNotification();
     }

     /**
      * Clients can register the MO they need
      */
     public void registerManagedObject(ManagedObject mo) {
             try {
                     server.register(mo, null);
             } catch (DuplicateRegistrationException ex) {
                     throw new RuntimeException(ex);
             }
     }

     public void unregisterManagedObject(MOGroup moGroup) {
             moGroup.unregisterMOs(server, getContext(moGroup));
     }

}

I user the Agent in this way:


agent = new SNMPAgent(
                     LOCALHOST + '/' + configuration.getAgentSnmpPort(),
                     configuration.getAgentBaseOID(),
                     configuration.getAgentSnmpUser(),
                     configuration.getAgentSHAPassword(),
                     configuration.getAgentAES128PassPhrase(),
                     configuration.getTrapDestIPAddress(),
                     configuration.getTrapPort());

             agent.start();

// Since BaseAgent registers some mibs by default we need to unregister
        // one before we register our own sysDescr. Normally you would
        // override that method and register the mibs that you need
        agent.unregisterManagedObject(agent.getSnmpv2MIB());
// Register a system description, use one from you product environment
        // to test with

agent.registerManagedObject(MOCreator.createReadOnly(sysDescr,SYS_DESCRIPTION));

agent.registerManagedObject(MOCreator.createReadOnly(sysObjectID, new
OID(configuration.getAgentBaseOID())));

agent.registerManagedObject(MOCreator.createReadOnly(sysContact,SYS_CONTACT));

agent.registerManagedObject(MOCreator.createReadOnly(sysName,SYS_NAME));

agent.registerManagedObject(MOCreator.createReadOnly(sysLocation,SYS_LOCATION));

agent.registerManagedObject(MOCreator.createReadOnly(sysServices,SYS_SERVICES));
MOSSysUpTime = MOCreator.createReadWrite(sysUpTime, new
TimeTicks((long)0));
         agent.registerManagedObject(MOSSysUpTime);


I thank you in advance everybody will answer me.
Denis



_______________________________________________
SNMP4J mailing list
[email protected]
https://oosnmp.net/mailman/listinfo/snmp4j

--
---
AGENT++
Maximilian-Kolbe-Str. 10
73257 Koengen, Germany
https://agentpp.com
Phone: +49 7024 8688230
Fax:   +49 7024 8688231

_______________________________________________
SNMP4J mailing list
[email protected]
https://oosnmp.net/mailman/listinfo/snmp4j

Reply via email to