use of org.opennms.netmgt.provision.service.snmp.IpAddrTable in project opennms by OpenNMS.
the class LocationAwareSnmpClientIT method canWalkIpAddressTableViaCurrentLocation.
/**
* Verifies that SNMP WALKs are successful, and return the same results when using
* the LocationAwareSnmpClient.
*/
@Test
public void canWalkIpAddressTableViaCurrentLocation() throws UnknownHostException, InterruptedException, ExecutionException {
// Gather the list of IP addresses
final IPAddressGatheringTracker tracker = new IPAddressGatheringTracker();
locationAwareSnmpClient.walk(agentConfig, tracker).withDescription(tracker.getDescription()).execute().get();
ExpectedResults.compareToKnownIpAddressList(tracker.getIpAddresses());
// Now determine their interface indices using a different type of tracker
final Set<SnmpInstId> ipAddrs = new TreeSet<SnmpInstId>();
for (final String ipAddr : tracker.getIpAddresses()) {
ipAddrs.add(new SnmpInstId(InetAddressUtils.toOid(InetAddressUtils.addr(ipAddr))));
}
IpAddrTable ipAddrTable = new IpAddrTable(agentConfig.getAddress(), ipAddrs);
locationAwareSnmpClient.walk(agentConfig, ipAddrTable).withDescription(tracker.getDescription()).execute().get();
ExpectedResults.compareToKnownIfIndices(ipAddrTable.getIfIndices());
}
use of org.opennms.netmgt.provision.service.snmp.IpAddrTable in project opennms by OpenNMS.
the class LocationAwareSnmpClientIT method canWalkIpAddressTableDirectly.
/**
* Verifies that SNMP WALKs are successful when directly using SnmpUtils.
*
* Used a basis for comparison.
*/
@Test
public void canWalkIpAddressTableDirectly() throws InterruptedException {
// Gather the list of IP addresses
final IPAddressGatheringTracker tracker = new IPAddressGatheringTracker();
try (SnmpWalker walker = SnmpUtils.createWalker(agentConfig, tracker.getDescription(), tracker)) {
walker.start();
walker.waitFor();
}
ExpectedResults.compareToKnownIpAddressList(tracker.getIpAddresses());
// Now determine their interface indices using a different type of tracker
final Set<SnmpInstId> ipAddrs = new TreeSet<SnmpInstId>();
for (final String ipAddr : tracker.getIpAddresses()) {
ipAddrs.add(new SnmpInstId(InetAddressUtils.toOid(InetAddressUtils.addr(ipAddr))));
}
IpAddrTable ipAddrTable = new IpAddrTable(agentConfig.getAddress(), ipAddrs);
try (SnmpWalker walker = SnmpUtils.createWalker(agentConfig, "ipAddrTable", ipAddrTable)) {
walker.start();
walker.waitFor();
}
ExpectedResults.compareToKnownIfIndices(ipAddrTable.getIfIndices());
}
use of org.opennms.netmgt.provision.service.snmp.IpAddrTable in project opennms by OpenNMS.
the class ScanManager method updateSnmpData.
void updateSnmpData(final OnmsNode node) {
try {
m_systemGroup = new SystemGroup(m_address);
final Set<SnmpInstId> ipAddrs = new TreeSet<SnmpInstId>();
final Set<InetAddress> ipAddresses = new HashSet<InetAddress>();
for (final OnmsIpInterface iface : node.getIpInterfaces()) {
final InetAddress addr = iface.getIpAddress();
if (addr != null && addr instanceof Inet4Address) {
ipAddrs.add(new SnmpInstId(InetAddressUtils.toOid(addr)));
}
ipAddresses.add(addr);
}
m_ipAddrTable = new IpAddrTable(m_address, ipAddrs);
m_ipAddressTable = IpAddressTable.createTable(m_address, ipAddresses);
AggregateTracker tracker = new AggregateTracker(Lists.newArrayList(m_systemGroup, m_ipAddrTable, m_ipAddressTable));
final SnmpAgentConfig agentConfig = SnmpPeerFactory.getInstance().getAgentConfig(m_address, MonitoringLocationUtils.getLocationNameOrNullIfDefault(node));
try {
m_locationAwareSnmpClient.walk(agentConfig, tracker).withDescription("system/ipAddrTable/ipAddressTable").withLocation(node.getLocation() == null ? null : node.getLocation().getLocationName()).execute().get();
} catch (ExecutionException e) {
// pass
}
final Set<SnmpInstId> ifIndices = new TreeSet<SnmpInstId>();
for (final Integer ifIndex : m_ipAddrTable.getIfIndices()) {
ifIndices.add(new SnmpInstId(ifIndex));
}
m_ifTable = new IfTable(m_address, ifIndices);
m_ifXTable = new IfXTable(m_address, ifIndices);
tracker = new AggregateTracker(Lists.newArrayList(m_systemGroup, m_ifTable, m_ifXTable));
try {
m_locationAwareSnmpClient.walk(agentConfig, tracker).withDescription("ifTable/ifXTable").withLocation(node.getLocation() == null ? null : node.getLocation().getLocationName()).execute().get();
} catch (ExecutionException e) {
// pass
}
m_systemGroup.updateSnmpDataForNode(node);
for (final SnmpInstId ifIndex : ifIndices) {
m_ifTable.updateSnmpInterfaceData(node, ifIndex.toInt());
}
for (final SnmpInstId ifIndex : ifIndices) {
m_ifXTable.updateSnmpInterfaceData(node, ifIndex.toInt());
}
for (final SnmpInstId ipAddr : ipAddrs) {
m_ipAddrTable.updateIpInterfaceData(node, ipAddr.toString());
}
for (final InetAddress addr : ipAddresses) {
m_ipAddressTable.updateIpInterfaceData(node, InetAddressUtils.str(addr));
}
} catch (final InterruptedException e) {
LOG.info("thread interrupted while updating SNMP data", e);
Thread.currentThread().interrupt();
}
}
Aggregations