@Override public boolean isInterfaceInPackageRange( final InetAddress iface, final org.opennms.netmgt.config.linkd.Package pkg) { if (pkg == null) return false; // // Ensure that the interface is in the specific list or // that it is in the include range and is not excluded // boolean has_specific = false; boolean has_range_include = false; boolean has_range_exclude = false; try { getReadLock().lock(); byte[] addr = iface.getAddress(); // if there are NO include ranges then treat act as if the user include // the range 0.0.0.0 - 255.255.255.255 has_range_include = pkg.getIncludeRangeCount() == 0 && pkg.getSpecificCount() == 0; // Specific wins; if we find one, return immediately. for (final String spec : pkg.getSpecificCollection()) { final byte[] speca = toIpAddrBytes(spec); if (new ByteArrayComparator().compare(addr, speca) == 0) { has_specific = true; break; } } if (has_specific) return true; for (final String url : pkg.getIncludeUrlCollection()) { has_specific = isInterfaceInUrl(iface, url); if (has_specific) break; } if (has_specific) return true; if (!has_range_include) { for (final IncludeRange rng : pkg.getIncludeRangeCollection()) { if (isInetAddressInRange(iface.getAddress(), rng.getBegin(), rng.getEnd())) { has_range_include = true; break; } } } for (final ExcludeRange rng : pkg.getExcludeRangeCollection()) { if (isInetAddressInRange(iface.getAddress(), rng.getBegin(), rng.getEnd())) { has_range_exclude = true; break; } } return has_range_include && !has_range_exclude; } finally { getReadLock().unlock(); } }
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(); } }