Refractored and added generic mdsal datastore apis 95/19595/3
authorHemaTG <hema.gopalkrishnan@ericsson.com>
Tue, 5 May 2015 10:48:28 +0000 (16:18 +0530)
committerHemaTG <hema.gopalkrishnan@ericsson.com>
Wed, 6 May 2015 08:26:12 +0000 (13:56 +0530)
Signed-off-by: HemaTG <hema.gopalkrishnan@ericsson.com>
Change-Id: I1ffeb76e5dd477597dc01e166c6e5a5ccc52aa79

13 files changed:
mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/AbstractDataChangeListener.java [new file with mode: 0644]
mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/ActionType.java
mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/GroupEntity.java
mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/InstructionType.java
mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/MDSALDataStoreUtils.java [new file with mode: 0644]
mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/MDSALUtil.java
mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/MatchFieldType.java
mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/MetaDataConstants.java
mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/MetaDataUtil.java
mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/NwConstants.java
mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/interfaces/IMdsalApiManager.java
mdsalutil/mdsalutil-impl/src/main/java/org/opendaylight/vpnservice/mdsalutil/internal/MDSALManager.java
mdsalutil/mdsalutil-impl/src/main/java/org/opendaylight/vpnservice/mdsalutil/internal/MDSALUtilProvider.java

diff --git a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/AbstractDataChangeListener.java b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/AbstractDataChangeListener.java
new file mode 100644 (file)
index 0000000..eff8741
--- /dev/null
@@ -0,0 +1,113 @@
+/*
+ * Copyright (c) 2015 Ericsson India Global Services Pvt Ltd. 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.vpnservice.mdsalutil;
+
+import com.google.common.base.Optional;
+import com.google.common.base.Preconditions;
+
+import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
+import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * AbstractDataChangeListener implemented basic {@link DataChangeListener} processing for
+ * MDSAL Data Objects.
+ */
+public abstract class AbstractDataChangeListener<T extends DataObject> implements DataChangeListener {
+
+    protected final Class<T> clazz;
+
+    /**
+     * @param clazz - for which the data change event is received
+     */
+    public AbstractDataChangeListener(Class<T> clazz) {
+        this.clazz = Preconditions.checkNotNull(clazz, "Class can not be null!");
+    }
+
+    @Override
+    public void onDataChanged(final AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> changeEvent) {
+        Preconditions.checkNotNull(changeEvent,"Async ChangeEvent can not be null!");
+
+        /* All DataObjects for create */
+        final Map<InstanceIdentifier<?>, DataObject> createdData = changeEvent.getCreatedData() != null
+                ? changeEvent.getCreatedData() : Collections.<InstanceIdentifier<?>, DataObject>emptyMap();
+        /* All DataObjects for remove */
+        final Set<InstanceIdentifier<?>> removeData = changeEvent.getRemovedPaths() != null
+                ? changeEvent.getRemovedPaths() : Collections.<InstanceIdentifier<?>>emptySet();
+        /* All DataObjects for updates */
+        final Map<InstanceIdentifier<?>, DataObject> updateData = changeEvent.getUpdatedData() != null
+                ? changeEvent.getUpdatedData() : Collections.<InstanceIdentifier<?>, DataObject>emptyMap();
+        /* All Original DataObjects */
+        final Map<InstanceIdentifier<?>, DataObject> originalData = changeEvent.getOriginalData() != null
+                ? changeEvent.getOriginalData() : Collections.<InstanceIdentifier<?>, DataObject>emptyMap();
+
+        this.createData(createdData);
+        this.updateData(updateData, originalData);
+        this.removeData(removeData, originalData);
+    }
+
+    @SuppressWarnings("unchecked")
+    private void createData(final Map<InstanceIdentifier<?>, DataObject> createdData) {
+        final Set<InstanceIdentifier<?>> keys = createdData.keySet() != null
+                ? createdData.keySet() : Collections.<InstanceIdentifier<?>>emptySet();
+        for (InstanceIdentifier<?> key : keys) {
+            if (clazz.equals(key.getTargetType())) {
+                InstanceIdentifier<T> createKeyIdent = key.firstIdentifierOf(clazz);
+                final Optional<DataObject> value = Optional.of(createdData.get(key));
+                if (value.isPresent()) {
+                    this.add(createKeyIdent, (T)value.get());
+                }
+            }
+        }
+    }
+
+    @SuppressWarnings("unchecked")
+    private void updateData(final Map<InstanceIdentifier<?>, DataObject> updateData,
+            final Map<InstanceIdentifier<?>, DataObject> originalData) {
+
+        final Set<InstanceIdentifier<?>> keys = updateData.keySet() != null
+                ? updateData.keySet() : Collections.<InstanceIdentifier<?>>emptySet();
+        for (InstanceIdentifier<?> key : keys) {
+            if (clazz.equals(key.getTargetType())) {
+                InstanceIdentifier<T> updateKeyIdent = key.firstIdentifierOf(clazz);
+                final Optional<DataObject> value = Optional.of(updateData.get(key));
+                final Optional<DataObject> original = Optional.of(originalData.get(key));
+                if (value.isPresent() && original.isPresent()) {
+                    this.update(updateKeyIdent, (T)original.get(), (T)value.get());
+                }
+            }
+        }
+    }
+
+    @SuppressWarnings("unchecked")
+    private void removeData(final Set<InstanceIdentifier<?>> removeData,
+            final Map<InstanceIdentifier<?>, DataObject> originalData) {
+
+        for (InstanceIdentifier<?> key : removeData) {
+            if (clazz.equals(key.getTargetType())) {
+                final InstanceIdentifier<T> ident = key.firstIdentifierOf(clazz);
+                final DataObject removeValue = originalData.get(key);
+                this.remove(ident, (T)removeValue);
+            }
+        }
+    }
+
+    protected abstract void remove(InstanceIdentifier<T> identifier, T del);
+
+    protected abstract void update(InstanceIdentifier<T> identifier, T original, T update);
+
+    protected abstract void add(InstanceIdentifier<T> identifier, T add);
+
+}
+
+
index 3744928c482cf72e5a9f77d50f64a721a0afa07a..8dba62c17efe1804a90ab7a3c03383d25f6d40cb 100644 (file)
@@ -100,37 +100,6 @@ public enum ActionType {
         }
     },
 
