Search in sources :

Example 11 with Bridge

use of org.opennms.netmgt.model.topology.Bridge in project opennms by OpenNMS.

the class BroadcastDomainTest method testBA.

@Test
public void testBA() {
    ABCTopology topology = new ABCTopology();
    BroadcastDomain domain = new BroadcastDomain();
    domain.addBridge(new Bridge(topology.nodeBId));
    domain.addBridge(new Bridge(topology.nodeAId));
    domain.setBridgeElements(topology.elemlist);
    NodeDiscoveryBridgeTopology ndbt = new NodeDiscoveryBridgeTopology(linkd, new Node(topology.nodeAId, null, null, null, location));
    ndbt.setDomain(domain);
    ndbt.addUpdatedBFT(domain.getBridge(topology.nodeBId), topology.bftB);
    ndbt.addUpdatedBFT(domain.getBridge(topology.nodeAId), topology.bftA);
    ndbt.calculate();
    topology.checkAB(ndbt.getDomain());
}
Also used : BroadcastDomain(org.opennms.netmgt.model.topology.BroadcastDomain) Bridge(org.opennms.netmgt.model.topology.Bridge) Test(org.junit.Test)

Example 12 with Bridge

use of org.opennms.netmgt.model.topology.Bridge in project opennms by OpenNMS.

the class BroadcastDomainTest method testDEF.

@Test
public void testDEF() {
    DEFGHILTopology topology = new DEFGHILTopology();
    BroadcastDomain domain = new BroadcastDomain();
    domain.addBridge(new Bridge(topology.nodeDId));
    domain.addBridge(new Bridge(topology.nodeEId));
    domain.addBridge(new Bridge(topology.nodeFId));
    domain.setBridgeElements(topology.elemlist);
    NodeDiscoveryBridgeTopology ndbt = new NodeDiscoveryBridgeTopology(linkd, new Node(topology.nodeDId, null, null, null, location));
    ndbt.setDomain(domain);
    ndbt.addUpdatedBFT(domain.getBridge(topology.nodeDId), topology.bftD);
    ndbt.addUpdatedBFT(domain.getBridge(topology.nodeEId), topology.bftE);
    ndbt.addUpdatedBFT(domain.getBridge(topology.nodeFId), topology.bftF);
    ndbt.calculate();
    topology.checkDEF(ndbt.getDomain());
}
Also used : BroadcastDomain(org.opennms.netmgt.model.topology.BroadcastDomain) Bridge(org.opennms.netmgt.model.topology.Bridge) Test(org.junit.Test)

Example 13 with Bridge

use of org.opennms.netmgt.model.topology.Bridge in project opennms by OpenNMS.

the class BroadcastDomainTest method testDEFGHIL.

@Test
public void testDEFGHIL() {
    DEFGHILTopology topology = new DEFGHILTopology();
    BroadcastDomain domain = new BroadcastDomain();
    domain.addBridge(new Bridge(topology.nodeDId));
    domain.addBridge(new Bridge(topology.nodeEId));
    domain.addBridge(new Bridge(topology.nodeFId));
    domain.addBridge(new Bridge(topology.nodeGId));
    domain.addBridge(new Bridge(topology.nodeHId));
    domain.addBridge(new Bridge(topology.nodeIId));
    domain.addBridge(new Bridge(topology.nodeLId));
    domain.setBridgeElements(topology.elemlist);
    NodeDiscoveryBridgeTopology ndbt = new NodeDiscoveryBridgeTopology(linkd, new Node(topology.nodeDId, null, null, null, location));
    ndbt.setDomain(domain);
    ndbt.addUpdatedBFT(domain.getBridge(topology.nodeDId), topology.bftD);
    ndbt.addUpdatedBFT(domain.getBridge(topology.nodeEId), topology.bftE);
    ndbt.addUpdatedBFT(domain.getBridge(topology.nodeFId), topology.bftF);
    ndbt.addUpdatedBFT(domain.getBridge(topology.nodeGId), topology.bftG);
    ndbt.addUpdatedBFT(domain.getBridge(topology.nodeHId), topology.bftH);
    ndbt.addUpdatedBFT(domain.getBridge(topology.nodeIId), topology.bftI);
    ndbt.addUpdatedBFT(domain.getBridge(topology.nodeLId), topology.bftL);
    ndbt.calculate();
    topology.check(ndbt.getDomain().getTopology());
}
Also used : BroadcastDomain(org.opennms.netmgt.model.topology.BroadcastDomain) Bridge(org.opennms.netmgt.model.topology.Bridge) Test(org.junit.Test)

Example 14 with Bridge

use of org.opennms.netmgt.model.topology.Bridge in project opennms by OpenNMS.

the class NodeDiscoveryBridgeTopology method calculate.

