/* * * nodelabel | snmpifname | ifindex | parent | parentif | parentifindex * --------------------+--------------+---------+--------------------+------------+--------------- * r-de-pots-amka-001 | Fa6/0/0 | 164 | r-de-juet-luck-001 | ge-0/0/0.0 | 510 * r-de-juet-luck-001 | ge-0/0/2.100 | 549 | s-de-juet-luck-001 | Fa0/1 | 10001 * r-de-juet-luck-001 | ge-0/0/2.950 | 550 | s-de-juet-luck-001 | Fa0/1 | 10001 * * * The links are mostly from the bridge forwarding table protocol in fact the * ge-0/0/2.100 and ge-0/0/2.950 are logical interface for vlan 100 and * vlan 950 on juniper router. with the same mac address 54e032ef3102 * So both vlan 100 and vlan 950 will address the same link * No way to get layer 2 link because no STP is enabled on Juniper device * */ @Test @JUnitSnmpAgents( value = { @JUnitSnmpAgent(host = Rluck001_IP, port = 161, resource = Rluck001_SNMP_RESOURCE), @JUnitSnmpAgent(host = Sluck001_IP, port = 161, resource = Sluck001_SNMP_RESOURCE) }) public void testNetworkLinksCiscoJuniperLldp() throws Exception { m_nodeDao.save(builder.getRluck001()); m_nodeDao.save(builder.getSluck001()); m_nodeDao.flush(); Package example1 = m_linkdConfig.getPackage("example1"); example1.setUseIsisDiscovery(false); example1.setUseIpRouteDiscovery(false); example1.setUseOspfDiscovery(false); example1.setUseLldpDiscovery(true); example1.setUseCdpDiscovery(false); example1.setUseBridgeDiscovery(false); example1.setEnableVlanDiscovery(false); example1.setSaveStpNodeTable(false); example1.setSaveStpInterfaceTable(false); example1.setSaveRouteTable(false); final OnmsNode routerJuniper = m_nodeDao.findByForeignId("linkd", Rluck001_NAME); final OnmsNode switchCisco = m_nodeDao.findByForeignId("linkd", Sluck001_NAME); assertTrue(m_linkd.scheduleNodeCollection(routerJuniper.getId())); assertTrue(m_linkd.scheduleNodeCollection(switchCisco.getId())); assertTrue(m_linkd.runSingleSnmpCollection(routerJuniper.getId())); assertTrue(m_linkd.runSingleSnmpCollection(switchCisco.getId())); for (LinkableNode linkableNode : m_linkd.getLinkableNodesOnPackage("example1")) { assertNotNull(linkableNode.getLldpChassisId()); } assertTrue(m_linkd.runSingleLinkDiscovery("example1")); assertEquals(0, m_dataLinkInterfaceDao.countAll()); }
@Test public void testDefaultConfiguration2() throws MarshalException, ValidationException, IOException { assertEquals(5, m_linkdConfig.getThreads()); assertEquals(3600000, m_linkdConfig.getInitialSleepTime()); assertEquals(18000000, m_linkdConfig.getSnmpPollInterval()); assertEquals(1800000, m_linkdConfig.getDiscoveryLinkInterval()); assertEquals(false, m_linkdConfig.isAutoDiscoveryEnabled()); assertEquals(true, m_linkdConfig.isVlanDiscoveryEnabled()); assertEquals(true, m_linkdConfig.useCdpDiscovery()); assertEquals(true, m_linkdConfig.useIpRouteDiscovery()); assertEquals(true, m_linkdConfig.useBridgeDiscovery()); assertEquals(true, m_linkdConfig.useOspfDiscovery()); assertEquals(true, m_linkdConfig.useLldpDiscovery()); assertEquals(true, m_linkdConfig.useIsIsDiscovery()); assertEquals(true, m_linkdConfig.saveRouteTable()); assertEquals(true, m_linkdConfig.saveStpNodeTable()); assertEquals(true, m_linkdConfig.saveStpInterfaceTable()); assertEquals(false, m_linkdConfig.forceIpRouteDiscoveryOnEthernet()); Enumeration<org.opennms.netmgt.config.linkd.Package> iter = m_linkdConfig.enumeratePackage(); org.opennms.netmgt.config.linkd.Package example1 = iter.nextElement(); assertEquals(false, iter.hasMoreElements()); assertEquals("example1", example1.getName()); assertEquals(false, example1.hasAutoDiscovery()); assertEquals(false, example1.hasDiscovery_link_interval()); assertEquals(false, example1.hasEnableVlanDiscovery()); assertEquals(false, example1.hasForceIpRouteDiscoveryOnEthernet()); assertEquals(false, example1.hasSaveRouteTable()); assertEquals(false, example1.hasSaveStpInterfaceTable()); assertEquals(false, example1.hasSaveStpNodeTable()); assertEquals(false, example1.hasSnmp_poll_interval()); assertEquals(false, example1.hasUseBridgeDiscovery()); assertEquals(false, example1.hasUseCdpDiscovery()); assertEquals(false, example1.hasUseIpRouteDiscovery()); assertEquals(false, example1.hasUseIsisDiscovery()); assertEquals( false, m_linkdConfig.isInterfaceInPackage(InetAddressUtils.addr(CISCO_C870_IP), example1)); m_nodeDao.save(builder.getCiscoC870()); m_nodeDao.save(builder.getCiscoWsC2948()); m_nodeDao.flush(); m_linkdConfig.update(); assertEquals( true, m_linkdConfig.isInterfaceInPackage(InetAddressUtils.addr(CISCO_C870_IP), example1)); assertEquals( true, m_linkdConfig.isInterfaceInPackage(InetAddressUtils.addr(CISCO_WS_C2948_IP), example1)); final OnmsNode ciscorouter = m_nodeDao.findByForeignId("linkd", CISCO_C870_NAME); final OnmsNode ciscows = m_nodeDao.findByForeignId("linkd", CISCO_WS_C2948_NAME); assertTrue(m_linkd.scheduleNodeCollection(ciscorouter.getId())); assertTrue(m_linkd.scheduleNodeCollection(ciscows.getId())); LinkableNode lciscorouter = m_linkd.removeNode("example1", InetAddressUtils.addr(CISCO_C870_IP)); assertNotNull(lciscorouter); assertEquals(ciscorouter.getId().intValue(), lciscorouter.getNodeId()); assertEquals(1, m_linkd.getActivePackages().size()); }
@Test @JUnitSnmpAgents( value = { @JUnitSnmpAgent( host = DARWIN_10_8_IP, port = 161, resource = "classpath:linkd/nms7467/" + DARWIN_10_8_IP + "-walk.txt") }) public void testDarwin108Collection() throws Exception { m_nodeDao.save(builder.getDarwin108()); m_nodeDao.flush(); Package example1 = m_linkdConfig.getPackage("example1"); example1.setUseLldpDiscovery(false); example1.setUseOspfDiscovery(false); example1.setUseIsisDiscovery(false); m_linkdConfig.update(); final OnmsNode mac = m_nodeDao.findByForeignId("linkd", DARWIN_10_8_NAME); assertTrue(m_linkd.scheduleNodeCollection(mac.getId())); assertTrue(m_linkd.runSingleSnmpCollection(mac.getId())); // linkd has 1 linkable node assertEquals(1, m_linkd.getLinkableNodesOnPackage("example1").size()); LinkableNode linkNode = m_linkd.getLinkableNodesOnPackage("example1").iterator().next(); // linkabble node is not null assertTrue(linkNode != null); // has 1 route (next hop must be valid!) no ip route table assertEquals(0, linkNode.getRouteInterfaces().size()); // has 0 vlan assertEquals(0, m_vlanDao.countAll()); String packageName = m_linkdConfig.getFirstPackageMatch(InetAddressUtils.addr(DARWIN_10_8_IP)).getName(); assertEquals("example1", packageName); assertEquals(false, linkNode.isBridgeNode()); assertEquals(0, linkNode.getBridgeIdentifiers().size()); // no cdp inteface also if the walk return several interfaces assertEquals("cdp not supported", 0, linkNode.getCdpInterfaces().size()); // This make shure that the ip/mac association is saved /* * nodelabel:ip:mac:ifindex:ifdescr * DARWIN_10_8:172.20.1.28:0026b0ed8fb8:4:en0 * */ final Set<String> macAddresses = m_linkd.getMacAddressesOnPackage(packageName); assertNotNull(macAddresses); assertEquals(1, macAddresses.size()); List<AtInterface> ats = m_linkd.getAtInterfaces(packageName, "0026b0ed8fb8"); assertNotNull(ats); assertEquals("should have saved 1 ip to mac", 1, ats.size()); for (AtInterface at : ats) { if (at.getIpAddress().getHostAddress().equals("172.20.1.28")) assertTrue(at.getIfIndex().intValue() == 4); else assertTrue( "ip: " + at.getIpAddress().getHostAddress() + "does not match any known ip address", false); } // Now Let's test the database // 0 atinterface in database assertEquals(0, m_atInterfaceDao.findAll().size()); final Criteria criteria = new Criteria(OnmsIpRouteInterface.class); criteria.setAliases(Arrays.asList(new Alias[] {new Alias("node", "node", JoinType.LEFT_JOIN)})); criteria.addRestriction(new EqRestriction("node.id", mac.getId())); final List<OnmsIpRouteInterface> iproutes = m_ipRouteInterfaceDao.findMatching(criteria); // 4 route entry in database for (OnmsIpRouteInterface iproute : iproutes) { System.out.println( iproute.getRouteDest() + "/" + iproute.getRouteMask() + "/" + iproute.getRouteNextHop() + "/" + iproute.getRouteIfIndex()); } assertEquals(20, iproutes.size()); // 0 entry in vlan assertEquals(0, m_vlanDao.findAll().size()); // 0 entry in stpnode assertEquals(0, m_stpNodeDao.countAll()); // 0 entry in stpinterface assertEquals(0, m_stpInterfaceDao.findAll().size()); }
@Test @JUnitSnmpAgents( value = { @JUnitSnmpAgent( host = NETGEAR_SW_108_IP, port = 161, resource = "classpath:linkd/nms7467/" + NETGEAR_SW_108_IP + "-walk.txt") }) public void testNetGearSw108Collection() throws Exception { m_nodeDao.save(builder.getNetGearSw108()); m_nodeDao.flush(); final OnmsNode ngsw108 = m_nodeDao.findByForeignId("linkd", NETGEAR_SW_108_NAME); assertTrue(m_linkd.scheduleNodeCollection(ngsw108.getId())); assertTrue(m_linkd.runSingleSnmpCollection(ngsw108.getId())); // linkd has 1 linkable node assertEquals(1, m_linkd.getLinkableNodesOnPackage("example1").size()); LinkableNode linkNode = m_linkd.getLinkableNodesOnPackage("example1").iterator().next(); // linkabble node is not null assertTrue(linkNode != null); // has 0 route (next hop must be valid!) no ip route table assertEquals(0, linkNode.getRouteInterfaces().size()); // has 0 vlan assertEquals(0, m_vlanDao.countAll()); String packageName = m_linkdConfig.getFirstPackageMatch(InetAddressUtils.addr(NETGEAR_SW_108_IP)).getName(); assertEquals("example1", packageName); assertEquals(1, linkNode.getBridgeIdentifiers().size()); // has 1 stp node entry check the bridge identifier and protocol assertEquals(NETGEAR_SW_108_BRIDGEID, linkNode.getBridgeIdentifier(1)); // has 8 stp entry che ifIndex must be different then -1 // assertEquals(8, linkNode.getStpInterfaces().get(1).size()); // no cdp inteface also if the walk return several interfaces assertEquals("cdp not supported", 0, linkNode.getCdpInterfaces().size()); for (OnmsStpInterface stpiface : linkNode.getStpInterfaces().get(1)) { assertTrue("should have a valid ifindex", stpiface.getIfIndex().intValue() > 0); assertTrue("should have a valid bridgeport", stpiface.getBridgePort().intValue() > 0); } // This make shure that the ip/mac association is saved /* * nodelabel:ip:mac:ifindex:ifdescr * * NETGEAR_SW_108:172.20.1.8:00223ff00b7b:: * Run the spanning tree protocol * with bridge identifier: 00223ff00b7b * Transparent Bridge */ final Set<String> macAddresses = m_linkd.getMacAddressesOnPackage(packageName); assertNotNull(macAddresses); assertEquals(1, macAddresses.size()); List<AtInterface> ats = m_linkd.getAtInterfaces(packageName, "00223ff00b7b"); for (AtInterface at : ats) { if (at.getIpAddress().getHostAddress().equals("172.20.1.8")) assertTrue(at.getIfIndex().intValue() == -1); else fail("ip: " + at.getIpAddress().getHostAddress() + "does not match any known ip address"); } // Now Let's test the database // 1 atinterface in database: has itself in ipadress to media assertEquals(1, m_atInterfaceDao.findAll().size()); final Criteria criteria = new Criteria(OnmsIpRouteInterface.class); criteria.setAliases(Arrays.asList(new Alias[] {new Alias("node", "node", JoinType.LEFT_JOIN)})); criteria.addRestriction(new EqRestriction("node.id", ngsw108.getId())); final List<OnmsIpRouteInterface> iproutes = m_ipRouteInterfaceDao.findMatching(criteria); // 7 route entry in database for (OnmsIpRouteInterface iproute : iproutes) { System.out.println( iproute.getRouteDest() + "/" + iproute.getRouteMask() + "/" + iproute.getRouteNextHop() + "/" + iproute.getRouteIfIndex()); } assertEquals(0, iproutes.size()); // 0 entry in vlan assertEquals(0, m_vlanDao.findAll().size()); // 1 entry in stpnode assertEquals(1, m_stpNodeDao.countAll()); OnmsStpNode stpnode = m_stpNodeDao.findByNodeAndVlan(ngsw108.getId(), 1); assertTrue(NETGEAR_SW_108_BRIDGEID.equals(stpnode.getBaseBridgeAddress())); assertEquals(8, stpnode.getBaseNumPorts().intValue()); assertEquals(BridgeBaseType.TRANSPARENT_ONLY, stpnode.getBaseType()); assertEquals(StpProtocolSpecification.IEEE8021D, stpnode.getStpProtocolSpecification()); // 50 entry in stpinterface assertEquals(8, m_stpInterfaceDao.findAll().size()); }
@Test @JUnitSnmpAgents( value = { @JUnitSnmpAgent( host = CISCO_C870_IP, port = 161, resource = "classpath:linkd/nms7467/" + CISCO_C870_IP + "-walk.txt") }) public void testCiscoC870Collection() throws Exception { m_nodeDao.save(builder.getCiscoC870()); m_nodeDao.flush(); Package example1 = m_linkdConfig.getPackage("example1"); example1.setUseLldpDiscovery(false); example1.setUseOspfDiscovery(false); example1.setUseIsisDiscovery(false); final OnmsNode ciscorouter = m_nodeDao.findByForeignId("linkd", CISCO_C870_NAME); assertTrue(m_linkd.scheduleNodeCollection(ciscorouter.getId())); assertTrue(m_linkd.runSingleSnmpCollection(ciscorouter.getId())); // linkd has 1 linkable node assertEquals(1, m_linkd.getLinkableNodesOnPackage("example1").size()); LinkableNode linkNode = m_linkd.getLinkableNodesOnPackage("example1").iterator().next(); // linkabble node is not null assertTrue(linkNode != null); // has 0 route (next hop must be valid!) assertEquals(0, linkNode.getRouteInterfaces().size()); // has 0 vlan assertEquals(0, m_vlanDao.countAll()); String packageName = m_linkdConfig.getFirstPackageMatch(InetAddressUtils.addr(CISCO_C870_IP)).getName(); assertEquals("example1", packageName); assertEquals(1, linkNode.getBridgeIdentifiers().size()); // has 1 stp node entry check the bridge identifier and protocol assertEquals(CISCO_C870_BRIDGEID, linkNode.getBridgeIdentifier(1)); // has 50 stp entry che ifIndex must be different then -1 // assertEquals(1, linkNode.getStpInterfaces().get(1).size()); // no cdp inteface also if the walk return several interfaces assertEquals( "No cdp interface because no other node is there", 0, linkNode.getCdpInterfaces().size()); for (OnmsStpInterface stpiface : linkNode.getStpInterfaces().get(1)) { assertTrue("should have a valid ifindex", stpiface.getIfIndex().intValue() > 0); assertTrue("should have a valid bridgeport", stpiface.getBridgePort().intValue() > 0); } // This make shure that the ip/mac association is saved /* * nodelabel:ip:mac:ifindex:ifdescr * * CISCO_C870:172.20.1.1:001f6cd034e7:12:Vlan1 * CISCO_C870:172.20.2.1:001f6cd034e7:13:Vlan2 * CISCO_C870:10.255.255.2:001f6cd034e7:12:Vlan1 * CISCO_C870:65.41.39.146:00000c03b09e:14:BVI1 */ final Set<String> macAddresses = m_linkd.getMacAddressesOnPackage(packageName); assertEquals(2, macAddresses.size()); List<AtInterface> ats = m_linkd.getAtInterfaces(packageName, "001f6cd034e7"); assertNotNull(ats); assertEquals(3, ats.size()); for (final AtInterface at : ats) { if (at.getIpAddress().getHostAddress().equals("172.20.1.1")) assertEquals(12, at.getIfIndex().intValue()); else if (at.getIpAddress().getHostAddress().equals("172.20.2.1")) assertEquals(13, at.getIfIndex().intValue()); else if (at.getIpAddress().getHostAddress().equals("10.255.255.2")) assertEquals(12, at.getIfIndex().intValue()); else assertTrue( "ip: " + at.getIpAddress().getHostAddress() + "does not match any known ip address", false); } ats = m_linkd.getAtInterfaces(packageName, "00000c03b09e"); assertEquals(1, ats.size()); for (AtInterface at : ats) { if (at.getIpAddress().getHostAddress().equals("65.41.39.146")) assertEquals(14, at.getIfIndex().intValue()); else assertTrue( "ip: " + at.getIpAddress().getHostAddress() + "does not match any known ip address", false); } // Now Let's test the database // 0 atinterface in database assertEquals(4, m_atInterfaceDao.countAll()); final Criteria criteria = new Criteria(OnmsIpRouteInterface.class); criteria.setAliases(Arrays.asList(new Alias[] {new Alias("node", "node", JoinType.LEFT_JOIN)})); criteria.addRestriction(new EqRestriction("node.id", ciscorouter.getId())); final List<OnmsIpRouteInterface> iproutes = m_ipRouteInterfaceDao.findMatching(criteria); // 7 route entry in database for (OnmsIpRouteInterface iproute : iproutes) { System.out.println( iproute.getRouteDest() + "/" + iproute.getRouteMask() + "/" + iproute.getRouteNextHop() + "/" + iproute.getRouteIfIndex()); } assertEquals(7, iproutes.size()); // 0 entry in vlan assertEquals(0, m_vlanDao.findAll().size()); // 1 entry in stpnode assertEquals(1, m_stpNodeDao.countAll()); OnmsStpNode stpnode = m_stpNodeDao.findByNodeAndVlan(ciscorouter.getId(), 1); assertTrue(CISCO_C870_BRIDGEID.equals(stpnode.getBaseBridgeAddress())); assertEquals(1, stpnode.getBaseNumPorts().intValue()); assertEquals(BridgeBaseType.SRT, stpnode.getBaseType()); assertEquals(StpProtocolSpecification.IEEE8021D, stpnode.getStpProtocolSpecification()); // 1 entry in stpinterface assertEquals(1, m_stpInterfaceDao.findAll().size()); }
@Test @JUnitSnmpAgents( value = { @JUnitSnmpAgent( host = CISCO_WS_C2948_IP, port = 161, resource = "classpath:linkd/nms7467/" + CISCO_WS_C2948_IP + "-walk.txt") }) public void testCiscoWsC2948Collection() throws Exception { m_nodeDao.save(builder.getCiscoWsC2948()); m_nodeDao.flush(); Package example1 = m_linkdConfig.getPackage("example1"); example1.setUseLldpDiscovery(false); example1.setUseOspfDiscovery(false); example1.setUseIsisDiscovery(false); example1.setForceIpRouteDiscoveryOnEthernet(true); final OnmsNode ciscosw = m_nodeDao.findByForeignId("linkd", CISCO_WS_C2948_NAME); assertTrue(m_linkd.scheduleNodeCollection(ciscosw.getId())); assertTrue(m_linkd.runSingleSnmpCollection(ciscosw.getId())); // linkd has 1 linkable node assertEquals(1, m_linkd.getLinkableNodesOnPackage("example1").size()); LinkableNode linkNode = m_linkd.getLinkableNodesOnPackage("example1").iterator().next(); // linkabble node is not null assertTrue(linkNode != null); // has only one route with valid next hop must be valid but type is ethernet so skipped // but it is itself so 0 assertEquals(0, linkNode.getRouteInterfaces().size()); // has 5 assertEquals(2, m_ipRouteInterfaceDao.countAll()); assertEquals(5, m_vlanDao.countAll()); String packageName = m_linkdConfig.getFirstPackageMatch(InetAddressUtils.addr(CISCO_WS_C2948_IP)).getName(); assertEquals("example1", packageName); assertEquals(1, linkNode.getBridgeIdentifiers().size()); // has 1 stp node entry check the bridge identifier and protocol assertEquals(CISCO_WS_C2948_BRIDGEID, linkNode.getBridgeIdentifier(1)); // has 50 stp entry che ifIndex must be different then -1 // assertEquals(50, linkNode.getStpInterfaces().get(1).size()); // no cdp inteface also if the walk return several interfaces assertEquals( "No cdp interface because no other node is there", 0, linkNode.getCdpInterfaces().size()); for (OnmsStpInterface stpiface : linkNode.getStpInterfaces().get(1)) { assertTrue("should have a valid ifindex", stpiface.getIfIndex().intValue() > 0); assertTrue("should have a valid bridgeport", stpiface.getBridgePort().intValue() > 0); } // This make shure that the ip/mac association is saved /* * nodelabel:ip:mac:ifindex:ifdescr * * CISCO_WS_C2948_IP:172.20.1.7:0002baaacffe:3:me1 */ final List<AtInterface> atInterfaces = m_linkd.getAtInterfaces(packageName, "0002baaacffe"); assertNotNull(atInterfaces); assertEquals(1, atInterfaces.size()); AtInterface at = atInterfaces.get(0); assertEquals(CISCO_WS_C2948_IP, at.getIpAddress().getHostAddress()); assertEquals(3, at.getIfIndex().intValue()); // Now Let's test the database final Criteria criteria = new Criteria(OnmsIpRouteInterface.class); criteria.setAliases(Arrays.asList(new Alias[] {new Alias("node", "node", JoinType.LEFT_JOIN)})); criteria.addRestriction(new EqRestriction("node.id", ciscosw.getId())); // 2 route entry in database assertEquals(2, m_ipRouteInterfaceDao.findMatching(criteria).size()); // 0 atinterface in database assertEquals(0, m_atInterfaceDao.findAll().size()); // 5 entry in vlan assertEquals(5, m_vlanDao.findAll().size()); // 1 entry in stpnode assertEquals(1, m_stpNodeDao.countAll()); OnmsStpNode stpnode = m_stpNodeDao.findByNodeAndVlan(ciscosw.getId(), 1); assertTrue(CISCO_WS_C2948_BRIDGEID.equals(stpnode.getBaseBridgeAddress())); assertEquals(50, stpnode.getBaseNumPorts().intValue()); assertEquals(BridgeBaseType.TRANSPARENT_ONLY, stpnode.getBaseType()); assertEquals(StpProtocolSpecification.IEEE8021D, stpnode.getStpProtocolSpecification()); // 50 entry in stpinterface assertEquals(50, m_stpInterfaceDao.findAll().size()); }