-    /**
-     * The action info passed to this ActionType should have two actionValues string.
-     *
-     * The first string representing the metadata and the next string representing the metadatamask
-     */
-    /*
-    filter_equals {
-
-        @Override
-        public Action buildAction(ActionInfo actionInfo) {
-            String[] actionValues = actionInfo.getActionValues();
-            if (actionValues == null || actionValues.length != 2) {
-                throw new RuntimeException("Filter Equal set field action should have two arguments for metadata and metadata mask");
-            }
-            final BigInteger metaData = new BigInteger(actionValues[0]);
-            final BigInteger metadataMask = new BigInteger(actionValues[1]);
-            return new ActionBuilder()
-                .setAction(
-                    new ExperimenterActionTypeBuilder().setActionType(
-                        new FilterTypesActionBuilder()
-                            .setFilterType(EricFilterTypes.ERICFTEQUAL)
-                            .setMetadata(
-                                new MetadataBuilder().setMetadata(metaData).setMetadataMask(metadataMask).build())
-                        .build())//Filter Equal Action Type
-                    .build())//Experimenter Action
-                .setKey(new ActionKey(actionInfo.getActionKey()))
-                .build();
-        }
-    },
-    */
-
     pop_mpls {
         @Override
         public Action buildAction(ActionInfo actionInfo) {
@@ -160,28 +129,7 @@ public enum ActionType {
                     .setKey(new ActionKey(actionInfo.getActionKey())).build();
         }
     },
-/*
-    pop_vxlan {
-        @Override
-        public Action buildAction(ActionInfo actionInfo) {
-            return new ActionBuilder().setAction(
-                    new ExperimenterActionTypeBuilder().setActionType(
-                            new VxlanPopActionBuilder().build()).build())
-                    .setKey(new ActionKey(actionInfo.getActionKey())).build();
-        }
-    },
-    */
-/*
-    pop_gre {
-        @Override
-        public Action buildAction(ActionInfo actionInfo) {
-            return new ActionBuilder().setAction(
-                    new ExperimenterActionTypeBuilder().setActionType(
-                            new GrePopActionBuilder().build()).build())
-                    .setKey(new ActionKey(actionInfo.getActionKey())).build();
-        }
-    },
-*/
+
     push_mpls {
         @Override
         public Action buildAction(ActionInfo actionInfo) {
@@ -213,28 +161,7 @@ public enum ActionType {
                     .setKey(new ActionKey(actionInfo.getActionKey())).build();
         }
     },
-/*
-    push_vxlan {
-        @Override
-        public Action buildAction(ActionInfo actionInfo) {
-            return new ActionBuilder().setAction(
-                    new ExperimenterActionTypeBuilder().setActionType(
-                                    new VxlanPushActionBuilder().setEthType(0x0800).build()).build())
-                    .setKey(new ActionKey(actionInfo.getActionKey())).build();
-        }
-    },
-    */
-/*
-    push_gre {
-        @Override
-        public Action buildAction(ActionInfo actionInfo) {
-            return new ActionBuilder().setAction(
-                    new ExperimenterActionTypeBuilder().setActionType(
-                            new GrePushActionBuilder().setEthType(0x0800).build()).build())
-                    .setKey(new ActionKey(actionInfo.getActionKey())).build();
-        }
-    },
-*/
+
     set_field_mpls_label {
         @Override
         public Action buildAction(ActionInfo actionInfo) {
index fc08f8c584acff7194147cdb80e1b7032bd477a0..402abd831908ff08350017ae391b9903dace3968 100644 (file)
@@ -51,8 +51,6 @@ public class GroupEntity extends AbstractSwitchEntity {
             m_groupBuilder.setGroupName(getGroupName());
             m_groupBuilder.setGroupType(getGroupType());
             m_groupBuilder.setBuckets(MDSALUtil.buildBuckets(getBucketInfoList()));
-
-           // m_groupBuilder.setResyncFlag(getResyncFlag());
         }
 
         return m_groupBuilder;
index 96fd52f97e881bc696e04b7de15a5b617c9acc44..5ee42539a4425e771823edcfa750fce5bb11f998 100644 (file)
@@ -84,8 +84,7 @@ public enum InstructionType {
     clear_actions {
         @Override
         public Instruction buildInstruction(InstructionInfo instructionInfo, int instructionKey) {
-            // ClearActions clearActions = new
-            // ClearActionsBuilder().setAction(listAction).build();
+            
             ClearActionsCase clearActionsCase = new ClearActionsCaseBuilder().build();
 
             InstructionBuilder instructionBuilder = new InstructionBuilder();
diff --git a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/MDSALDataStoreUtils.java b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/MDSALDataStoreUtils.java
new file mode 100644 (file)
index 0000000..d52394e
--- /dev/null
@@ -0,0 +1,52 @@
+package org.opendaylight.vpnservice.mdsalutil;
+
+import com.google.common.base.Optional;
+import com.google.common.util.concurrent.FutureCallback;
+import com.google.common.util.concurrent.Futures;
+
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
+import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+public class MDSALDataStoreUtils {
+
+    public <T extends DataObject> Optional<T> read(final DataBroker broker,final LogicalDatastoreType datastoreType,
+            InstanceIdentifier<T> path) {
+
+        ReadOnlyTransaction tx = broker.newReadOnlyTransaction();
+
+        Optional<T> result = Optional.absent();
+        try {
+            result = tx.read(datastoreType, path).get();
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+
+        return result;
+    }
+
+   public static <T extends DataObject> void asyncWrite(final DataBroker broker, final LogicalDatastoreType datastoreType,
+       InstanceIdentifier<T> path, T data, FutureCallback<Void> callback) {
+       WriteTransaction tx = broker.newWriteOnlyTransaction();
+       tx.put(datastoreType, path, data, true);
+       Futures.addCallback(tx.submit(), callback);
+   }
+
+   public <T extends DataObject> void asyncUpdate(final DataBroker broker,final LogicalDatastoreType datastoreType,
+       InstanceIdentifier<T> path, T data, FutureCallback<Void> callback) {
+       WriteTransaction tx = broker.newWriteOnlyTransaction();
+       tx.merge(datastoreType, path, data, true);
+       Futures.addCallback(tx.submit(), callback);
+   }
+
+   public <T extends DataObject> void asyncRemove(final DataBroker broker,final LogicalDatastoreType datastoreType,
+       InstanceIdentifier<T> path, FutureCallback<Void> callback) {
+       WriteTransaction tx = broker.newWriteOnlyTransaction();
+       tx.delete(datastoreType, path);
+       Futures.addCallback(tx.submit(), callback);
+   }
+
+}
index 81cfd10df62b9de38c6974e42e66da932332dd08..fea7e624f69b7a55f19556fc85371f114b0a9737 100644 (file)
@@ -17,23 +17,18 @@ import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.LinkedBlockingQueue;
 
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowCookie;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowCookie;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowKey;
-//import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.GetFlowStatisticsFromFlowTableInput;
-//import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.GetFlowStatisticsFromFlowTableInputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowModFlags;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Instructions;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.InstructionsBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction;
-//import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GetGroupStatisticsInput;
-//import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GetGroupStatisticsInputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.BucketId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupTypes;
@@ -65,23 +60,12 @@ import com.google.common.primitives.Ints;
 public class MDSALUtil {
 
     public static final String NODE_PREFIX = "openflow";
-    public static final String SEPARATOR = ":"; // TODO name separtor correctly
-
+    public static final String SEPARATOR = ":";
     private static final Buckets EMPTY_Buckets = new BucketsBuilder().build();
     private static final Instructions EMPTY_Instructions = new InstructionsBuilder().setInstruction(
             new ArrayList<Instruction>()).build();
     private static final Match EMPTY_Matches = new MatchBuilder().build();
 
-    // public static Map<Long, SyncStatus> syncStatusMap = new
-    // ConcurrentHashMap<Long, SyncStatus>();
-    public static Map<Long, LinkedBlockingQueue<Object>> lportMap = new ConcurrentHashMap<Long, LinkedBlockingQueue<Object>>();
-    public static Map<Long, LinkedBlockingQueue<Object>> lportDownMap = new ConcurrentHashMap<Long, LinkedBlockingQueue<Object>>();
-    // public static Map<String, Boolean> ofRefMap = new
-    // ConcurrentHashMap<String, Boolean>();
-    public static Map<Long, Map<String, Boolean>> ofRefMapDpn = new ConcurrentHashMap<Long, Map<String, Boolean>>();
-    public static Map<Long, Map<Integer, String>> ofRefGroupMapDpn = new ConcurrentHashMap<Long, Map<Integer, String>>();
-    public static Map<Long, Map<String, String>> ofRefFlowMapDpn = new ConcurrentHashMap<Long, Map<String, String>>();
-
     public static FlowEntity buildFlowEntity(long dpnId, short tableId, String flowId, int priority, String flowName,
             int idleTimeOut, int hardTimeOut, BigInteger cookie, List<MatchInfo> listMatchInfo,
             List<InstructionInfo> listInstructionInfo) {
@@ -101,19 +85,6 @@ public class MDSALUtil {
         return flowEntity;
     }
 
-    // TODO FIX ME
-    /*
-    public static Flow buildResyncFlow(short tableId, String flowId, int priority, String flowName, int idleTimeOut,
-            int hardTimeOut, BigInteger cookie, List<MatchInfo> listMatchInfo,
-            List<InstructionInfo> listInstructionInfo, boolean isStrict, boolean isResync) {
-        FlowKey key = new FlowKey(new FlowId(flowId));
-        return new FlowBuilder().setMatch(buildMatches(listMatchInfo)).setKey(key)
-                .setPriority(Integer.valueOf(priority)).setInstructions(buildInstructions(listInstructionInfo))
-                .setBarrier(false).setInstallHw(true).setHardTimeout(hardTimeOut).setIdleTimeout(idleTimeOut)
-                .setFlowName(flowName).setTableId(Short.valueOf(tableId)).setStrict(isStrict)
-                .setCookie(new FlowCookie(cookie)).setResyncFlag(isResync).build();
-    }
-    */
     // TODO: CHECK IF THIS IS USED
     public static Flow buildFlow(short tableId, String flowId, int priority, String flowName, int idleTimeOut,
             int hardTimeOut, BigInteger cookie, List<MatchInfo> listMatchInfo, List<InstructionInfo> listInstructionInfo) {
@@ -132,32 +103,6 @@ public class MDSALUtil {
                 .setCookie(new FlowCookie(cookie)).build();
     }
 
- // TODO FIX ME
-    /*
-    public static Flow buildResyncFlow(short tableId, String flowId, int priority, String flowName, int idleTimeOut,
-            int hardTimeOut, BigInteger cookie, List<MatchInfo> listMatchInfo,
-            List<InstructionInfo> listInstructionInfo, boolean isStrict, boolean isResync, boolean isSendFlowRem) {
-        FlowKey key = new FlowKey(new FlowId(flowId));
-        return new FlowBuilder().setMatch(buildMatches(listMatchInfo)).setKey(key)
-                .setPriority(Integer.valueOf(priority)).setInstructions(buildInstructions(listInstructionInfo))
-                .setBarrier(false).setInstallHw(true).setHardTimeout(hardTimeOut).setIdleTimeout(idleTimeOut)
-                .setFlowName(flowName).setTableId(Short.valueOf(tableId)).setStrict(isStrict)
-                .setCookie(new FlowCookie(cookie))
-                .setFlags(new FlowModFlags(false, false, false, false, isSendFlowRem)).setResyncFlag(isResync).build();
-
-    }
-    */
-/*
-    public static Flow buildFlow(short tableId, String flowId, int priority, String flowName, int idleTimeOut,
-            int hardTimeOut, BigInteger cookie, List<MatchInfo> listMatchInfo,
-            List<InstructionInfo> listInstructionInfo, boolean isStrict, boolean isSendFlowRem) {
-        return buildResyncFlow(tableId, flowId, priority, flowName, idleTimeOut, hardTimeOut, cookie, listMatchInfo,
-                listInstructionInfo, isStrict, false, isSendFlowRem);
-
-    }
-*/
-
-
     public static GroupEntity buildGroupEntity(long dpnId, long groupId, String groupName, GroupTypes groupType,
             List<BucketInfo> listBucketInfo) {
 
@@ -171,41 +116,6 @@ public class MDSALUtil {
         return groupEntity;
     }
 
-    // FIXME -- AS ReSync is not required for ODL VPN Service
-    /*
-    public static Group buildGroup(long groupId, String groupName, GroupTypes groupType, List<BucketInfo> listBucketInfo) {
-        return buildGroup(groupId, groupName, groupType, listBucketInfo, false);
-    }
-
-    public static Group buildGroup(long groupId, String groupName, GroupTypes groupType,
-            List<BucketInfo> listBucketInfo, boolean isResync) {
-        return new GroupBuilder().setBuckets(buildBuckets(listBucketInfo)).setKey(new GroupKey(new GroupId(groupId)))
-                .setBarrier(false).setGroupId(new GroupId(Long.valueOf(groupId))).setGroupType(groupType)
-                .setGroupName(groupName).setResyncFlag(isResync).build();
-    }
-*/
-    // Removing --Missing Constraint
-    /*
-    public static GetFlowStatisticsFromFlowTableInput buildGetFlowStatisticsFromFlowTableInput(short tableId,
-            List<MatchInfo> listMatchInfo, long dpnId) {
-        return new GetFlowStatisticsFromFlowTableInputBuilder()
-                .setTableId(Short.valueOf(tableId))
-                .setMatch(buildMatches(listMatchInfo))
-                .setNode(
-                        new NodeRef(InstanceIdentifier.builder(Nodes.class)
-                                .child(Node.class, new NodeKey(new NodeId("openflow:" + dpnId))).toInstance())).build();
-
-    }
-
-    public static GetGroupStatisticsInput buildGetGroupStatistics(long groupId, long dpnId) {
-        return new GetGroupStatisticsInputBuilder()
-                .setGroupId(new GroupId(Long.valueOf(groupId)))
-                .setNode(
-                        new NodeRef(InstanceIdentifier.builder(Nodes.class)
-                                .child(Node.class, new NodeKey(new NodeId("openflow:" + dpnId))).toInstance())).build();
-    }
-    */
-
     public static TransmitPacketInput getPacketOutDefault(List<ActionInfo> actionInfos, byte[] payload, long dpnId) {
         return new TransmitPacketInputBuilder()
                 .setAction(buildActions(actionInfos))
index f38acf70f89fec17f55bca292a4873ffc873d4c2..178ba18cf232b856f2aac5c4b08707fda97e17fc 100644 (file)
@@ -55,596 +55,562 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026
 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TunnelId;
 
 public enum MatchFieldType {
-       eth_src {
-               @Override
-               protected Class<? extends MatchField> getMatchType() {
-                       return EthSrc.class;
-               }
-
-               @Override
-               public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder
-                                       .get(EthernetMatchBuilder.class);
-
-                       if (ethernetMatchBuilder == null) {
-                               ethernetMatchBuilder = new EthernetMatchBuilder();
-                               mapMatchBuilder.put(EthernetMatchBuilder.class, ethernetMatchBuilder);
-                       }
-
-                       ethernetMatchBuilder.setEthernetSource(new EthernetSourceBuilder().setAddress(
-                                       new MacAddress(matchInfo.getStringMatchValues()[0])).build());
-               }
-
-               @Override
-               public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder
-                                       .remove(EthernetMatchBuilder.class);
-
-                       if (ethernetMatchBuilder != null) {
-                               matchBuilderInOut.setEthernetMatch(ethernetMatchBuilder.build());
-                       }
-               }
-       },
-
-       eth_dst {
-               @Override
-               protected Class<? extends MatchField> getMatchType() {
-                       return EthDst.class;
-               }
-
-               @Override
-               public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder
-                                       .get(EthernetMatchBuilder.class);
-
-                       if (ethernetMatchBuilder == null) {
-                               ethernetMatchBuilder = new EthernetMatchBuilder();
-                               mapMatchBuilder.put(EthernetMatchBuilder.class, ethernetMatchBuilder);
-                       }
-
-                       ethernetMatchBuilder.setEthernetDestination(new EthernetDestinationBuilder().setAddress(
-                                       new MacAddress(matchInfo.getStringMatchValues()[0])).build());
-               }
-
-               @Override
-               public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder
-                                       .remove(EthernetMatchBuilder.class);
-
-                       if (ethernetMatchBuilder != null) {
-                               matchBuilderInOut.setEthernetMatch(ethernetMatchBuilder.build());
-                       }
-               }
-       },
-
-       eth_type {
-               @Override
-               protected Class<? extends MatchField> getMatchType() {
-                       return EthType.class;
-               }
-
-               @Override
-               public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder
-                                       .get(EthernetMatchBuilder.class);
-
-                       if (ethernetMatchBuilder == null) {
-                               ethernetMatchBuilder = new EthernetMatchBuilder();
-                               mapMatchBuilder.put(EthernetMatchBuilder.class, ethernetMatchBuilder);
-                       }
-
-                       ethernetMatchBuilder.setEthernetType(new EthernetTypeBuilder().setType(
-                                       new EtherType(matchInfo.getMatchValues()[0])).build());
-               }
-
-               @Override
-               public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder
-                                       .remove(EthernetMatchBuilder.class);
-
-                       if (ethernetMatchBuilder != null) {
-                               matchBuilderInOut.setEthernetMatch(ethernetMatchBuilder.build());
-                       }
-               }
-       },
-
-       in_port {
-               @Override
-               protected Class<? extends MatchField> getMatchType() {
-                       return InPort.class;
-               }
-
-               @Override
-               public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-               }
-
-               @Override
-               public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       // NodeConnectorId format -> openflow:<dpnId>:<portId>
-                       StringBuffer nodeConnectorId = new StringBuffer().append("openflow:").append(matchInfo.getMatchValues()[0])
-                       .append(':').append(matchInfo.getMatchValues()[1]);
-                       matchBuilderInOut.setInPort(new NodeConnectorId(nodeConnectorId.toString()));
-               }
-       },
-
-       ip_proto {
-               @Override
-               protected Class<? extends MatchField> getMatchType() {
-                       return IpProto.class;
-               }
-
-               @Override
-               public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       IpMatchBuilder ipMatchBuilder = (IpMatchBuilder) mapMatchBuilder.get(IpMatchBuilder.class);
-
-                       if (ipMatchBuilder == null) {
-                               ipMatchBuilder = new IpMatchBuilder();
-                               mapMatchBuilder.put(IpMatchBuilder.class, ipMatchBuilder);
-                       }
-
-                       ipMatchBuilder.setIpProtocol(Short.valueOf((short) matchInfo.getMatchValues()[0])).build();
-               }
-
-               @Override
-               public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       IpMatchBuilder ipMatchBuilder = (IpMatchBuilder) mapMatchBuilder.remove(IpMatchBuilder.class);
-
-                       if (ipMatchBuilder != null) {
-                               matchBuilderInOut.setIpMatch(ipMatchBuilder.build());
-                       }
-               }
-       },
-
-       ipv4_dst {
-               @Override
-               protected Class<? extends MatchField> getMatchType() {
-                       return Ipv4Dst.class;
-               }
-
-               @Override
-               public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       Ipv4MatchBuilder ipv4MatchBuilder = (Ipv4MatchBuilder) mapMatchBuilder.get(Ipv4MatchBuilder.class);
-
-                       if (ipv4MatchBuilder == null) {
-                               ipv4MatchBuilder = new Ipv4MatchBuilder();
-                               mapMatchBuilder.put(Ipv4MatchBuilder.class, ipv4MatchBuilder);
-                       }
-
-                       long[] prefix = matchInfo.getMatchValues();
-                       ipv4MatchBuilder.setIpv4Destination(new Ipv4Prefix(MDSALUtil.longToIp(prefix[0], prefix[1]))).build();
-               }
-
-               @Override
-               public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       Ipv4MatchBuilder ipv4MatchBuilder = (Ipv4MatchBuilder) mapMatchBuilder.remove(Ipv4MatchBuilder.class);
-
-                       if (ipv4MatchBuilder != null) {
-                               matchBuilderInOut.setLayer3Match(ipv4MatchBuilder.build());
-                       }
-               }
-       },
-
-       ipv4_src {
-               @Override
-               protected Class<? extends MatchField> getMatchType() {
-                       return Ipv4Src.class;
-               }
-
-               @Override
-               public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       Ipv4MatchBuilder ipv4MatchBuilder = (Ipv4MatchBuilder) mapMatchBuilder.get(Ipv4MatchBuilder.class);
-
-                       if (ipv4MatchBuilder == null) {
-                               ipv4MatchBuilder = new Ipv4MatchBuilder();
-                               mapMatchBuilder.put(Ipv4MatchBuilder.class, ipv4MatchBuilder);
-                       }
-
-                       long[] prefix = matchInfo.getMatchValues();
-                       ipv4MatchBuilder.setIpv4Source(new Ipv4Prefix(MDSALUtil.longToIp(prefix[0], prefix[1]))).build();
-               }
-
-               @Override
-               public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       Ipv4MatchBuilder ipv4MatchBuilder = (Ipv4MatchBuilder) mapMatchBuilder.remove(Ipv4MatchBuilder.class);
-
-                       if (ipv4MatchBuilder != null) {
-                               matchBuilderInOut.setLayer3Match(ipv4MatchBuilder.build());
-                       }
-               }
-       },
-
-       arp_op {
-               @Override
-               protected Class<? extends MatchField> getMatchType() {
-                       return ArpOp.class;
-               }
-
-               @Override
-               public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.get(ArpMatchBuilder.class);
-
-                       if (arpMatchBuilder == null) {
-                               arpMatchBuilder = new ArpMatchBuilder();
-                               mapMatchBuilder.put(ArpMatchBuilder.class, arpMatchBuilder);
-                       }
-
-                       arpMatchBuilder.setArpOp(Integer.valueOf((int) matchInfo.getMatchValues()[0]));
-               }
-
-               @Override
-               public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.remove(ArpMatchBuilder.class);
-
-                       if (arpMatchBuilder != null) {
-                               matchBuilderInOut.setLayer3Match(arpMatchBuilder.build());
-                       }
-               }
-       },
-
-       arp_tpa {
-               @Override
-               protected Class<? extends MatchField> getMatchType() {
-                       return ArpTpa.class;
-               }
-
-               @Override
-               public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.get(ArpMatchBuilder.class);
-
-                       if (arpMatchBuilder == null) {
-                               arpMatchBuilder = new ArpMatchBuilder();
-                               mapMatchBuilder.put(ArpMatchBuilder.class, arpMatchBuilder);
-                       }
-
-                       long[] prefix = matchInfo.getMatchValues();
-                       arpMatchBuilder.setArpTargetTransportAddress(new Ipv4Prefix(MDSALUtil.longToIp(prefix[0], prefix[1])));
-               }
-
-               @Override
-               public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.remove(ArpMatchBuilder.class);
-
-                       if (arpMatchBuilder != null) {
-                               matchBuilderInOut.setLayer3Match(arpMatchBuilder.build());
-                       }
-               }
-       },
-
-       arp_spa {
-               @Override
-               protected Class<? extends MatchField> getMatchType() {
-                       return ArpSpa.class;
-               }
-
-               @Override
-               public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.get(ArpMatchBuilder.class);
-
-                       if (arpMatchBuilder == null) {
-                               arpMatchBuilder = new ArpMatchBuilder();
-                               mapMatchBuilder.put(ArpMatchBuilder.class, arpMatchBuilder);
-                       }
-
-                       long[] prefix = matchInfo.getMatchValues();
-                       arpMatchBuilder.setArpSourceTransportAddress(new Ipv4Prefix(MDSALUtil.longToIp(prefix[0], prefix[1])));
-               }
-
-               @Override
-               public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.remove(ArpMatchBuilder.class);
-
-                       if (arpMatchBuilder != null) {
-                               matchBuilderInOut.setLayer3Match(arpMatchBuilder.build());
-                       }
-               }
-       },
-
-       metadata {
-               @Override
-               protected Class<? extends MatchField> getMatchType() {
-                       return Metadata.class;
-               }
-
-               @Override
-               public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       MetadataBuilder metadataBuilder = (MetadataBuilder) mapMatchBuilder.get(MetadataBuilder.class);
-
-                       if (metadataBuilder == null) {
-                               metadataBuilder = new MetadataBuilder();
-                               mapMatchBuilder.put(MetadataBuilder.class, metadataBuilder);
-                       }
-
-                       BigInteger[] metadataValues = matchInfo.getBigMatchValues();
-                       metadataBuilder.setMetadata(metadataValues[0]).setMetadataMask(metadataValues[1]).build();
-               }
-
-               @Override
-               public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       MetadataBuilder metadataBuilder = (MetadataBuilder) mapMatchBuilder.remove(MetadataBuilder.class);
-
-                       if (metadataBuilder != null) {
-                               matchBuilderInOut.setMetadata(metadataBuilder.build());
-                       }
-               }
-       },
-
-       mpls_label {
-               @Override
-               protected Class<? extends MatchField> getMatchType() {
-                       return MplsLabel.class;
-               }
-
-               @Override
-               public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       ProtocolMatchFieldsBuilder protocolMatchFieldsBuilder = (ProtocolMatchFieldsBuilder) mapMatchBuilder
-                                       .get(ProtocolMatchFieldsBuilder.class);
-
-                       if (protocolMatchFieldsBuilder == null) {
-                               protocolMatchFieldsBuilder = new ProtocolMatchFieldsBuilder();
-                               mapMatchBuilder.put(ProtocolMatchFieldsBuilder.class, protocolMatchFieldsBuilder);
-                       }
-
-                       protocolMatchFieldsBuilder.setMplsLabel(Long.valueOf(matchInfo.getStringMatchValues()[0])).build();
-               }
-
-               @Override
-               public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       ProtocolMatchFieldsBuilder protocolMatchFieldsBuilder = (ProtocolMatchFieldsBuilder) mapMatchBuilder
-                                       .remove(ProtocolMatchFieldsBuilder.class);
-
-                       if (protocolMatchFieldsBuilder != null) {
-                               matchBuilderInOut.setProtocolMatchFields(protocolMatchFieldsBuilder.build());
-                       }
-               }
-       },
-
-       pbb_isid {
-               @Override
-               protected Class<? extends MatchField> getMatchType() {
-                       return PbbIsid.class;
-               }
-
-               @Override
-               public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       ProtocolMatchFieldsBuilder protocolMatchFieldsBuilder = (ProtocolMatchFieldsBuilder) mapMatchBuilder
-                                       .get(ProtocolMatchFieldsBuilder.class);
-
-                       if (protocolMatchFieldsBuilder == null) {
-                               protocolMatchFieldsBuilder = new ProtocolMatchFieldsBuilder();
-                               mapMatchBuilder.put(ProtocolMatchFieldsBuilder.class, protocolMatchFieldsBuilder);
-                       }
-
-                       protocolMatchFieldsBuilder.setPbb(new PbbBuilder().setPbbIsid(Long.valueOf(matchInfo.getMatchValues()[0]))
-                                       .build());
-               }
-
-               @Override
-               public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       ProtocolMatchFieldsBuilder protocolMatchFieldsBuilder = (ProtocolMatchFieldsBuilder) mapMatchBuilder
-                                       .remove(ProtocolMatchFieldsBuilder.class);
-
-                       if (protocolMatchFieldsBuilder != null) {
-                               matchBuilderInOut.setProtocolMatchFields(protocolMatchFieldsBuilder.build());
-                       }
-               }
-       },
-
-       tcp_dst {
-               @Override
-               protected Class<? extends MatchField> getMatchType() {
-                       return TcpDst.class;
-               }
-
-               @Override
-               public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       TcpMatchBuilder tcpMatchBuilder = (TcpMatchBuilder) mapMatchBuilder.get(TcpMatchBuilder.class);
-
-                       if (tcpMatchBuilder == null) {
-                               tcpMatchBuilder = new TcpMatchBuilder();
-                               mapMatchBuilder.put(TcpMatchBuilder.class, tcpMatchBuilder);
-                       }
-
-                       tcpMatchBuilder.setTcpDestinationPort(new PortNumber(Integer.valueOf((int) matchInfo.getMatchValues()[0])));
-               }
-
-               @Override
-               public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       TcpMatchBuilder tcpMatchBuilder = (TcpMatchBuilder) mapMatchBuilder.remove(TcpMatchBuilder.class);
-
-                       if (tcpMatchBuilder != null) {
-                               matchBuilderInOut.setLayer4Match(tcpMatchBuilder.build());
-                       }
-               }
-       },
-
-       tcp_src {
-               @Override
-               protected Class<? extends MatchField> getMatchType() {
-                       return TcpSrc.class;
-               }
-
-               @Override
-               public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       TcpMatchBuilder tcpMatchBuilder = (TcpMatchBuilder) mapMatchBuilder.get(TcpMatchBuilder.class);
-
-                       if (tcpMatchBuilder == null) {
-                               tcpMatchBuilder = new TcpMatchBuilder();
-                               mapMatchBuilder.put(TcpMatchBuilder.class, tcpMatchBuilder);
-                       }
-
-                       tcpMatchBuilder.setTcpSourcePort(new PortNumber(Integer.valueOf((int) matchInfo.getMatchValues()[0])));
-               }
-
-               @Override
-               public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       TcpMatchBuilder tcpMatchBuilder = (TcpMatchBuilder) mapMatchBuilder.remove(TcpMatchBuilder.class);
-
-                       if (tcpMatchBuilder != null) {
-                               matchBuilderInOut.setLayer4Match(tcpMatchBuilder.build());
-                       }
-               }
-       },
-
-       udp_dst {
-               @Override
-               protected Class<? extends MatchField> getMatchType() {
-                       return UdpDst.class;
-               }
-
-               @Override
-               public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       UdpMatchBuilder udpMatchBuilder = (UdpMatchBuilder) mapMatchBuilder.get(UdpMatchBuilder.class);
-
-                       if (udpMatchBuilder == null) {
-                               udpMatchBuilder = new UdpMatchBuilder();
-                               mapMatchBuilder.put(UdpMatchBuilder.class, udpMatchBuilder);
-                       }
-
-                       udpMatchBuilder.setUdpDestinationPort(new PortNumber(Integer.valueOf((int) matchInfo.getMatchValues()[0])));
-               }
-
-               @Override
-               public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       UdpMatchBuilder udpMatchBuilder = (UdpMatchBuilder) mapMatchBuilder.remove(UdpMatchBuilder.class);
-
-                       if (udpMatchBuilder != null) {
-                               matchBuilderInOut.setLayer4Match(udpMatchBuilder.build());
-                       }
-               }
-       },
-
-       udp_src {
-               @Override
-               protected Class<? extends MatchField> getMatchType() {
-                       return UdpSrc.class;
-               }
-
-               @Override
-               public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       UdpMatchBuilder udpMatchBuilder = (UdpMatchBuilder) mapMatchBuilder.get(UdpMatchBuilder.class);
-
-                       if (udpMatchBuilder == null) {
-                               udpMatchBuilder = new UdpMatchBuilder();
-                               mapMatchBuilder.put(UdpMatchBuilder.class, udpMatchBuilder);
-                       }
-
-                       udpMatchBuilder.setUdpSourcePort(new PortNumber(Integer.valueOf((int) matchInfo.getMatchValues()[0])));
-               }
-
-               @Override
-               public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       UdpMatchBuilder udpMatchBuilder = (UdpMatchBuilder) mapMatchBuilder.remove(UdpMatchBuilder.class);
-
-                       if (udpMatchBuilder != null) {
-                               matchBuilderInOut.setLayer4Match(udpMatchBuilder.build());
-                       }
-               }
-       },
-       tunnel_id {
-               @Override
-               public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       TunnelBuilder tunnelBuilder = (TunnelBuilder) mapMatchBuilder.get(TunnelBuilder.class);
-
-                       if (tunnelBuilder == null) {
-                               tunnelBuilder = new TunnelBuilder();
-                               mapMatchBuilder.put(TunnelBuilder.class, tunnelBuilder);
-                       }
-
-                       BigInteger[] tunnelIdValues = matchInfo.getBigMatchValues();
-                       tunnelBuilder.setTunnelId(tunnelIdValues[0]).setTunnelMask(tunnelIdValues[1]).build();
-               }
-
-               @Override
-               public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       TunnelBuilder tunnelBuilder = (TunnelBuilder) mapMatchBuilder.remove(TunnelBuilder.class);
-
-                       if (tunnelBuilder != null) {
-                               matchBuilderInOut.setTunnel(tunnelBuilder.build());
-                       }
-               }
-
-               @Override
-               protected Class<? extends MatchField> getMatchType() {
-                       return TunnelId.class;
-               }
-
-       },
-
-       vlan_vid {
-               @Override
-               protected Class<? extends MatchField> getMatchType() {
-                       return VlanVid.class;
-               }
-
-               @Override
-               public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       VlanMatchBuilder vlanMatchBuilder = (VlanMatchBuilder) mapMatchBuilder.get(VlanMatchBuilder.class);
-
-                       if (vlanMatchBuilder == null) {
-                               vlanMatchBuilder = new VlanMatchBuilder();
-                               mapMatchBuilder.put(VlanMatchBuilder.class, vlanMatchBuilder);
-                       }
-
-                       vlanMatchBuilder.setVlanId(new VlanIdBuilder()
-                       .setVlanId(new VlanId(Integer.valueOf((int) matchInfo.getMatchValues()[0])))
-                       .setVlanIdPresent(((int) matchInfo.getMatchValues()[0] == 0) ? Boolean.FALSE : Boolean.TRUE)
-                       .build());
-               }
-
-               @Override
-               public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       VlanMatchBuilder vlanMatchBuilder = (VlanMatchBuilder) mapMatchBuilder.remove(VlanMatchBuilder.class);
-
-                       if (vlanMatchBuilder != null) {
-                               matchBuilderInOut.setVlanMatch(vlanMatchBuilder.build());
-                       }
-               }
-       };
-
-       /*
-       public SetFieldMatch buildSetFieldMatch(XtensionType xtype) {
-               if (xtype == null || xtype.getMatchMaskType() == 
-                               SalOfaMatchMaskType.OFPMMNOMASK) {
-                       return new 
-                                       SetFieldMatchBuilder().setHasMask(false).setMatchType(getMatchType())
-                                       .setSalOxmClass(SalOpenflowBasicClass.class).build();
-               }
-
-               return new SetFieldMatchBuilder()
-               .setHasMask(true)
-               .setMatchType(getMatchType())
-               .setSalOxmClass(SalOpenflowBasicClass.class)
-               .addAugmentation(
-                               ExperimenterSetFieldMatch.class,
-                               new 
-                               ExperimenterSetFieldMatchBuilder().setMatchMaskType(xtype.getMatchMaskType())
-                               .setTlvMatchMask(xtype.getByteBuf()).build()).build();
-
-
-       }
-*/
-
-       // New one for ODL without the Extension --CHECK
-       /*
-       public SetFieldMatch buildSetFieldMatch() {
-               
-               return new SetFieldMatchBuilder().setHasMask(false).setMatchType(getMatchType())
-                                       .setSalOxmClass(SalOpenflowBasicClass.class).build();
-                                       
-               return null;
-               }
-*/
-               
-       
-       public abstract void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder);
-
-       public abstract void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo,
-                       Map<Class<?>, Object> mapMatchBuilder);
-
-       protected abstract Class<? extends MatchField> getMatchType();
-
-       protected boolean hasMatchFieldMask() {
-               // Override this to return true
-                               return false;
-       }
+    eth_src {
+        @Override
+        protected Class<? extends MatchField> getMatchType() {
+            return EthSrc.class;
+        }
+
+        @Override
+        public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder
+                    .get(EthernetMatchBuilder.class);
+
+            if (ethernetMatchBuilder == null) {
+                ethernetMatchBuilder = new EthernetMatchBuilder();
+                mapMatchBuilder.put(EthernetMatchBuilder.class, ethernetMatchBuilder);
+            }
+
+            ethernetMatchBuilder.setEthernetSource(new EthernetSourceBuilder().setAddress(
+                    new MacAddress(matchInfo.getStringMatchValues()[0])).build());
+        }
+
+        @Override
+        public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder
+                    .remove(EthernetMatchBuilder.class);
+
+            if (ethernetMatchBuilder != null) {
+                matchBuilderInOut.setEthernetMatch(ethernetMatchBuilder.build());
+            }
+        }
+    },
+
+    eth_dst {
+        @Override
+        protected Class<? extends MatchField> getMatchType() {
+            return EthDst.class;
+        }
+
+        @Override
+        public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder
+                    .get(EthernetMatchBuilder.class);
+
+            if (ethernetMatchBuilder == null) {
+                ethernetMatchBuilder = new EthernetMatchBuilder();
+                mapMatchBuilder.put(EthernetMatchBuilder.class, ethernetMatchBuilder);
+            }
+
+            ethernetMatchBuilder.setEthernetDestination(new EthernetDestinationBuilder().setAddress(
+                    new MacAddress(matchInfo.getStringMatchValues()[0])).build());
+        }
+
+        @Override
+        public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder
+                    .remove(EthernetMatchBuilder.class);
+
+            if (ethernetMatchBuilder != null) {
+                matchBuilderInOut.setEthernetMatch(ethernetMatchBuilder.build());
+            }
+        }
+    },
+
+    eth_type {
+        @Override
+        protected Class<? extends MatchField> getMatchType() {
+            return EthType.class;
+        }
+
+        @Override
+        public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder
+                    .get(EthernetMatchBuilder.class);
+
+            if (ethernetMatchBuilder == null) {
+                ethernetMatchBuilder = new EthernetMatchBuilder();
+                mapMatchBuilder.put(EthernetMatchBuilder.class, ethernetMatchBuilder);
+            }
+
+            ethernetMatchBuilder.setEthernetType(new EthernetTypeBuilder().setType(
+                    new EtherType(matchInfo.getMatchValues()[0])).build());
+        }
+
+        @Override
+        public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder
+                    .remove(EthernetMatchBuilder.class);
+
+            if (ethernetMatchBuilder != null) {
+                matchBuilderInOut.setEthernetMatch(ethernetMatchBuilder.build());
+            }
+        }
+    },
+
+    in_port {
+        @Override
+        protected Class<? extends MatchField> getMatchType() {
+            return InPort.class;
+        }
+
+        @Override
+        public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+        }
+
+        @Override
+        public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+
+            StringBuffer nodeConnectorId = new StringBuffer().append("openflow:").append(matchInfo.getMatchValues()[0])
+            .append(':').append(matchInfo.getMatchValues()[1]);
+            matchBuilderInOut.setInPort(new NodeConnectorId(nodeConnectorId.toString()));
+        }
+    },
+
+    ip_proto {
+        @Override
+        protected Class<? extends MatchField> getMatchType() {
+            return IpProto.class;
+        }
+
+        @Override
+        public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            IpMatchBuilder ipMatchBuilder = (IpMatchBuilder) mapMatchBuilder.get(IpMatchBuilder.class);
+
+            if (ipMatchBuilder == null) {
+                ipMatchBuilder = new IpMatchBuilder();
+                mapMatchBuilder.put(IpMatchBuilder.class, ipMatchBuilder);
+            }
+
+            ipMatchBuilder.setIpProtocol(Short.valueOf((short) matchInfo.getMatchValues()[0])).build();
+        }
+
+        @Override
+        public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            IpMatchBuilder ipMatchBuilder = (IpMatchBuilder) mapMatchBuilder.remove(IpMatchBuilder.class);
+
+            if (ipMatchBuilder != null) {
+                matchBuilderInOut.setIpMatch(ipMatchBuilder.build());
+            }
+        }
+    },
+
+    ipv4_dst {
+        @Override
+        protected Class<? extends MatchField> getMatchType() {
+            return Ipv4Dst.class;
+        }
+
+        @Override
+        public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            Ipv4MatchBuilder ipv4MatchBuilder = (Ipv4MatchBuilder) mapMatchBuilder.get(Ipv4MatchBuilder.class);
+
+            if (ipv4MatchBuilder == null) {
+                ipv4MatchBuilder = new Ipv4MatchBuilder();
+                mapMatchBuilder.put(Ipv4MatchBuilder.class, ipv4MatchBuilder);
+            }
+
+            long[] prefix = matchInfo.getMatchValues();
+            ipv4MatchBuilder.setIpv4Destination(new Ipv4Prefix(MDSALUtil.longToIp(prefix[0], prefix[1]))).build();
+        }
+
+        @Override
+        public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            Ipv4MatchBuilder ipv4MatchBuilder = (Ipv4MatchBuilder) mapMatchBuilder.remove(Ipv4MatchBuilder.class);
+
+            if (ipv4MatchBuilder != null) {
+                matchBuilderInOut.setLayer3Match(ipv4MatchBuilder.build());
+            }
+        }
+    },
+
+    ipv4_src {
+        @Override
+        protected Class<? extends MatchField> getMatchType() {
+            return Ipv4Src.class;
+        }
+
+        @Override
+        public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            Ipv4MatchBuilder ipv4MatchBuilder = (Ipv4MatchBuilder) mapMatchBuilder.get(Ipv4MatchBuilder.class);
+
+            if (ipv4MatchBuilder == null) {
+                ipv4MatchBuilder = new Ipv4MatchBuilder();
+                mapMatchBuilder.put(Ipv4MatchBuilder.class, ipv4MatchBuilder);
+            }
+
+            long[] prefix = matchInfo.getMatchValues();
+            ipv4MatchBuilder.setIpv4Source(new Ipv4Prefix(MDSALUtil.longToIp(prefix[0], prefix[1]))).build();
+        }
+
+        @Override
+        public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            Ipv4MatchBuilder ipv4MatchBuilder = (Ipv4MatchBuilder) mapMatchBuilder.remove(Ipv4MatchBuilder.class);
+
+            if (ipv4MatchBuilder != null) {
+                matchBuilderInOut.setLayer3Match(ipv4MatchBuilder.build());
+            }
+        }
+    },
+
+    arp_op {
+        @Override
+        protected Class<? extends MatchField> getMatchType() {
+            return ArpOp.class;
+        }
+
+        @Override
+        public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.get(ArpMatchBuilder.class);
+
+            if (arpMatchBuilder == null) {
+                arpMatchBuilder = new ArpMatchBuilder();
+                mapMatchBuilder.put(ArpMatchBuilder.class, arpMatchBuilder);
+            }
+
+            arpMatchBuilder.setArpOp(Integer.valueOf((int) matchInfo.getMatchValues()[0]));
+        }
+
+        @Override
+        public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.remove(ArpMatchBuilder.class);
+
+            if (arpMatchBuilder != null) {
+                matchBuilderInOut.setLayer3Match(arpMatchBuilder.build());
+            }
+        }
+    },
+
+    arp_tpa {
+        @Override
+        protected Class<? extends MatchField> getMatchType() {
+            return ArpTpa.class;
+        }
+
+        @Override
+        public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.get(ArpMatchBuilder.class);
+
+            if (arpMatchBuilder == null) {
+                arpMatchBuilder = new ArpMatchBuilder();
+                mapMatchBuilder.put(ArpMatchBuilder.class, arpMatchBuilder);
+            }
+
+            long[] prefix = matchInfo.getMatchValues();
+            arpMatchBuilder.setArpTargetTransportAddress(new Ipv4Prefix(MDSALUtil.longToIp(prefix[0], prefix[1])));
+        }
+
+        @Override
+        public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.remove(ArpMatchBuilder.class);
+
+            if (arpMatchBuilder != null) {
+                matchBuilderInOut.setLayer3Match(arpMatchBuilder.build());
+            }
+        }
+    },
+
+    arp_spa {
+        @Override
+        protected Class<? extends MatchField> getMatchType() {
+            return ArpSpa.class;
+        }
+
+        @Override
+        public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.get(ArpMatchBuilder.class);
+
+            if (arpMatchBuilder == null) {
+                arpMatchBuilder = new ArpMatchBuilder();
+                mapMatchBuilder.put(ArpMatchBuilder.class, arpMatchBuilder);
+            }
+
+            long[] prefix = matchInfo.getMatchValues();
+            arpMatchBuilder.setArpSourceTransportAddress(new Ipv4Prefix(MDSALUtil.longToIp(prefix[0], prefix[1])));
+        }
+
+        @Override
+        public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.remove(ArpMatchBuilder.class);
+
+            if (arpMatchBuilder != null) {
+                matchBuilderInOut.setLayer3Match(arpMatchBuilder.build());
+            }
+        }
+    },
+
+    metadata {
+        @Override
+        protected Class<? extends MatchField> getMatchType() {
+            return Metadata.class;
+        }
+
+        @Override
+        public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            MetadataBuilder metadataBuilder = (MetadataBuilder) mapMatchBuilder.get(MetadataBuilder.class);
+
+            if (metadataBuilder == null) {
+                metadataBuilder = new MetadataBuilder();
+                mapMatchBuilder.put(MetadataBuilder.class, metadataBuilder);
+            }
+
+            BigInteger[] metadataValues = matchInfo.getBigMatchValues();
+            metadataBuilder.setMetadata(metadataValues[0]).setMetadataMask(metadataValues[1]).build();
+        }
+
+        @Override
+        public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            MetadataBuilder metadataBuilder = (MetadataBuilder) mapMatchBuilder.remove(MetadataBuilder.class);
+
+            if (metadataBuilder != null) {
+                matchBuilderInOut.setMetadata(metadataBuilder.build());
+            }
+        }
+    },
+
+    mpls_label {
+        @Override
+        protected Class<? extends MatchField> getMatchType() {
+            return MplsLabel.class;
+        }
+
+        @Override
+        public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            ProtocolMatchFieldsBuilder protocolMatchFieldsBuilder = (ProtocolMatchFieldsBuilder) mapMatchBuilder
+                    .get(ProtocolMatchFieldsBuilder.class);
+
+            if (protocolMatchFieldsBuilder == null) {
+                protocolMatchFieldsBuilder = new ProtocolMatchFieldsBuilder();
+                mapMatchBuilder.put(ProtocolMatchFieldsBuilder.class, protocolMatchFieldsBuilder);
+            }
+
+            protocolMatchFieldsBuilder.setMplsLabel(Long.valueOf(matchInfo.getStringMatchValues()[0])).build();
+        }
+
+        @Override
+        public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            ProtocolMatchFieldsBuilder protocolMatchFieldsBuilder = (ProtocolMatchFieldsBuilder) mapMatchBuilder
+                    .remove(ProtocolMatchFieldsBuilder.class);
+
+            if (protocolMatchFieldsBuilder != null) {
+                matchBuilderInOut.setProtocolMatchFields(protocolMatchFieldsBuilder.build());
+            }
+        }
+    },
+
+    pbb_isid {
+        @Override
+        protected Class<? extends MatchField> getMatchType() {
+            return PbbIsid.class;
+        }
+
+        @Override
+        public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            ProtocolMatchFieldsBuilder protocolMatchFieldsBuilder = (ProtocolMatchFieldsBuilder) mapMatchBuilder
+                    .get(ProtocolMatchFieldsBuilder.class);
+
+            if (protocolMatchFieldsBuilder == null) {
+                protocolMatchFieldsBuilder = new ProtocolMatchFieldsBuilder();
+                mapMatchBuilder.put(ProtocolMatchFieldsBuilder.class, protocolMatchFieldsBuilder);
+            }
+
+            protocolMatchFieldsBuilder.setPbb(new PbbBuilder().setPbbIsid(Long.valueOf(matchInfo.getMatchValues()[0]))
+                    .build());
+        }
+
+        @Override
+        public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            ProtocolMatchFieldsBuilder protocolMatchFieldsBuilder = (ProtocolMatchFieldsBuilder) mapMatchBuilder
+                    .remove(ProtocolMatchFieldsBuilder.class);
+
+            if (protocolMatchFieldsBuilder != null) {
+                matchBuilderInOut.setProtocolMatchFields(protocolMatchFieldsBuilder.build());
+            }
+        }
+    },
+
+    tcp_dst {
+        @Override
+        protected Class<? extends MatchField> getMatchType() {
+            return TcpDst.class;
+        }
+
+        @Override
+        public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            TcpMatchBuilder tcpMatchBuilder = (TcpMatchBuilder) mapMatchBuilder.get(TcpMatchBuilder.class);
+
+            if (tcpMatchBuilder == null) {
+                tcpMatchBuilder = new TcpMatchBuilder();
+                mapMatchBuilder.put(TcpMatchBuilder.class, tcpMatchBuilder);
+            }
+
+            tcpMatchBuilder.setTcpDestinationPort(new PortNumber(Integer.valueOf((int) matchInfo.getMatchValues()[0])));
+        }
+
+        @Override
+        public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            TcpMatchBuilder tcpMatchBuilder = (TcpMatchBuilder) mapMatchBuilder.remove(TcpMatchBuilder.class);
+
+            if (tcpMatchBuilder != null) {
+                matchBuilderInOut.setLayer4Match(tcpMatchBuilder.build());
+            }
+        }
+    },
+
+    tcp_src {
+        @Override
+        protected Class<? extends MatchField> getMatchType() {
+            return TcpSrc.class;
+        }
+
+        @Override
+        public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            TcpMatchBuilder tcpMatchBuilder = (TcpMatchBuilder) mapMatchBuilder.get(TcpMatchBuilder.class);
+
+            if (tcpMatchBuilder == null) {
+                tcpMatchBuilder = new TcpMatchBuilder();
+                mapMatchBuilder.put(TcpMatchBuilder.class, tcpMatchBuilder);
+            }
+
+            tcpMatchBuilder.setTcpSourcePort(new PortNumber(Integer.valueOf((int) matchInfo.getMatchValues()[0])));
+        }
+
+        @Override
+        public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            TcpMatchBuilder tcpMatchBuilder = (TcpMatchBuilder) mapMatchBuilder.remove(TcpMatchBuilder.class);
+
+            if (tcpMatchBuilder != null) {
+                matchBuilderInOut.setLayer4Match(tcpMatchBuilder.build());
+            }
+        }
+    },
+
+    udp_dst {
+        @Override
+        protected Class<? extends MatchField> getMatchType() {
+            return UdpDst.class;
+        }
+
+        @Override
+        public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            UdpMatchBuilder udpMatchBuilder = (UdpMatchBuilder) mapMatchBuilder.get(UdpMatchBuilder.class);
+
+            if (udpMatchBuilder == null) {
+                udpMatchBuilder = new UdpMatchBuilder();
+                mapMatchBuilder.put(UdpMatchBuilder.class, udpMatchBuilder);
+            }
+
+            udpMatchBuilder.setUdpDestinationPort(new PortNumber(Integer.valueOf((int) matchInfo.getMatchValues()[0])));
+        }
+
+        @Override
+        public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            UdpMatchBuilder udpMatchBuilder = (UdpMatchBuilder) mapMatchBuilder.remove(UdpMatchBuilder.class);
+
+            if (udpMatchBuilder != null) {
+                matchBuilderInOut.setLayer4Match(udpMatchBuilder.build());
+            }
+        }
+    },
+
+    udp_src {
+        @Override
+        protected Class<? extends MatchField> getMatchType() {
+            return UdpSrc.class;
+        }
+
+        @Override
+        public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            UdpMatchBuilder udpMatchBuilder = (UdpMatchBuilder) mapMatchBuilder.get(UdpMatchBuilder.class);
+
+            if (udpMatchBuilder == null) {
+                udpMatchBuilder = new UdpMatchBuilder();
+                mapMatchBuilder.put(UdpMatchBuilder.class, udpMatchBuilder);
+            }
+
+            udpMatchBuilder.setUdpSourcePort(new PortNumber(Integer.valueOf((int) matchInfo.getMatchValues()[0])));
+        }
+
+        @Override
+        public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            UdpMatchBuilder udpMatchBuilder = (UdpMatchBuilder) mapMatchBuilder.remove(UdpMatchBuilder.class);
+
+            if (udpMatchBuilder != null) {
+                matchBuilderInOut.setLayer4Match(udpMatchBuilder.build());
+            }
+        }
+    },
+    tunnel_id {
+        @Override
+        public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            TunnelBuilder tunnelBuilder = (TunnelBuilder) mapMatchBuilder.get(TunnelBuilder.class);
+
+            if (tunnelBuilder == null) {
+                tunnelBuilder = new TunnelBuilder();
+                mapMatchBuilder.put(TunnelBuilder.class, tunnelBuilder);
+            }
+
+            BigInteger[] tunnelIdValues = matchInfo.getBigMatchValues();
+            tunnelBuilder.setTunnelId(tunnelIdValues[0]).setTunnelMask(tunnelIdValues[1]).build();
+        }
+
+        @Override
+        public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            TunnelBuilder tunnelBuilder = (TunnelBuilder) mapMatchBuilder.remove(TunnelBuilder.class);
+
+            if (tunnelBuilder != null) {
+                matchBuilderInOut.setTunnel(tunnelBuilder.build());
+            }
+        }
+
+        @Override
+        protected Class<? extends MatchField> getMatchType() {
+            return TunnelId.class;
+        }
+
+    },
+
+    vlan_vid {
+        @Override
+        protected Class<? extends MatchField> getMatchType() {
+            return VlanVid.class;
+        }
+
+        @Override
+        public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            VlanMatchBuilder vlanMatchBuilder = (VlanMatchBuilder) mapMatchBuilder.get(VlanMatchBuilder.class);
+
+            if (vlanMatchBuilder == null) {
+                vlanMatchBuilder = new VlanMatchBuilder();
+                mapMatchBuilder.put(VlanMatchBuilder.class, vlanMatchBuilder);
+            }
+
+            vlanMatchBuilder.setVlanId(new VlanIdBuilder()
+            .setVlanId(new VlanId(Integer.valueOf((int) matchInfo.getMatchValues()[0])))
+            .setVlanIdPresent(((int) matchInfo.getMatchValues()[0] == 0) ? Boolean.FALSE : Boolean.TRUE)
+            .build());
+        }
+
+        @Override
+        public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            VlanMatchBuilder vlanMatchBuilder = (VlanMatchBuilder) mapMatchBuilder.remove(VlanMatchBuilder.class);
+
+            if (vlanMatchBuilder != null) {
+                matchBuilderInOut.setVlanMatch(vlanMatchBuilder.build());
+            }
+        }
+    };
+
+
+    public abstract void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder);
+
+    public abstract void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo,
+            Map<Class<?>, Object> mapMatchBuilder);
+
+    protected abstract Class<? extends MatchField> getMatchType();
+
+    protected boolean hasMatchFieldMask() {
+        // Override this to return true
+                return false;
+    }
 }