protected void calculate() {
    LOG.info("calculate: node: [{}], start: broadcast domain {} topology calculation.", getNodeId(), m_domain.getBridgeNodesOnDomain());
    if (LOG.isDebugEnabled()) {
        LOG.debug("calculate: node: [{}], Print Topology {}", getNodeId(), m_domain.printTopology());
    }
    Bridge electedRoot = m_domain.electRootBridge();
    if (electedRoot == null && m_domain.hasRootBridge()) {
        LOG.debug("calculate: node: [{}], electRootBridge: mantaining old root bridge: {}", getNodeId(), m_domain.getRootBridgeId());
        electedRoot = m_domain.getRootBridge();
    } else if (electedRoot == null) {
        // no spanning tree root?
        // why I'm here?
        // not root bridge defined (this mean no calculation yet done...
        // so checking the best into not parsed
        int size = 0;
        Bridge rootBridge = null;
        for (Bridge bridge : m_notYetParsedBFTMap.keySet()) {
            LOG.debug("calculate: node: [{}], bridge [{}]: max bft size \"{}\" in topology", getNodeId(), bridge.getId(), m_notYetParsedBFTMap.get(bridge).size());
            if (size < m_notYetParsedBFTMap.get(bridge).size()) {
                rootBridge = bridge;
                size = m_notYetParsedBFTMap.get(bridge).size();
            }
        }
        if (rootBridge != null) {
            LOG.debug("calculate: node: [{}], bridge [{}]: elected root with max bft size \"{}\" in topology", getNodeId(), rootBridge.getId(), size);
            electedRoot = rootBridge;
        }
    }
    if (electedRoot == null) {
        electedRoot = m_domain.getBridges().iterator().next();
        LOG.debug("calculate: node: [{}], electRootBridge: first root bridge: {}", getNodeId(), electedRoot.getId());
    }
    if (electedRoot.getId() == null) {
        LOG.error("calculate: node: [{}], electedRootBridge must have an id!", getNodeId());
        return;
    }
    List<BridgeMacLink> rootBft = m_notYetParsedBFTMap.remove(electedRoot);
    if (m_domain.hasRootBridge() && m_domain.getRootBridge().getId() == electedRoot.getId() && rootBft == null) {
        LOG.debug("calculate: node: [{}], elected root bridge: [{}], old root bridge. no updated bft", getNodeId(), electedRoot.getId());
        rootBft = m_domain.calculateRootBFT();
    } else if (rootBft != null) {
        LOG.debug("calculate: node: [{}], elected root bridge: [{}], has updated bft", getNodeId(), electedRoot.getId());
        m_domain.clearTopologyForBridge(electedRoot.getId());
        LOG.debug("calculate: node: [{}], cleared topology: domain root bridge: [{}]", getNodeId(), m_domain.getRootBridgeId());
        if (m_domain.getTopology().isEmpty()) {
            LOG.debug("calculate: node: [{}], new elected root bridge: [{}], is the first bridge in topology. Adding root shared segments", getNodeId(), electedRoot.getId());
            loadFirstLevelSharedSegment(rootBft);
            electedRoot.setRootBridge(true);
            electedRoot.setRootPort(null);
        } else {
            calculate(m_domain.getRootBridge(), m_domain.calculateRootBFT(), electedRoot, rootBft);
            addForwarding(m_domain, rootBft);
            m_domain.hierarchySetUp(electedRoot);
        }
    } else {
        LOG.debug("calculate: node: [{}], elected root bridge: [{}], is new, without updated bft", getNodeId(), electedRoot.getId());
        m_domain.hierarchySetUp(electedRoot);
        rootBft = m_domain.calculateRootBFT();
    }
    if (!m_notYetParsedBFTMap.isEmpty()) {
        for (Bridge xBridge : m_notYetParsedBFTMap.keySet()) {
            m_domain.clearTopologyForBridge(xBridge.getId());
            LOG.debug("calculate: node: [{}], Removed bridge: [{}].", getNodeId(), xBridge.getId());
        }
    }
    Set<Bridge> nodetobeparsed = new HashSet<Bridge>(m_notYetParsedBFTMap.keySet());
    for (Bridge xBridge : nodetobeparsed) {
        List<BridgeMacLink> xBft = new ArrayList<BridgeMacLink>(m_notYetParsedBFTMap.remove(xBridge));
        calculate(electedRoot, rootBft, xBridge, xBft);
    }
    m_domain.cleanForwarders(m_domain.getMacsOnDomain());
    if (LOG.isDebugEnabled()) {
        LOG.debug("calculate: node: [{}], Print Topology {}", getNodeId(), m_domain.printTopology());
    }
    if (LOG.isInfoEnabled()) {
        LOG.info("calculate: node: [{}], stop: broadcast domain {} topology calculated.", getNodeId(), m_domain.getBridgeNodesOnDomain());
    }
}
Also used : ArrayList(java.util.ArrayList) BridgeMacLink(org.opennms.netmgt.model.BridgeMacLink) Bridge(org.opennms.netmgt.model.topology.Bridge) HashSet(java.util.HashSet)

