fix of BUG 480
[openflowplugin.git] / openflowplugin / src / main / java / org / opendaylight / openflowplugin / openflow / md / core / MDController.java
index 8988a1d4f3010a2adf971459b894e240bcb07302..65ab9231a62703af81a857fdbcc16ecb14e3b667 100644 (file)
@@ -21,8 +21,10 @@ import java.util.concurrent.TimeoutException;
 
 import org.opendaylight.openflowjava.protocol.api.connection.ConnectionConfiguration;
 import org.opendaylight.openflowjava.protocol.spi.connection.SwitchConnectionProvider;
+import org.opendaylight.openflowplugin.openflow.md.OFConstants;
 import org.opendaylight.openflowplugin.openflow.md.core.session.OFSessionUtil;
 import org.opendaylight.openflowplugin.openflow.md.core.translator.ErrorTranslator;
+import org.opendaylight.openflowplugin.openflow.md.core.translator.ErrorV10Translator;
 import org.opendaylight.openflowplugin.openflow.md.core.translator.ExperimenterTranslator;
 import org.opendaylight.openflowplugin.openflow.md.core.translator.FeaturesV10ToNodeConnectorUpdatedTranslator;
 import org.opendaylight.openflowplugin.openflow.md.core.translator.FlowRemovedTranslator;
@@ -31,6 +33,7 @@ import org.opendaylight.openflowplugin.openflow.md.core.translator.MultiPartRepl
 import org.opendaylight.openflowplugin.openflow.md.core.translator.MultipartReplyTableFeaturesToTableUpdatedTranslator;
 import org.opendaylight.openflowplugin.openflow.md.core.translator.MultipartReplyTranslator;
 import org.opendaylight.openflowplugin.openflow.md.core.translator.PacketInTranslator;
+import org.opendaylight.openflowplugin.openflow.md.core.translator.PacketInV10Translator;
 import org.opendaylight.openflowplugin.openflow.md.core.translator.PortStatusMessageToNodeConnectorUpdatedTranslator;
 import org.opendaylight.openflowplugin.openflow.md.lldp.LLDPSpeakerPopListener;
 import org.opendaylight.openflowplugin.openflow.md.queue.MessageSpy;
@@ -71,7 +74,7 @@ import com.google.common.collect.Lists;
  * @author mirehak
  *
  */
-public class MDController implements IMDController {
+public class MDController implements IMDController, AutoCloseable {
 
     private static final Logger LOG = LoggerFactory.getLogger(MDController.class);
 
@@ -81,8 +84,8 @@ public class MDController implements IMDController {
     private Map<Class<? extends DataObject>, Collection<PopListener<DataObject>>> popListeners;
     private MessageSpy<OfHeader, DataObject> messageSpyCounter; 
 
-    final private int OF10 = 1;
-    final private int OF13 = 4;
+    final private int OF10 = OFConstants.OFP_VERSION_1_0;
+    final private int OF13 = OFConstants.OFP_VERSION_1_3;
 
 
     /**
@@ -96,15 +99,15 @@ public class MDController implements IMDController {
      * provisioning of translator mapping
      */
     public void init() {
-        LOG.debug("Initializing!");
+        LOG.debug("init");
         messageTranslators = new ConcurrentHashMap<>();
         popListeners = new ConcurrentHashMap<>();
         //TODO: move registration to factory
-        addMessageTranslator(ErrorMessage.class, OF10, new ErrorTranslator());
+        addMessageTranslator(ErrorMessage.class, OF10, new ErrorV10Translator());
         addMessageTranslator(ErrorMessage.class, OF13, new ErrorTranslator());
         addMessageTranslator(FlowRemovedMessage.class, OF10, new FlowRemovedTranslator());
         addMessageTranslator(FlowRemovedMessage.class, OF13, new FlowRemovedTranslator());
-        addMessageTranslator(PacketInMessage.class,OF10, new PacketInTranslator());
+        addMessageTranslator(PacketInMessage.class,OF10, new PacketInV10Translator());
         addMessageTranslator(PacketInMessage.class,OF13, new PacketInTranslator());
         addMessageTranslator(PortStatusMessage.class,OF10, new PortStatusMessageToNodeConnectorUpdatedTranslator());
         addMessageTranslator(PortStatusMessage.class,OF13, new PortStatusMessageToNodeConnectorUpdatedTranslator());
@@ -222,6 +225,7 @@ public class MDController implements IMDController {
         } catch (InterruptedException | ExecutionException | TimeoutException e) {
             LOG.error(e.getMessage(), e);
         }
+        close();
     }
 
     /**
@@ -231,7 +235,7 @@ public class MDController implements IMDController {
      *
      */
     public void destroy() {
-        // do nothing
+        close();
     }
 
     @Override
@@ -290,5 +294,15 @@ public class MDController implements IMDController {
             MessageSpy<OfHeader, DataObject> messageSpyCounter) {
         this.messageSpyCounter = messageSpyCounter;
     }
-
+    
+    @Override
+    public void close() {
+        LOG.debug("close");
+        messageSpyCounter = null;
+        messageTranslators = null;
+        popListeners = null;
+        switchConnectionProvider.setSwitchConnectionHandler(null);
+        switchConnectionProvider = null;
+        OFSessionUtil.releaseSessionManager();
+    }
 }