index b1c2cf876ea3185d4b20b21d118af077b5105771..5cd8dba54b7c6bbec6fecb7736c3ae670689bf7b 100644 (file)
@@ -4,9 +4,7 @@
  */
 package org.opendaylight.vpnservice.mdsalutil;
 
-import java.math.BigInteger;
 
 public class MetaDataConstants {
-    // Base cookie value
-    public static final BigInteger COOKIE_SCF_BASE = new BigInteger("7000000", 16);
+      // Nothing
 }
index 0628cda72abb80803b93dadad485d00e9baf5dc8..a57f0ff90bc9521fd2b5f5798c57aa3211c2d867 100644 (file)
@@ -3,157 +3,5 @@ package org.opendaylight.vpnservice.mdsalutil;
 import java.math.BigInteger;
 
 public class MetaDataUtil {
-
-    public static final BigInteger METADATA_NO_MASK = new BigInteger("0000000000000000", 16);
-    public static final BigInteger METADATA_MASK_SCF_MATCH = new BigInteger("FF00000000000000", 16);
-    public static final BigInteger METADATA_MASK_SUBP_MATCH = new BigInteger("00000000FFFF0000", 16);
-    public static final BigInteger METADATA_MASK_APPP_MATCH = new BigInteger("000000000000FFFF", 16);
-    public static final BigInteger METADATA_MASK_LPORT_MATCH = new BigInteger("00FFFF0000000000", 16);
-    public static final BigInteger METADATA_MASK_SCID_MATCH = new BigInteger("000000000000FFFF", 16);
-    public static final BigInteger METADATA_MASK_SCID_WRITE = new BigInteger("000000000000FFFF", 16);
-    public static final BigInteger METADATA_MASK_SUBP_WRITE = new BigInteger("00000000FFFF0000", 16);
-    public static final BigInteger METADATA_MASK_APPP_WRITE = new BigInteger("000000000000FFFF", 16);
-    public static final BigInteger MASK_DMAC_WRITE = new BigInteger("0000FFFFFFFFFFFF", 16);
-    public static final BigInteger METADATA_MASK_SCF_WRITE = new BigInteger("FF00000000000000", 16);
-    public static final BigInteger METADATA_MASK_LPORT_WRITE = new BigInteger("00FFFF0000000000", 16);
-    public static final BigInteger METADATA_MASK_LPORT_TAG = new BigInteger("1FFFFF0000000000", 16);
-    public static final BigInteger METADATA_MASK_SERVICE_INDEX = new BigInteger("E000000000000000", 16);
-    public static final BigInteger METADATA_MASK_SERVICE = new BigInteger("000000FFFF000000", 16);
-    public static final BigInteger METADA_MASK_TUNNEL_ID_VNI = new BigInteger("00000000FFFFFF00", 16);
-    public static final BigInteger METADATA_MASK_LABEL_ITM = new BigInteger("40FFFFFF000000FF", 16);
-    public static final BigInteger METADA_MASK_VALID_TUNNEL_ID_BIT_AND_TUNNEL_ID = new BigInteger("08000000FFFFFF00", 16);
-    public static final BigInteger METADATA_MASK_LABEL_L3 = new BigInteger("000000FFFF000000", 16);
     public static final BigInteger METADATA_MASK_VRFID = new BigInteger("00000000FFFFFFFF", 16);
-
-    public static BigInteger getMetadataSCF(int scfTag) {
-        return (new BigInteger("FF", 16).and(BigInteger.valueOf(scfTag))).shiftLeft(56);
-    }
-
-    public static BigInteger getMetadataSCID(int scId) {
-        return BigInteger.valueOf(scId).and(new BigInteger("FFFF", 16));
-    }
-
-    public static BigInteger getMetadataSubProfID(int subProfId) {
-        return (BigInteger.valueOf(subProfId).and(new BigInteger("FFFF", 16))).shiftLeft(16);
-    }
-
-    public static BigInteger getMetadataAppProfID(int appProfId) {
-        return BigInteger.valueOf(appProfId).and(new BigInteger("FFFF", 16));
-    }
-
-    public static BigInteger getMetadataAPPP(int appProfId) {
-        return BigInteger.valueOf(appProfId).and(new BigInteger("FFFF", 16));
-    }
-
-    public static BigInteger getCookieSCFEthTypeFilter(int scfTag) {
-        return MetaDataConstants.COOKIE_SCF_BASE.add(new BigInteger("0120000", 16)).add(BigInteger.valueOf(scfTag));
-    }
-
-    public static BigInteger getCookieSubFilter(int scfTag) {
-        return MetaDataConstants.COOKIE_SCF_BASE.add(new BigInteger("0310000", 16)).add(BigInteger.valueOf(scfTag));
-    }
-
-    public static BigInteger getCookieProfMap(int scfTag) {
-        return MetaDataConstants.COOKIE_SCF_BASE.add(new BigInteger("0510000", 16)).add(BigInteger.valueOf(scfTag));
-    }
-
-    public static BigInteger getCookieSCFAppFilter(int scfTag) {
-        return MetaDataConstants.COOKIE_SCF_BASE.add(new BigInteger("0410000", 16)).add(BigInteger.valueOf(scfTag));
-    }
-
-    public static BigInteger getEthDestForIpNextHop(int groupId) {
-        return BigInteger.valueOf(groupId).and(MASK_DMAC_WRITE);
-    }
-    public static long getIpAddress(byte[] rawIpAddress) {
-        return (((rawIpAddress[0] & 0xFF) << (3 * 8)) + ((rawIpAddress[1] & 0xFF) << (2 * 8))
-                + ((rawIpAddress[2] & 0xFF) << (1 * 8)) + (rawIpAddress[3] & 0xFF)) & 0xffffffffL;
-    }
-
-    public static BigInteger getMetadataLPort(int lPortTag) {
-        return (new BigInteger("FFFF", 16).and(BigInteger.valueOf(lPortTag))).shiftLeft(40);
-    }
-
-    public static BigInteger getMetadataScHop(int scfInstanceTag, int scfPortTag, int serviceChainId) {
-        return getMetadataSCF(scfInstanceTag).or(getMetadataLPort(scfPortTag)).or(getMetadataSCID(serviceChainId));
-    }
-
-    public static BigInteger getMetadataMaskScHop() {
-        return METADATA_MASK_SCF_WRITE.or(METADATA_MASK_LPORT_WRITE).or(METADATA_MASK_SCID_WRITE);
-    }
-
-    public static BigInteger getCookieSCHop(int scfInstanceTag) {
-        return MetaDataConstants.COOKIE_SCF_BASE.add(new BigInteger("0610000", 16)).add(BigInteger.valueOf(scfInstanceTag));
-    }
-
-    public static BigInteger getMetadataScfPort(int scfInstanceTag, int scfPortTag) {
-        return getMetadataSCF(scfInstanceTag).or(getMetadataLPort(scfPortTag));
-    }
-
-    public static BigInteger getMetadataMaskScfPort() {
-        return METADATA_MASK_LPORT_WRITE.or(METADATA_MASK_SCF_WRITE);
-    }
-
-    public static BigInteger getCookieSCFPort() {
-        return new BigInteger("5000000", 16);
-    }
-
-    public static BigInteger getCookieSCFIpv4EthTypeFilter(int scfInstanceTag) {
-        return MetaDataConstants.COOKIE_SCF_BASE.add(new BigInteger("0100000", 16)).add(BigInteger.valueOf(scfInstanceTag));
-    }
-
-    public static BigInteger getCookieSCFArpEthTypeFilter(int scfInstanceTag) {
-        return MetaDataConstants.COOKIE_SCF_BASE.add(new BigInteger("0110000", 16)).add(BigInteger.valueOf(scfInstanceTag));
-    }
-
-    public static BigInteger getLportTagMetaData(int lportTag) {
-        return new BigInteger("1FFFFF", 16).and(BigInteger.valueOf(lportTag)).shiftLeft(40);
-    }
-
-    public static BigInteger getLportFromMetadata(BigInteger metadata) {
-        return (metadata.and(METADATA_MASK_LPORT_TAG)).shiftRight(40);
-    }
-
-    public static BigInteger getServiceIndexMetaData(int serviceIndex) {
-        return new BigInteger("7", 16).and(BigInteger.valueOf(serviceIndex)).shiftLeft(61);
-    }
-
-    public static BigInteger getMetaDataForLPortDispatcher(int lportTag, short serviceIndex) {
-        return getServiceIndexMetaData(serviceIndex).or(getLportTagMetaData(lportTag));
-    }
-
-    public static BigInteger getMetaDataMaskForLPortDispatcher() {
-        return METADATA_MASK_SERVICE_INDEX.or(METADATA_MASK_LPORT_TAG);
-    }
-
-    public static BigInteger getWriteMetaDataMaskForServicePorts() {
-        return METADATA_MASK_SERVICE_INDEX.or(METADATA_MASK_LPORT_TAG).or(METADATA_MASK_SERVICE);
-    }
-
-    public static BigInteger getMetaDataMaskForLPortDispatcher(BigInteger metadataMaskForServiceIndex, 
-            BigInteger metadataMaskForLPortTag, BigInteger metadataMaskForService) {
-        return metadataMaskForServiceIndex.or(metadataMaskForLPortTag).or(metadataMaskForService);
-    }
-
-    public static BigInteger getMetaDataForLPortDispatcher(int lportTag, short serviceIndex,
-            BigInteger serviceMetaData) {
-        return getServiceIndexMetaData(serviceIndex).or(getLportTagMetaData(lportTag)).or(serviceMetaData);
-    }
-
-
-    public static BigInteger getVmLportTagMetaData(int vrfId) {
-        return BigInteger.valueOf(vrfId);
-    }
-
-    public static BigInteger getTunnelIdWithVni(int vni) {
-        return BigInteger.valueOf(vni).shiftLeft(8);
-    }
-
-    /**
-     * For the tunnel id with VNI and valid-vni-flag set, the most significant byte
-     * should have 08. So, shifting 08 to 7 bytes (56 bits) and the result is OR-ed with
-     * VNI being shifted to 1 byte.
-     */
-    public static BigInteger getTunnelIdWithValidVniBitAndVniSet(int vni) {
-        return BigInteger.valueOf(0X08).shiftLeft(56).or(BigInteger.valueOf(vni).shiftLeft(8));
-    }
 }
