2 * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.l2switch.loopremover;
10 import org.opendaylight.l2switch.loopremover.flow.InitialFlowWriter;
11 import org.opendaylight.l2switch.loopremover.topology.NetworkGraphImpl;
12 import org.opendaylight.l2switch.loopremover.topology.NetworkGraphService;
13 import org.opendaylight.l2switch.loopremover.topology.TopologyLinkDataChangeHandler;
14 import org.opendaylight.mdsal.binding.api.DataBroker;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.SalFlowService;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.loop.remover.config.rev140528.LoopRemoverConfig;
17 import org.opendaylight.yangtools.concepts.Registration;
18 import org.slf4j.Logger;
19 import org.slf4j.LoggerFactory;
21 public class LoopRemoverProvider {
22 private static final Logger LOG = LoggerFactory.getLogger(LoopRemoverProvider.class);
24 private final DataBroker dataService;
25 private final SalFlowService salFlowService;
26 private final LoopRemoverConfig loopRemoverConfig;
28 private Registration listenerRegistration;
29 private Registration topoNodeListnerReg;
30 private TopologyLinkDataChangeHandler topologyLinkDataChangeHandler;
32 public LoopRemoverProvider(final DataBroker dataBroker, final SalFlowService salFlowService,
33 final LoopRemoverConfig config) {
34 this.dataService = dataBroker;
35 this.salFlowService = salFlowService;
36 this.loopRemoverConfig = config;
41 if (loopRemoverConfig.isIsInstallLldpFlow()) {
42 LOG.info("LoopRemover will install an lldp flow");
43 InitialFlowWriter initialFlowWriter = new InitialFlowWriter(salFlowService);
44 initialFlowWriter.setFlowTableId(loopRemoverConfig.getLldpFlowTableId().toJava());
45 initialFlowWriter.setFlowPriority(loopRemoverConfig.getLldpFlowPriority().toJava());
46 initialFlowWriter.setFlowIdleTimeout(loopRemoverConfig.getLldpFlowIdleTimeout().toJava());
47 initialFlowWriter.setFlowHardTimeout(loopRemoverConfig.getLldpFlowHardTimeout().toJava());
48 topoNodeListnerReg = initialFlowWriter.registerAsDataChangeListener(dataService);
51 // Register Topology DataChangeListener
52 NetworkGraphService networkGraphService = new NetworkGraphImpl();
53 this.topologyLinkDataChangeHandler = new TopologyLinkDataChangeHandler(dataService, networkGraphService);
54 topologyLinkDataChangeHandler.setGraphRefreshDelay(loopRemoverConfig.getGraphRefreshDelay().toJava());
55 topologyLinkDataChangeHandler.setTopologyId(loopRemoverConfig.getTopologyId());
56 listenerRegistration = topologyLinkDataChangeHandler.registerAsDataChangeListener();
58 LOG.info("LoopRemover initialized.");
61 public void close() throws Exception {
62 if (listenerRegistration != null) {
63 listenerRegistration.close();
65 if (topoNodeListnerReg != null) {
66 topoNodeListnerReg.close();
68 LOG.info("LoopRemover (instance {}) torn down.", this);