/** * Send a newSuspect event for the interface construct event with 'linkd' as source * * @param ipInterface The interface for which the newSuspect event is to be generated * @param ipowner The host that hold this ipInterface information * @pkgName The package Name of the ready runnable involved */ void sendNewSuspectEvent(InetAddress ipaddress, InetAddress ipowner, String pkgName) { if (m_newSuspectEventsIpAddr.contains(ipaddress)) { LogUtils.infof( this, "sendNewSuspectEvent: nothing to send, suspect event previously sent for IP address: %s", str(ipaddress)); return; } else if (!isInterfaceInPackageRange(ipaddress, pkgName)) { LogUtils.infof( this, "sendNewSuspectEvent: nothing to send for IP address: %s, not in package: %s", str(ipaddress), pkgName); return; } org.opennms.netmgt.config.linkd.Package pkg = m_linkdConfig.getPackage(pkgName); boolean autodiscovery = false; if (pkg.hasAutoDiscovery()) autodiscovery = pkg.getAutoDiscovery(); else autodiscovery = m_linkdConfig.isAutoDiscoveryEnabled(); if (autodiscovery) { EventBuilder bldr = new EventBuilder(EventConstants.NEW_SUSPECT_INTERFACE_EVENT_UEI, "linkd"); bldr.setHost(str(ipowner)); bldr.setInterface(ipaddress); m_eventForwarder.sendNow(bldr.getEvent()); m_newSuspectEventsIpAddr.add(ipaddress); } }
/** * {@inheritDoc} * * @param nodeid */ public SnmpCollection getSnmpCollection( final int nodeid, final InetAddress ipaddr, final String sysoid, final String pkgName) { final Package pkg = m_linkdConfig.getPackage(pkgName); if (pkg != null) { final SnmpCollection collection = createCollection(nodeid, ipaddr); populateSnmpCollection(collection, pkg, sysoid); return collection; } return null; }
/** {@inheritDoc} */ public DiscoveryLink getDiscoveryLink(final String pkgName) { final Package pkg = m_linkdConfig.getPackage(pkgName); if (pkg == null) return null; final DiscoveryLink discoveryLink = new DiscoveryLink(); discoveryLink.setLinkd(this); discoveryLink.setPackageName(pkg.getName()); discoveryLink.setInitialSleepTime(m_linkdConfig.getInitialSleepTime()); discoveryLink.setSnmpPollInterval( pkg.hasSnmp_poll_interval() ? pkg.getSnmp_poll_interval() : m_linkdConfig.getSnmpPollInterval()); discoveryLink.setDiscoveryInterval( pkg.hasDiscovery_link_interval() ? pkg.getDiscovery_link_interval() : m_linkdConfig.getDiscoveryLinkInterval()); discoveryLink.setDiscoveryUsingBridge( pkg.hasUseBridgeDiscovery() ? pkg.getUseBridgeDiscovery() : m_linkdConfig.useBridgeDiscovery()); discoveryLink.setDiscoveryUsingCdp( pkg.hasUseCdpDiscovery() ? pkg.getUseCdpDiscovery() : m_linkdConfig.useCdpDiscovery()); discoveryLink.setDiscoveryUsingRoutes( pkg.hasUseIpRouteDiscovery() ? pkg.getUseIpRouteDiscovery() : m_linkdConfig.useIpRouteDiscovery()); discoveryLink.setEnableDownloadDiscovery( pkg.hasEnableDiscoveryDownload() ? pkg.getEnableDiscoveryDownload() : m_linkdConfig.enableDiscoveryDownload()); discoveryLink.setForceIpRouteDiscoveryOnEtherNet( pkg.hasForceIpRouteDiscoveryOnEthernet() ? pkg.getForceIpRouteDiscoveryOnEthernet() : m_linkdConfig.forceIpRouteDiscoveryOnEthernet()); return discoveryLink; }
/** * isInterfaceInPackageRange * * @param ipaddr a {@link java.lang.String} object. * @param pkg a {@link java.lang.String} object. * @return a boolean. */ public boolean isInterfaceInPackageRange(InetAddress ipaddr, String pkg) { return m_linkdConfig.isInterfaceInPackageRange(ipaddr, m_linkdConfig.getPackage(pkg)); }
/* * * Get only ospf links. */ @Test @JUnitSnmpAgents( value = { @JUnitSnmpAgent( host = MUMBAI_IP, port = 161, resource = "classpath:linkd/nms10205/" + MUMBAI_NAME + "_" + MUMBAI_IP + ".txt"), @JUnitSnmpAgent( host = CHENNAI_IP, port = 161, resource = "classpath:linkd/nms10205/" + CHENNAI_NAME + "_" + CHENNAI_IP + ".txt"), @JUnitSnmpAgent( host = DELHI_IP, port = 161, resource = "classpath:linkd/nms10205/" + DELHI_NAME + "_" + DELHI_IP + ".txt"), @JUnitSnmpAgent( host = BANGALORE_IP, port = 161, resource = "classpath:linkd/nms10205/" + BANGALORE_NAME + "_" + BANGALORE_IP + ".txt"), @JUnitSnmpAgent( host = BAGMANE_IP, port = 161, resource = "classpath:linkd/nms10205/" + BAGMANE_NAME + "_" + BAGMANE_IP + ".txt"), @JUnitSnmpAgent( host = MYSORE_IP, port = 161, resource = "classpath:linkd/nms10205/" + MYSORE_NAME + "_" + MYSORE_IP + ".txt"), @JUnitSnmpAgent( host = SPACE_EX_SW1_IP, port = 161, resource = "classpath:linkd/nms10205/" + SPACE_EX_SW1_NAME + "_" + SPACE_EX_SW1_IP + ".txt"), @JUnitSnmpAgent( host = SPACE_EX_SW2_IP, port = 161, resource = "classpath:linkd/nms10205/" + SPACE_EX_SW2_NAME + "_" + SPACE_EX_SW2_IP + ".txt"), @JUnitSnmpAgent( host = J6350_41_IP, port = 161, resource = "classpath:linkd/nms10205/" + J6350_41_NAME + "_" + J6350_41_IP + ".txt"), @JUnitSnmpAgent( host = J6350_42_IP, port = 161, resource = "classpath:linkd/nms10205/" + "J6350-42_" + J6350_42_IP + ".txt"), @JUnitSnmpAgent( host = SRX_100_IP, port = 161, resource = "classpath:linkd/nms10205/" + "SRX-100_" + SRX_100_IP + ".txt"), @JUnitSnmpAgent( host = SSG550_IP, port = 161, resource = "classpath:linkd/nms10205/" + SSG550_NAME + "_" + SSG550_IP + ".txt") }) public void testNetwork10205OspfLinks() throws Exception { m_nodeDao.save(getMumbai()); m_nodeDao.save(getChennai()); m_nodeDao.save(getDelhi()); m_nodeDao.save(getBangalore()); m_nodeDao.save(getBagmane()); m_nodeDao.save(getMysore()); m_nodeDao.save(getSpaceExSw1()); m_nodeDao.save(getSpaceExSw2()); m_nodeDao.save(getJ635041()); m_nodeDao.save(getJ635042()); m_nodeDao.save(getSRX100()); m_nodeDao.save(getSGG550()); m_nodeDao.flush(); Package example1 = m_linkdConfig.getPackage("example1"); example1.setUseLldpDiscovery(false); example1.setUseCdpDiscovery(false); example1.setUseBridgeDiscovery(false); example1.setUseIpRouteDiscovery(false); example1.setSaveRouteTable(false); example1.setSaveStpInterfaceTable(false); example1.setSaveStpNodeTable(false); final OnmsNode mumbai = m_nodeDao.findByForeignId("linkd", MUMBAI_NAME); final OnmsNode chennai = m_nodeDao.findByForeignId("linkd", CHENNAI_NAME); final OnmsNode delhi = m_nodeDao.findByForeignId("linkd", DELHI_NAME); final OnmsNode bangalore = m_nodeDao.findByForeignId("linkd", BANGALORE_NAME); final OnmsNode bagmane = m_nodeDao.findByForeignId("linkd", BAGMANE_NAME); final OnmsNode mysore = m_nodeDao.findByForeignId("linkd", MYSORE_NAME); final OnmsNode spaceexsw1 = m_nodeDao.findByForeignId("linkd", SPACE_EX_SW1_NAME); final OnmsNode spaceexsw2 = m_nodeDao.findByForeignId("linkd", SPACE_EX_SW2_NAME); final OnmsNode j635041 = m_nodeDao.findByForeignId("linkd", J6350_41_NAME); final OnmsNode j635042 = m_nodeDao.findByForeignId("linkd", J6350_42_NAME); final OnmsNode srx100 = m_nodeDao.findByForeignId("linkd", SRX_100_NAME); final OnmsNode ssg550 = m_nodeDao.findByForeignId("linkd", SSG550_NAME); assertTrue(m_linkd.scheduleNodeCollection(chennai.getId())); assertTrue(m_linkd.scheduleNodeCollection(mumbai.getId())); assertTrue(m_linkd.scheduleNodeCollection(delhi.getId())); assertTrue(m_linkd.scheduleNodeCollection(bangalore.getId())); assertTrue(m_linkd.scheduleNodeCollection(bagmane.getId())); assertTrue(m_linkd.scheduleNodeCollection(mysore.getId())); assertTrue(m_linkd.scheduleNodeCollection(spaceexsw1.getId())); assertTrue(m_linkd.scheduleNodeCollection(spaceexsw2.getId())); assertTrue(m_linkd.scheduleNodeCollection(j635041.getId())); assertTrue(m_linkd.scheduleNodeCollection(j635042.getId())); assertTrue(m_linkd.scheduleNodeCollection(srx100.getId())); assertTrue(m_linkd.scheduleNodeCollection(ssg550.getId())); assertTrue(m_linkd.runSingleSnmpCollection(mumbai.getId())); assertTrue(m_linkd.runSingleSnmpCollection(chennai.getId())); assertTrue(m_linkd.runSingleSnmpCollection(delhi.getId())); assertTrue(m_linkd.runSingleSnmpCollection(bangalore.getId())); assertTrue(m_linkd.runSingleSnmpCollection(bagmane.getId())); assertTrue(m_linkd.runSingleSnmpCollection(mysore.getId())); assertTrue(m_linkd.runSingleSnmpCollection(spaceexsw1.getId())); assertTrue(m_linkd.runSingleSnmpCollection(spaceexsw2.getId())); assertTrue(m_linkd.runSingleSnmpCollection(j635041.getId())); assertTrue(m_linkd.runSingleSnmpCollection(j635042.getId())); assertTrue(m_linkd.runSingleSnmpCollection(srx100.getId())); assertTrue(m_linkd.runSingleSnmpCollection(ssg550.getId())); assertEquals(0, m_dataLinkInterfaceDao.countAll()); assertTrue(m_linkd.runSingleLinkDiscovery("example1")); final List<DataLinkInterface> links = m_dataLinkInterfaceDao.findAll(); assertEquals(9, links.size()); int start = getStartPoint(links); for (final DataLinkInterface datalinkinterface : links) { int id = datalinkinterface.getId().intValue(); if (start == id) { checkLink(chennai, mumbai, 528, 520, datalinkinterface); } else if (start + 1 == id) { checkLink(delhi, mumbai, 28503, 519, datalinkinterface); } else if (start + 2 == id) { checkLink(bangalore, mumbai, 2401, 507, datalinkinterface); } else if (start + 3 == id) { checkLink(bagmane, mumbai, 534, 977, datalinkinterface); } else if (start + 4 == id) { checkLink(mysore, mumbai, 508, 978, datalinkinterface); } else if (start + 5 == id) { checkLink(mysore, chennai, 505, 517, datalinkinterface); } else if (start + 6 == id) { checkLink(bangalore, delhi, 2397, 3674, datalinkinterface); } else if (start + 7 == id) { checkLink(bagmane, bangalore, 1732, 2396, datalinkinterface); } else if (start + 8 == id) { checkLink(mysore, bagmane, 520, 654, datalinkinterface); } else { checkLink(mumbai, mumbai, -1, -1, datalinkinterface); } } }
/* * The * MUMBAI:port ge 0/1/3:ip 192.168.5.5 ------> CHENNAI:port ge 4/0/2: ip 192.168.5.6 * MUMBAI:port ge 0/1/2:ip 192.168.5.9 ------> DELHI:port ge 1/0/2: ip 192.168.5.10 * MUMBAI:port ge 0/0/1:ip 192.168.5.13 ------> BANGALORE:port ge 0/0/0: ip 192.168.5.14 * DELHI:port ge 1/0/1:ip 192.168.1.5 ------> BANGALORE:port ge 0/0/1: ip 192.168.1.6 * DELHI:port ge 1/1/6:ip 172.16.7.1 ------> Space-EX-SW1: port 0/0/6: ip 172.16.7.1 ???? same ip address * CHENNAI:port ge 4/0/3:ip 192.168.1.1 ------> DELHI: port ge 1/1/0: ip 192.168.1.2 * * a lot of duplicated ip this is a clear proof that linkd is not able to * gather topology of this lab using the useBridgeTopology and ip routes. */ @Test @JUnitSnmpAgents( value = { @JUnitSnmpAgent( host = MUMBAI_IP, port = 161, resource = "classpath:linkd/nms10205/" + MUMBAI_NAME + "_" + MUMBAI_IP + ".txt"), @JUnitSnmpAgent( host = CHENNAI_IP, port = 161, resource = "classpath:linkd/nms10205/" + CHENNAI_NAME + "_" + CHENNAI_IP + ".txt"), @JUnitSnmpAgent( host = DELHI_IP, port = 161, resource = "classpath:linkd/nms10205/" + DELHI_NAME + "_" + DELHI_IP + ".txt"), @JUnitSnmpAgent( host = BANGALORE_IP, port = 161, resource = "classpath:linkd/nms10205/" + BANGALORE_NAME + "_" + BANGALORE_IP + ".txt"), @JUnitSnmpAgent( host = BAGMANE_IP, port = 161, resource = "classpath:linkd/nms10205/" + BAGMANE_NAME + "_" + BAGMANE_IP + ".txt"), @JUnitSnmpAgent( host = MYSORE_IP, port = 161, resource = "classpath:linkd/nms10205/" + MYSORE_NAME + "_" + MYSORE_IP + ".txt"), @JUnitSnmpAgent( host = SPACE_EX_SW1_IP, port = 161, resource = "classpath:linkd/nms10205/" + SPACE_EX_SW1_NAME + "_" + SPACE_EX_SW1_IP + ".txt"), @JUnitSnmpAgent( host = SPACE_EX_SW2_IP, port = 161, resource = "classpath:linkd/nms10205/" + SPACE_EX_SW2_NAME + "_" + SPACE_EX_SW2_IP + ".txt"), @JUnitSnmpAgent( host = J6350_41_IP, port = 161, resource = "classpath:linkd/nms10205/" + J6350_41_NAME + "_" + J6350_41_IP + ".txt"), @JUnitSnmpAgent( host = J6350_42_IP, port = 161, resource = "classpath:linkd/nms10205/" + "J6350-42_" + J6350_42_IP + ".txt"), @JUnitSnmpAgent( host = SRX_100_IP, port = 161, resource = "classpath:linkd/nms10205/" + "SRX-100_" + SRX_100_IP + ".txt"), @JUnitSnmpAgent( host = SSG550_IP, port = 161, resource = "classpath:linkd/nms10205/" + SSG550_NAME + "_" + SSG550_IP + ".txt") }) public void testNetwork10205Links() throws Exception { m_nodeDao.save(getMumbai()); m_nodeDao.save(getChennai()); m_nodeDao.save(getDelhi()); m_nodeDao.save(getBangalore()); m_nodeDao.save(getBagmane()); m_nodeDao.save(getMysore()); m_nodeDao.save(getSpaceExSw1()); m_nodeDao.save(getSpaceExSw2()); m_nodeDao.save(getJ635041()); m_nodeDao.save(getJ635042()); m_nodeDao.save(getSRX100()); m_nodeDao.save(getSGG550()); m_nodeDao.flush(); Package example1 = m_linkdConfig.getPackage("example1"); assertEquals(false, example1.hasForceIpRouteDiscoveryOnEthernet()); example1.setForceIpRouteDiscoveryOnEthernet(true); example1.setUseCdpDiscovery(false); final OnmsNode mumbai = m_nodeDao.findByForeignId("linkd", MUMBAI_NAME); final OnmsNode chennai = m_nodeDao.findByForeignId("linkd", CHENNAI_NAME); final OnmsNode delhi = m_nodeDao.findByForeignId("linkd", DELHI_NAME); final OnmsNode bangalore = m_nodeDao.findByForeignId("linkd", BANGALORE_NAME); final OnmsNode bagmane = m_nodeDao.findByForeignId("linkd", BAGMANE_NAME); final OnmsNode mysore = m_nodeDao.findByForeignId("linkd", MYSORE_NAME); final OnmsNode spaceexsw1 = m_nodeDao.findByForeignId("linkd", SPACE_EX_SW1_NAME); final OnmsNode spaceexsw2 = m_nodeDao.findByForeignId("linkd", SPACE_EX_SW2_NAME); final OnmsNode j635041 = m_nodeDao.findByForeignId("linkd", J6350_41_NAME); final OnmsNode j635042 = m_nodeDao.findByForeignId("linkd", J6350_42_NAME); final OnmsNode srx100 = m_nodeDao.findByForeignId("linkd", SRX_100_NAME); final OnmsNode ssg550 = m_nodeDao.findByForeignId("linkd", SSG550_NAME); assertTrue(m_linkd.scheduleNodeCollection(chennai.getId())); assertTrue(m_linkd.scheduleNodeCollection(mumbai.getId())); assertTrue(m_linkd.scheduleNodeCollection(delhi.getId())); assertTrue(m_linkd.scheduleNodeCollection(bangalore.getId())); assertTrue(m_linkd.scheduleNodeCollection(bagmane.getId())); assertTrue(m_linkd.scheduleNodeCollection(mysore.getId())); assertTrue(m_linkd.scheduleNodeCollection(spaceexsw1.getId())); assertTrue(m_linkd.scheduleNodeCollection(spaceexsw2.getId())); assertTrue(m_linkd.scheduleNodeCollection(j635041.getId())); assertTrue(m_linkd.scheduleNodeCollection(j635042.getId())); assertTrue(m_linkd.scheduleNodeCollection(srx100.getId())); assertTrue(m_linkd.scheduleNodeCollection(ssg550.getId())); assertTrue(m_linkd.runSingleSnmpCollection(mumbai.getId())); assertTrue(m_linkd.runSingleSnmpCollection(chennai.getId())); assertTrue(m_linkd.runSingleSnmpCollection(delhi.getId())); assertTrue(m_linkd.runSingleSnmpCollection(bangalore.getId())); assertTrue(m_linkd.runSingleSnmpCollection(bagmane.getId())); assertTrue(m_linkd.runSingleSnmpCollection(mysore.getId())); assertTrue(m_linkd.runSingleSnmpCollection(spaceexsw1.getId())); assertTrue(m_linkd.runSingleSnmpCollection(spaceexsw2.getId())); assertTrue(m_linkd.runSingleSnmpCollection(j635041.getId())); assertTrue(m_linkd.runSingleSnmpCollection(j635042.getId())); assertTrue(m_linkd.runSingleSnmpCollection(srx100.getId())); assertTrue(m_linkd.runSingleSnmpCollection(ssg550.getId())); assertEquals(0, m_dataLinkInterfaceDao.countAll()); assertTrue(m_linkd.runSingleLinkDiscovery("example1")); final List<DataLinkInterface> links = m_dataLinkInterfaceDao.findAll(); assertEquals(9, links.size()); // Linkd is able to find partially the topology using the next hop router // among the core nodes: // mumbai, chennai, delhi, mysore,bangalore and bagmane // the link between chennai and delhi is lost // the link between chennai and bagmane is lost // the link between bagmane and delhi is lost // I checked the walks and no route info // is there for discovering the link. // I have to guess that linkd is working as expected // The bridge and RSTP topology information are // unusuful, the devices supporting RSTP // have themselves as designated bridge. // Other links are lost... // no routing entry and no bridge // forwarding int start = getStartPoint(links); for (final DataLinkInterface datalinkinterface : links) { int id = datalinkinterface.getId().intValue(); if (start == id) { checkLink(delhi, mumbai, 28503, 519, datalinkinterface); } else if (start + 1 == id) { checkLink(bangalore, mumbai, 2401, 507, datalinkinterface); } else if (start + 2 == id) { checkLink(bagmane, mumbai, 534, 977, datalinkinterface); } else if (start + 3 == id) { checkLink(mysore, mumbai, 508, 978, datalinkinterface); } else if (start + 4 == id) { checkLink(chennai, mumbai, 528, 520, datalinkinterface); } else if (start + 5 == id) { checkLink(mysore, chennai, 505, 517, datalinkinterface); } else if (start + 6 == id) { checkLink(bangalore, delhi, 2397, 3674, datalinkinterface); } else if (start + 7 == id) { checkLink(bagmane, bangalore, 1732, 2396, datalinkinterface); } else if (start + 8 == id) { checkLink(mysore, bagmane, 520, 654, datalinkinterface); } else { checkLink(mumbai, mumbai, -1, -1, datalinkinterface); } } }