Use Uint types in loopremover
[l2switch.git] / loopremover / implementation / src / main / java / org / opendaylight / l2switch / loopremover / LoopRemoverProvider.java
index 8eb2893850aa13c85a0bacf1857988bc63b55fcd..1a6ff2caa54bd60016c59f8941b7a5180e967076 100644 (file)
@@ -1,50 +1,70 @@
+/*
+ * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
 package org.opendaylight.l2switch.loopremover;
 
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
-import org.opendaylight.controller.sal.binding.api.AbstractBindingAwareConsumer;
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
+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;
 
-/**
- * Created by amitmandke on 7/9/14.
- */
-public class LoopRemoverProvider extends AbstractBindingAwareConsumer
-    implements AutoCloseable {
-
-  private final static Logger _logger = LoggerFactory.getLogger(LoopRemoverProvider.class);
-  private Registration listenerRegistration;
-  private TopologyLinkDataChangeHandler topologyLinkDataChangeHandler;
-
-  /**
-   * Setup the L2Switch.
-   *
-   * @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();
-
-    // Register Topology DataChangeListener
-    this.topologyLinkDataChangeHandler = new TopologyLinkDataChangeHandler(dataService, networkGraphService);
-    listenerRegistration = topologyLinkDataChangeHandler.registerAsDataChangeListener();
-
-  }
-
-  /**
-   * Cleanup the L2Switch
-   */
-  @Override
-  public void close() throws Exception {
-    if(listenerRegistration != null) {
-      listenerRegistration.close();
+public class LoopRemoverProvider {
+    private static final Logger LOG = LoggerFactory.getLogger(LoopRemoverProvider.class);
+
+    private final DataBroker dataService;
+    private final SalFlowService salFlowService;
+    private final LoopRemoverConfig loopRemoverConfig;
+
+    private Registration listenerRegistration;
+    private Registration topoNodeListnerReg;
+    private TopologyLinkDataChangeHandler topologyLinkDataChangeHandler;
+
+    public LoopRemoverProvider(final DataBroker dataBroker, final SalFlowService salFlowService,
+            final LoopRemoverConfig config) {
+        this.dataService = dataBroker;
+        this.salFlowService = salFlowService;
+        this.loopRemoverConfig = config;
+    }
+
+    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();
+
+        LOG.info("LoopRemover initialized.");
+    }
+
+    public void close() throws Exception {
+        if (listenerRegistration != null) {
+            listenerRegistration.close();
+        }
+        if (topoNodeListnerReg != null) {
+            topoNodeListnerReg.close();
+        }
+        LOG.info("LoopRemover (instance {}) torn down.", this);
     }
-  }
 }