@Override public void store(int nodeId, BridgeMacLink link) { if (link == null) return; addBridgeForwardingTableEntry(nodeId, link.getBridgePort(), link.getMacAddress()); if (link.getBridgePortIfIndex() != null) addBridgePortIfIndexEntry(nodeId, link.getBridgePort(), link.getBridgePortIfIndex()); }
@Override public synchronized void reconcileBridge(int nodeId, Date now) { m_bridgeElementDao.deleteByNodeIdOlderThen(nodeId, now); m_bridgeElementDao.flush(); m_bridgeStpLinkDao.deleteByNodeIdOlderThen(nodeId, now); m_bridgeStpLinkDao.flush(); Map<Integer, Integer> bridgeportifindex = m_nodebridgeportifindex.get(nodeId); Map<Integer, Set<String>> bft = m_bftMap.remove(nodeId); if (bft == null || bft.isEmpty()) return; Set<String> macs = new HashSet<String>(); for (Set<String> portmacs : bft.values()) macs.addAll(portmacs); Map<Integer, Map<Integer, Set<String>>> savedtopology = new HashMap<Integer, Map<Integer, Set<String>>>(); for (BridgeMacLink maclink : m_bridgeMacLinkDao.findAll()) { if (maclink.getNode().getId().intValue() == nodeId) continue; Map<Integer, Set<String>> nodesavedtopology = new HashMap<Integer, Set<String>>(); if (savedtopology.containsKey(maclink.getNode().getId())) nodesavedtopology = savedtopology.get(maclink.getNode().getId()); Set<String> macsonport = new HashSet<String>(); if (nodesavedtopology.containsKey(maclink.getBridgePort())) macsonport = nodesavedtopology.get(maclink.getBridgePort()); macsonport.add(maclink.getMacAddress()); nodesavedtopology.put(maclink.getBridgePort(), macsonport); savedtopology.put(maclink.getNode().getId(), nodesavedtopology); } BridgeTopology topology = new BridgeTopology(); Set<Integer> targets = new HashSet<Integer>(); targets.add(nodeId); for (BridgeBridgeLink bblink : m_bridgeBridgeLinkDao.findByNodeId(nodeId)) { Map<Integer, Set<String>> nodesavedtopology = new HashMap<Integer, Set<String>>(); nodesavedtopology.put(bblink.getDesignatedPort(), new HashSet<String>()); topology.addTopology(bblink.getDesignatedNode().getId(), nodesavedtopology, targets); } for (BridgeBridgeLink bblink : m_bridgeBridgeLinkDao.findByDesignatedNodeId(nodeId)) { Map<Integer, Set<String>> nodesavedtopology = new HashMap<Integer, Set<String>>(); nodesavedtopology.put(bblink.getBridgePort(), new HashSet<String>()); topology.addTopology(bblink.getNode().getId(), nodesavedtopology, targets); } for (Integer savednode : savedtopology.keySet()) { topology.parseBFT(savednode, savedtopology.get(savednode)); } topology.parseBFT(nodeId, bft); // now check the topology with the old one // delete the not found links for (BridgeTopologyLink btl : topology.getTopology()) { saveLink(btl, nodeId, bridgeportifindex); } for (Integer curNodeId : savedtopology.keySet()) { m_bridgeMacLinkDao.deleteByNodeIdOlderThen(curNodeId, now); } m_bridgeMacLinkDao.deleteByNodeIdOlderThen(nodeId, now); m_bridgeMacLinkDao.flush(); // What about bridge bridge topology // The changes could only be regarding the nodeId m_bridgeBridgeLinkDao.deleteByNodeIdOlderThen(nodeId, now); m_bridgeBridgeLinkDao.deleteByDesignatedNodeIdOlderThen(nodeId, now); m_bridgeBridgeLinkDao.flush(); }