index 37d35863a0fce9cb33c3541b738906a2120ce23f..f800dbf06d2cf0a15085b5169b49752eb6df3088 100644 (file)
@@ -21,14 +21,7 @@ public class NwConstants {
     //Default Port
     public static final int UDP_DEFAULT_PORT = 4789;
 
-    // Table IDs
-    public static final short PRECHECK_TABLE          = 0;
-    public static final short PORT_VLAN_TABLE         = 0;
-
-    // Table Max Entries
-    public static final long INGRESS_TABLE_MAX_ENTRY  = 1000;
-    public static final long PRECHECK_TABLE_MAX_ENTRY = 100;
-
+    
     // Flow Actions
     public static final int ADD_FLOW = 0;
     public static final int DEL_FLOW = 1;
@@ -39,10 +32,4 @@ public class NwConstants {
     public static final int TABLE_MISS_FLOW = 0;
     public static final int TABLE_MISS_PRIORITY = 0;
 
-    // Misc FIXME: Find new place for this
-    public static final String DPN_STATE_CACHE = "dpn.state.cache";
-    public static final String DPN_SYNCSTATUS_CACHE = "dpn.resync.status.cache";
-    public static final String STATISTICS_LOCK_PREFIX ="scf.statistics.lock";
-    public static final String STATISTICS_LOCK_SEPARATOR =".";
-    public static final int STATISTICS_LOCK_RETRY_COUNT =1800;
-}
\ No newline at end of file
+ }
\ No newline at end of file
index 1ab2c54a0df41c678bdb2824576a5121a33d58e7..697946facb517f01bd88531f6901daa673655198 100644 (file)
@@ -1,18 +1,9 @@
 package org.opendaylight.vpnservice.mdsalutil.interfaces;
 