Example 15 with Bridge

use of org.opennms.netmgt.model.topology.Bridge in project opennms by OpenNMS.

the class BroadcastDomainTest method testHierarchySetUp.

@Test
public void testHierarchySetUp() {
    DEFGHILTopology topology = new DEFGHILTopology();
    BroadcastDomain domain = new BroadcastDomain();
    domain.addBridge(new Bridge(topology.nodeDId));
    domain.addBridge(new Bridge(topology.nodeEId));
    domain.addBridge(new Bridge(topology.nodeFId));
    domain.addBridge(new Bridge(topology.nodeGId));
    domain.addBridge(new Bridge(topology.nodeHId));
    domain.addBridge(new Bridge(topology.nodeIId));
    domain.addBridge(new Bridge(topology.nodeLId));
    domain.setBridgeElements(topology.elemlist);
    NodeDiscoveryBridgeTopology ndbt = new NodeDiscoveryBridgeTopology(linkd, new Node(topology.nodeDId, null, null, null, location));
    ndbt.setDomain(domain);
    ndbt.addUpdatedBFT(domain.getBridge(topology.nodeDId), topology.bftD);
    ndbt.addUpdatedBFT(domain.getBridge(topology.nodeEId), topology.bftE);
    ndbt.addUpdatedBFT(domain.getBridge(topology.nodeFId), topology.bftF);
    ndbt.addUpdatedBFT(domain.getBridge(topology.nodeGId), topology.bftG);
    ndbt.addUpdatedBFT(domain.getBridge(topology.nodeHId), topology.bftH);
    ndbt.addUpdatedBFT(domain.getBridge(topology.nodeIId), topology.bftI);
    ndbt.addUpdatedBFT(domain.getBridge(topology.nodeLId), topology.bftL);
    ndbt.calculate();
    topology.check(ndbt.getDomain().getTopology());
    domain.hierarchySetUp(domain.getBridge(topology.nodeGId));
    assertEquals(topology.nodeGId, ndbt.getDomain().getRootBridgeId());
    assertEquals(true, ndbt.getDomain().getBridge(topology.nodeGId).isRootBridge());
    assertEquals(null, ndbt.getDomain().getBridge(topology.nodeGId).getRootPort());
    assertEquals(false, ndbt.getDomain().getBridge(topology.nodeDId).isRootBridge());
    assertEquals(topology.portDD, ndbt.getDomain().getBridge(topology.nodeDId).getRootPort());
    assertEquals(false, ndbt.getDomain().getBridge(topology.nodeEId).isRootBridge());
    assertEquals(topology.portEE, ndbt.getDomain().getBridge(topology.nodeEId).getRootPort());
    assertEquals(false, ndbt.getDomain().getBridge(topology.nodeFId).isRootBridge());
    assertEquals(topology.portFF, ndbt.getDomain().getBridge(topology.nodeFId).getRootPort());
    assertEquals(false, ndbt.getDomain().getBridge(topology.nodeHId).isRootBridge());
    assertEquals(topology.portHH, ndbt.getDomain().getBridge(topology.nodeHId).getRootPort());
    assertEquals(false, ndbt.getDomain().getBridge(topology.nodeIId).isRootBridge());
    assertEquals(topology.portII, ndbt.getDomain().getBridge(topology.nodeIId).getRootPort());
    assertEquals(false, ndbt.getDomain().getBridge(topology.nodeLId).isRootBridge());
    assertEquals(topology.portLL, ndbt.getDomain().getBridge(topology.nodeLId).getRootPort());
}
Also used : BroadcastDomain(org.opennms.netmgt.model.topology.BroadcastDomain) Bridge(org.opennms.netmgt.model.topology.Bridge) Test(org.junit.Test)

Aggregations

Bridge (org.opennms.netmgt.model.topology.Bridge)47 BroadcastDomain (org.opennms.netmgt.model.topology.BroadcastDomain)45 Test (org.junit.Test)42 BridgeMacLink (org.opennms.netmgt.model.BridgeMacLink)7 SharedSegment (org.opennms.netmgt.model.topology.SharedSegment)7 ArrayList (java.util.ArrayList)5 HashSet (java.util.HashSet)5 List (java.util.List)3 HashMap (java.util.HashMap)2 Set (java.util.Set)2 BridgeBridgeLink (org.opennms.netmgt.model.BridgeBridgeLink)2 Date (java.util.Date)1 CopyOnWriteArraySet (java.util.concurrent.CopyOnWriteArraySet)1