/** Whether autodiscovery is enabled in linkd-config (default: false) */
 @Override
 public boolean isAutoDiscoveryEnabled() {
   try {
     getReadLock().lock();
     if (m_config.hasAutoDiscovery()) return m_config.getAutoDiscovery();
   } finally {
     getReadLock().unlock();
   }
   return false;
 }
 /** Whether vlan discovery is enabled in linkd-config (default: true) */
 @Override
 public boolean isVlanDiscoveryEnabled() {
   try {
     getReadLock().lock();
     if (m_config.hasEnableVlanDiscovery()) return m_config.getEnableVlanDiscovery();
   } finally {
     getReadLock().unlock();
   }
   return true;
 }
  protected void updateIpRouteClassNames() {
    m_oidMask2IpRouteclassName.clear();
    try {
      getWriteLock().lock();
      final Iproutes iproutes = m_config.getIproutes();
      if (iproutes == null) {
        LOG.info("no iproutes found in config");
        return;
      }

      for (final Vendor vendor : iproutes.getVendorCollection()) {
        final SnmpObjectId curRootSysOid = new SnmpObjectId(vendor.getSysoidRootMask());
        final String curClassName = vendor.getClassName();

        for (final String specific : vendor.getSpecific()) {
          final SnmpObjectId oidMask = new SnmpObjectId(specific);
          oidMask.prepend(curRootSysOid);
          m_oidMask2IpRouteclassName.put(oidMask.toString(), curClassName);
          LOG.debug(
              "initializeIpRouteClassNames:  adding class {} for oid {}", curClassName, oidMask);
        }
      }
    } finally {
      getWriteLock().unlock();
    }
  }
  /**
   * This method is used to establish package against IP list mapping, with which, the IP list is
   * selected per package via the configured filter rules from the database.
   */
  protected void updatePackageIpListMap() {
    m_pkgIpMap.clear();
    try {
      getWriteLock().lock();
      for (final org.opennms.netmgt.config.linkd.Package pkg : m_config.getPackageCollection()) {
        //
        // Get a list of IP addresses per package against the filter rules from
        // database and populate the package, IP list map.
        //
        try {
          final List<InetAddress> ipList = getIpList(pkg);
          LOG.trace(
              "createPackageIpMap: package {}: ipList size = {}", pkg.getName(), ipList.size());

          if (ipList != null && ipList.size() > 0) {
            m_pkgIpMap.put(pkg, ipList);
          }
        } catch (final Throwable t) {
          LOG.error(
              "createPackageIpMap: failed to map package: {} to an IP list", pkg.getName(), t);
        }
      }
    } finally {
      getWriteLock().unlock();
    }
  }
 protected void updateUrlIpMap() {
   m_urlIPMap.clear();
   for (final org.opennms.netmgt.config.linkd.Package pkg : m_config.getPackageCollection()) {
     if (pkg == null) continue;
     for (final String urlname : pkg.getIncludeUrlCollection()) {
       final java.util.List<String> iplist = IpListFromUrl.fetch(urlname);
       if (iplist.size() > 0) {
         m_urlIPMap.put(urlname, iplist);
       }
     }
   }
 }
 /**
  * {@inheritDoc}
  *
  * <p>Returns the first package that the IP belongs to, null if none.
  *
  * <p><strong>Note: </strong>Evaluation of the interface against a package filter will only work
  * if the IP is already in the database.
  */
 @Override
 public org.opennms.netmgt.config.linkd.Package getFirstPackageMatch(final InetAddress ipaddr) {
   try {
     getReadLock().lock();
     for (final org.opennms.netmgt.config.linkd.Package pkg : m_config.getPackageCollection()) {
       if (isInterfaceInPackage(ipaddr, pkg)) {
         return pkg;
       }
     }
   } finally {
     getReadLock().unlock();
   }
   return null;
 }
 /** {@inheritDoc} */
 @Override
 public org.opennms.netmgt.config.linkd.Package getPackage(final String name) {
   try {
     getReadLock().lock();
     for (final org.opennms.netmgt.config.linkd.Package thisPackage :
         m_config.getPackageCollection()) {
       final String n = thisPackage.getName();
       if (n != null && n.equals(name)) {
         return thisPackage;
       }
     }
   } finally {
     getReadLock().unlock();
   }
   return null;
 }
  /**
   * {@inheritDoc}
   *
   * <p>Returns a list of package names that the IP belongs to, null if none.
   *
   * <p><strong>Note: </strong>Evaluation of the interface against a package filter will only work
   * if the IP is already in the database.
   */
  @Override
  public List<String> getAllPackageMatches(final InetAddress ipaddr) {
    final List<String> matchingPkgs = new ArrayList<String>();

    try {
      getReadLock().lock();
      for (final org.opennms.netmgt.config.linkd.Package pkg : m_config.getPackageCollection()) {
        final String pkgName = pkg.getName();
        if (isInterfaceInPackage(ipaddr, pkg)) {
          matchingPkgs.add(pkgName);
        }
      }
    } finally {
      getReadLock().unlock();
    }
    return matchingPkgs;
  }
 /**
  * getThreads
  *
  * @return a int.
  */
 @Override
 public int getThreads() {
   if (m_config.hasThreads()) return m_config.getThreads();
   return 5;
 }
 @Override
 public long getDiscoveryLinkInterval() {
   if (m_config.hasSnmp_poll_interval()) return m_config.getDiscovery_link_interval();
   return 3600000;
 }
 @Override
 public long getSnmpPollInterval() {
   if (m_config.hasSnmp_poll_interval()) return m_config.getSnmp_poll_interval();
   return 900000;
 }
 /**
  * saveStpInterfaceTable
  *
  * @return a boolean.
  */
 @Override
 public boolean saveStpInterfaceTable() {
   if (m_config.hasSaveStpInterfaceTable()) return m_config.getSaveStpInterfaceTable();
   return true;
 }
 /**
  * useWifiDiscovery
  *
  * @return a boolean.
  */
 @Override
 public boolean useWifiDiscovery() {
   if (m_config.hasUseWifiDiscovery()) return m_config.getUseWifiDiscovery();
   return true;
 }
 /**
  * saveRouteTable
  *
  * @return a boolean.
  */
 @Override
 public boolean saveRouteTable() {
   if (m_config.hasSaveRouteTable()) return m_config.getSaveRouteTable();
   return true;
 }
  protected void updateVlanClassNames() {
    m_oidMask2VlanclassName.clear();
    try {
      getWriteLock().lock();
      final Vlans vlans = m_config.getVlans();
      if (vlans == null) {
        LOG.info("initializeVlanClassNames: no vlans found in config");
      }

      final List<String> excludedOids = new ArrayList<String>();
      for (final Vendor vendor : vlans.getVendorCollection()) {
        final SnmpObjectId curRootSysOid = new SnmpObjectId(vendor.getSysoidRootMask());
        final String curClassName = vendor.getClassName();

        for (final String specific : vendor.getSpecific()) {
          final SnmpObjectId oidMask = new SnmpObjectId(specific);
          oidMask.prepend(curRootSysOid);
          m_oidMask2VlanclassName.put(oidMask.toString(), curClassName);
          LOG.debug("initializeVlanClassNames:  adding class {} for oid {}", curClassName, oidMask);
        }

        for (final ExcludeRange excludeRange : vendor.getExcludeRangeCollection()) {
          final SnmpObjectId snmpBeginOid = new SnmpObjectId(excludeRange.getBegin());
          final SnmpObjectId snmpEndOid = new SnmpObjectId(excludeRange.getEnd());
          final SnmpObjectId snmpRootOid = getRootOid(snmpBeginOid);
          if (snmpBeginOid.getLength() == snmpEndOid.getLength()
              && snmpRootOid.isRootOf(snmpEndOid)) {
            final SnmpObjectId snmpCurOid = new SnmpObjectId(snmpBeginOid);
            while (snmpCurOid.compare(snmpEndOid) <= 0) {
              excludedOids.add(snmpCurOid.toString());
              LOG.debug(
                  "initializeVlanClassNames:  signing excluded class {} for oid {}",
                  curClassName,
                  curRootSysOid.toString().concat(snmpCurOid.toString()));
              int lastCurCipher = snmpCurOid.getLastIdentifier();
              lastCurCipher++;
              int[] identifiers = snmpCurOid.getIdentifiers();
              identifiers[identifiers.length - 1] = lastCurCipher;
              snmpCurOid.setIdentifiers(identifiers);
            }
          }
        }

        for (final IncludeRange includeRange : vendor.getIncludeRangeCollection()) {
          final SnmpObjectId snmpBeginOid = new SnmpObjectId(includeRange.getBegin());
          final SnmpObjectId snmpEndOid = new SnmpObjectId(includeRange.getEnd());
          final SnmpObjectId rootOid = getRootOid(snmpBeginOid);
          if (snmpBeginOid.getLength() == snmpEndOid.getLength() && rootOid.isRootOf(snmpEndOid)) {
            final SnmpObjectId snmpCurOid = new SnmpObjectId(snmpBeginOid);
            while (snmpCurOid.compare(snmpEndOid) <= 0) {
              if (!excludedOids.contains(snmpBeginOid.toString())) {
                final SnmpObjectId oidMask = new SnmpObjectId(snmpBeginOid);
                oidMask.prepend(curRootSysOid);
                m_oidMask2VlanclassName.put(oidMask.toString(), curClassName);
                LOG.debug(
                    "initializeVlanClassNames:  adding class {} for oid {}", curClassName, oidMask);
              }
              int lastCipher = snmpBeginOid.getLastIdentifier();
              lastCipher++;
              int[] identifiers = snmpBeginOid.getIdentifiers();
              identifiers[identifiers.length - 1] = lastCipher;
              snmpCurOid.setIdentifiers(identifiers);
            }
          }
        }
      }
    } finally {
      getWriteLock().unlock();
    }
  }
 @Override
 public boolean forceIpRouteDiscoveryOnEthernet() {
   if (m_config.hasForceIpRouteDiscoveryOnEthernet())
     return m_config.getForceIpRouteDiscoveryOnEthernet();
   return false;
 }
 @Override
 public long getInitialSleepTime() {
   if (m_config.hasInitial_sleep_time()) return m_config.getInitial_sleep_time();
   return 1800000;
 }