-//import java.math.BigInteger;
 import java.util.List;
-
 import org.opendaylight.vpnservice.mdsalutil.ActionInfo;
-//import org.opendaylight.vpnservice.mdsalutil.BucketInfo;
-//import org.opendaylight.vpnservice.mdsalutil.DpnState;
 import org.opendaylight.vpnservice.mdsalutil.FlowEntity;
 import org.opendaylight.vpnservice.mdsalutil.GroupEntity;
-//import org.opendaylight.vpnservice.mdsalutil.InstructionInfo;
-//import org.opendaylight.vpnservice.mdsalutil.MatchInfo;
-//import org.opendaylight.vpnservice.mdsalutil.SyncStatus;
-//import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.Table;
-//import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupTypes;
 
 public interface IMdsalApiManager {
 
index 7a3ec91fa8f1eb2db55c143f7b3841686874530e..fe5039cd91f63875c94a38a64446f39ac8f831ef 100644 (file)
@@ -56,7 +56,7 @@ import com.google.common.util.concurrent.CheckedFuture;
 import com.google.common.util.concurrent.FutureCallback;
 import com.google.common.util.concurrent.Futures;
 
-public class MDSALManager implements IMdsalApiManager, AutoCloseable {
+public class MDSALManager implements AutoCloseable {
 
     private static final Logger s_logger = LoggerFactory.getLogger(MDSALManager.class);
 
@@ -89,12 +89,12 @@ public class MDSALManager implements IMdsalApiManager, AutoCloseable {
         s_logger.info("MDSAL Manager Closed");
     }
 
-    @Override
+
     public void printTest() {
 
         s_logger.info(" INTER MODULECOMMUNICATION IS WORKING!!!!");
     }
-    @Override
+
     public void installFlow(FlowEntity flowEntity) {
 
         try {
@@ -164,7 +164,6 @@ public class MDSALManager implements IMdsalApiManager, AutoCloseable {
         }
     }
 
-    @Override
     public void installGroup(GroupEntity groupEntity) {
         try {
             Group group = groupEntity.getGroupBuilder().build();
@@ -210,7 +209,6 @@ public class MDSALManager implements IMdsalApiManager, AutoCloseable {
         }
     }
 
-    @Override
     public void removeFlow(FlowEntity flowEntity) {
         try {
             Node nodeDpn = buildDpnNode(flowEntity.getDpnId());
@@ -250,7 +248,6 @@ public class MDSALManager implements IMdsalApiManager, AutoCloseable {
         }
     }
 
-    @Override
     public void removeGroup(GroupEntity groupEntity) {
         try {
             Node nodeDpn = buildDpnNode(groupEntity.getDpnId());
@@ -288,7 +285,6 @@ public class MDSALManager implements IMdsalApiManager, AutoCloseable {
         }
     }
 
-    @Override
     public void modifyGroup(GroupEntity groupEntity) {
 
         installGroup(groupEntity);
@@ -309,7 +305,6 @@ public class MDSALManager implements IMdsalApiManager, AutoCloseable {
     }
 */
 
-    @Override
     public void sendPacketOut(long lDpnId, int groupId, byte[] payload) {
 
         List<ActionInfo> actionInfos = new ArrayList<ActionInfo>();
@@ -318,16 +313,13 @@ public class MDSALManager implements IMdsalApiManager, AutoCloseable {
         sendPacketOutWithActions(lDpnId, groupId, payload, actionInfos);
     }
 
-    @Override
     public void sendPacketOutWithActions(long lDpnId, long groupId, byte[] payload, List<ActionInfo> actionInfos) {
 
         m_packetProcessingService.transmitPacket(MDSALUtil.getPacketOut(actionInfos, payload, lDpnId,
                 getNodeConnRef("openflow:" + lDpnId, "0xfffffffd")));
     }
 
-    @Override
     public void sendARPPacketOutWithActions(long lDpnId, byte[] payload, List<ActionInfo> actions) {
-
         m_packetProcessingService.transmitPacket(MDSALUtil.getPacketOut(actions, payload, lDpnId,
                 getNodeConnRef("openflow:" + lDpnId, "0xfffffffd")));
     }
index 4ef07496ac743695346347762b1617d930b20a5a..6246d9c70b5f3e7bdcfca73010ac40906c8589e7 100644 (file)
@@ -1,14 +1,19 @@
 package org.opendaylight.vpnservice.mdsalutil.internal;
 
+import java.util.List;
+
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.sal.binding.api.BindingAwareConsumer;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ConsumerContext;
+import org.opendaylight.vpnservice.mdsalutil.ActionInfo;
+import org.opendaylight.vpnservice.mdsalutil.FlowEntity;
+import org.opendaylight.vpnservice.mdsalutil.GroupEntity;
 import org.opendaylight.vpnservice.mdsalutil.interfaces.IMdsalApiManager;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.PacketProcessingService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class MDSALUtilProvider implements BindingAwareConsumer, AutoCloseable {
+public class MDSALUtilProvider implements BindingAwareConsumer, IMdsalApiManager, AutoCloseable {
 
     private static final Logger s_logger = LoggerFactory.getLogger(MDSALUtilProvider.class);
     private MDSALManager mdSalMgr;
@@ -37,4 +42,59 @@ public class MDSALUtilProvider implements BindingAwareConsumer, AutoCloseable {
         s_logger.info("MDSAL Manager Closed");
     }
 
+
+    @Override
+    public void installFlow(FlowEntity flowEntity) {
+          mdSalMgr.installFlow(flowEntity);
+    }
+
+    @Override
+    public void removeFlow(FlowEntity flowEntity) {
+        mdSalMgr.removeFlow(flowEntity);
+    }
+
+    @Override
+    public void installGroup(GroupEntity groupEntity) {
+        mdSalMgr.installGroup(groupEntity);
+    }
+
+
+    @Override
+    public void modifyGroup(GroupEntity groupEntity) {
+        mdSalMgr.modifyGroup(groupEntity);
+    }
+
+
+    @Override
+    public void removeGroup(GroupEntity groupEntity) {
+        mdSalMgr.removeGroup(groupEntity);
+    }
+
+
+    @Override
+    public void sendPacketOut(long lDpnId, int groupId, byte[] payload) {
+        mdSalMgr.sendPacketOut(lDpnId, groupId, payload);
+    }
+
+
+    @Override
+    public void sendPacketOutWithActions(long lDpnId, long groupId,
+            byte[] payload, List<ActionInfo> actionInfos) {
+        mdSalMgr.sendPacketOutWithActions(lDpnId, groupId, payload, actionInfos);
+    }
+
+
+    @Override
+    public void sendARPPacketOutWithActions(long dpid, byte[] payload,
+            List<ActionInfo> action_info) {
+        mdSalMgr.sendARPPacketOutWithActions(dpid, payload, action_info);
+    }
+
+
+    @Override
+    public void printTest() {
+        // TODO Auto-generated method stub
+        mdSalMgr.printTest();
+    }
+
 }