Use Uint types in loopremover
[l2switch.git] / loopremover / implementation / src / main / java / org / opendaylight / l2switch / loopremover / LoopRemoverProvider.java
index e08efb2598efee8e61325f291abb9b568bc0e8c8..1a6ff2caa54bd60016c59f8941b7a5180e967076 100644 (file)
@@ -7,61 +7,64 @@
  */
 package org.opendaylight.l2switch.loopremover;
 
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.sal.binding.api.AbstractBindingAwareConsumer;
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
-import org.opendaylight.controller.sal.binding.api.NotificationService;
 import org.opendaylight.l2switch.loopremover.flow.InitialFlowWriter;
 import org.opendaylight.l2switch.loopremover.topology.NetworkGraphImpl;
 import org.opendaylight.l2switch.loopremover.topology.NetworkGraphService;
 import org.opendaylight.l2switch.loopremover.topology.TopologyLinkDataChangeHandler;
+import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.SalFlowService;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.loop.remover.config.rev140528.LoopRemoverConfig;
 import org.opendaylight.yangtools.concepts.Registration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-/**
- */
-public class LoopRemoverProvider extends AbstractBindingAwareConsumer
-    implements AutoCloseable {
+public class LoopRemoverProvider {
+    private static final Logger LOG = LoggerFactory.getLogger(LoopRemoverProvider.class);
 
-  private final static Logger _logger = LoggerFactory.getLogger(LoopRemoverProvider.class);
-  private Registration listenerRegistration = null, invListenerReg = null;
-  private TopologyLinkDataChangeHandler topologyLinkDataChangeHandler;
+    private final DataBroker dataService;
+    private final SalFlowService salFlowService;
+    private final LoopRemoverConfig loopRemoverConfig;
 
-  /**
-   * Setup the loop remover.
-   *
-   * @param consumerContext The context of the L2Switch.
-   */
-  @Override
-  public void onSessionInitialized(BindingAwareBroker.ConsumerContext consumerContext) {
-    // Setup FlowWriterService
-    DataBroker dataService = consumerContext.<DataBroker>getSALService(DataBroker.class);
-    NetworkGraphService networkGraphService = new NetworkGraphImpl();
-    SalFlowService salFlowService = consumerContext.getRpcService(SalFlowService.class);
-    NotificationService notificationService = consumerContext.<NotificationService>getSALService(NotificationService.class);
+    private Registration listenerRegistration;
+    private Registration topoNodeListnerReg;
+    private TopologyLinkDataChangeHandler topologyLinkDataChangeHandler;
 
-    //Write initial flows
-    InitialFlowWriter initialFlowWriter = new InitialFlowWriter(salFlowService);
-    invListenerReg = notificationService.registerNotificationListener(initialFlowWriter);
+    public LoopRemoverProvider(final DataBroker dataBroker, final SalFlowService salFlowService,
+            final LoopRemoverConfig config) {
+        this.dataService = dataBroker;
+        this.salFlowService = salFlowService;
+        this.loopRemoverConfig = config;
+    }
 
-    // Register Topology DataChangeListener
-    this.topologyLinkDataChangeHandler = new TopologyLinkDataChangeHandler(dataService, networkGraphService);
-    listenerRegistration = topologyLinkDataChangeHandler.registerAsDataChangeListener();
+    public void init() {
+        //Write initial flows
+        if (loopRemoverConfig.getIsInstallLldpFlow()) {
+            LOG.info("LoopRemover will install an lldp flow");
+            InitialFlowWriter initialFlowWriter = new InitialFlowWriter(salFlowService);
+            initialFlowWriter.setFlowTableId(loopRemoverConfig.getLldpFlowTableId());
+            initialFlowWriter.setFlowPriority(loopRemoverConfig.getLldpFlowPriority());
+            initialFlowWriter.setFlowIdleTimeout(loopRemoverConfig.getLldpFlowIdleTimeout());
+            initialFlowWriter.setFlowHardTimeout(loopRemoverConfig.getLldpFlowHardTimeout());
+            topoNodeListnerReg = initialFlowWriter.registerAsDataChangeListener(dataService);
+        }
 
-  }
+        // Register Topology DataChangeListener
+        NetworkGraphService networkGraphService = new NetworkGraphImpl();
+        this.topologyLinkDataChangeHandler = new TopologyLinkDataChangeHandler(dataService, networkGraphService);
+        topologyLinkDataChangeHandler.setGraphRefreshDelay(loopRemoverConfig.getGraphRefreshDelay().toJava());
+        topologyLinkDataChangeHandler.setTopologyId(loopRemoverConfig.getTopologyId());
+        listenerRegistration = topologyLinkDataChangeHandler.registerAsDataChangeListener();
 
-  /**
-   * Cleanup the loop remover
-   */
-  @Override
-  public void close() throws Exception {
-    if(listenerRegistration != null) {
-      listenerRegistration.close();
+        LOG.info("LoopRemover initialized.");
     }
-    if(invListenerReg != null) {
-      invListenerReg.close();
+
+    public void close() throws Exception {
+        if (listenerRegistration != null) {
+            listenerRegistration.close();
+        }
+        if (topoNodeListnerReg != null) {
+            topoNodeListnerReg.close();
+        }
+        LOG.info("LoopRemover (instance {}) torn down.", this);
     }
-  }
 }