From 9d15a14a3564d4459efdc69f2d88037693c59b9d Mon Sep 17 00:00:00 2001 From: HemaTG Date: Tue, 5 May 2015 16:18:28 +0530 Subject: [PATCH] Refractored and added generic mdsal datastore apis Signed-off-by: HemaTG Change-Id: I1ffeb76e5dd477597dc01e166c6e5a5ccc52aa79 --- .../mdsalutil/AbstractDataChangeListener.java | 113 ++ .../vpnservice/mdsalutil/ActionType.java | 77 +- .../vpnservice/mdsalutil/GroupEntity.java | 2 - .../vpnservice/mdsalutil/InstructionType.java | 3 +- .../mdsalutil/MDSALDataStoreUtils.java | 52 + .../vpnservice/mdsalutil/MDSALUtil.java | 92 +- .../vpnservice/mdsalutil/MatchFieldType.java | 1150 ++++++++--------- .../mdsalutil/MetaDataConstants.java | 4 +- .../vpnservice/mdsalutil/MetaDataUtil.java | 152 --- .../vpnservice/mdsalutil/NwConstants.java | 17 +- .../interfaces/IMdsalApiManager.java | 9 - .../mdsalutil/internal/MDSALManager.java | 14 +- .../mdsalutil/internal/MDSALUtilProvider.java | 62 +- 13 files changed, 794 insertions(+), 953 deletions(-) create mode 100644 mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/AbstractDataChangeListener.java create mode 100644 mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/MDSALDataStoreUtils.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 index 00000000..eff87413 --- /dev/null +++ b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/AbstractDataChangeListener.java @@ -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 implements DataChangeListener { + + protected final Class clazz; + + /** + * @param clazz - for which the data change event is received + */ + public AbstractDataChangeListener(Class clazz) { + this.clazz = Preconditions.checkNotNull(clazz, "Class can not be null!"); + } + + @Override + public void onDataChanged(final AsyncDataChangeEvent, DataObject> changeEvent) { + Preconditions.checkNotNull(changeEvent,"Async ChangeEvent can not be null!"); + + /* All DataObjects for create */ + final Map, DataObject> createdData = changeEvent.getCreatedData() != null + ? changeEvent.getCreatedData() : Collections., DataObject>emptyMap(); + /* All DataObjects for remove */ + final Set> removeData = changeEvent.getRemovedPaths() != null + ? changeEvent.getRemovedPaths() : Collections.>emptySet(); + /* All DataObjects for updates */ + final Map, DataObject> updateData = changeEvent.getUpdatedData() != null + ? changeEvent.getUpdatedData() : Collections., DataObject>emptyMap(); + /* All Original DataObjects */ + final Map, DataObject> originalData = changeEvent.getOriginalData() != null + ? changeEvent.getOriginalData() : Collections., DataObject>emptyMap(); + + this.createData(createdData); + this.updateData(updateData, originalData); + this.removeData(removeData, originalData); + } + + @SuppressWarnings("unchecked") + private void createData(final Map, DataObject> createdData) { + final Set> keys = createdData.keySet() != null + ? createdData.keySet() : Collections.>emptySet(); + for (InstanceIdentifier key : keys) { + if (clazz.equals(key.getTargetType())) { + InstanceIdentifier createKeyIdent = key.firstIdentifierOf(clazz); + final Optional value = Optional.of(createdData.get(key)); + if (value.isPresent()) { + this.add(createKeyIdent, (T)value.get()); + } + } + } + } + + @SuppressWarnings("unchecked") + private void updateData(final Map, DataObject> updateData, + final Map, DataObject> originalData) { + + final Set> keys = updateData.keySet() != null + ? updateData.keySet() : Collections.>emptySet(); + for (InstanceIdentifier key : keys) { + if (clazz.equals(key.getTargetType())) { + InstanceIdentifier updateKeyIdent = key.firstIdentifierOf(clazz); + final Optional value = Optional.of(updateData.get(key)); + final Optional 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> removeData, + final Map, DataObject> originalData) { + + for (InstanceIdentifier key : removeData) { + if (clazz.equals(key.getTargetType())) { + final InstanceIdentifier ident = key.firstIdentifierOf(clazz); + final DataObject removeValue = originalData.get(key); + this.remove(ident, (T)removeValue); + } + } + } + + protected abstract void remove(InstanceIdentifier identifier, T del); + + protected abstract void update(InstanceIdentifier identifier, T original, T update); + + protected abstract void add(InstanceIdentifier identifier, T add); + +} + + diff --git a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/ActionType.java b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/ActionType.java index 3744928c..8dba62c1 100644 --- a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/ActionType.java +++ b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/ActionType.java @@ -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) { diff --git a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/GroupEntity.java b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/GroupEntity.java index fc08f8c5..402abd83 100644 --- a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/GroupEntity.java +++ b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/GroupEntity.java @@ -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; diff --git a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/InstructionType.java b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/InstructionType.java index 96fd52f9..5ee42539 100644 --- a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/InstructionType.java +++ b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/InstructionType.java @@ -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 index 00000000..d52394e2 --- /dev/null +++ b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/MDSALDataStoreUtils.java @@ -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 Optional read(final DataBroker broker,final LogicalDatastoreType datastoreType, + InstanceIdentifier path) { + + ReadOnlyTransaction tx = broker.newReadOnlyTransaction(); + + Optional result = Optional.absent(); + try { + result = tx.read(datastoreType, path).get(); + } catch (Exception e) { + throw new RuntimeException(e); + } + + return result; + } + + public static void asyncWrite(final DataBroker broker, final LogicalDatastoreType datastoreType, + InstanceIdentifier path, T data, FutureCallback callback) { + WriteTransaction tx = broker.newWriteOnlyTransaction(); + tx.put(datastoreType, path, data, true); + Futures.addCallback(tx.submit(), callback); + } + + public void asyncUpdate(final DataBroker broker,final LogicalDatastoreType datastoreType, + InstanceIdentifier path, T data, FutureCallback callback) { + WriteTransaction tx = broker.newWriteOnlyTransaction(); + tx.merge(datastoreType, path, data, true); + Futures.addCallback(tx.submit(), callback); + } + + public void asyncRemove(final DataBroker broker,final LogicalDatastoreType datastoreType, + InstanceIdentifier path, FutureCallback callback) { + WriteTransaction tx = broker.newWriteOnlyTransaction(); + tx.delete(datastoreType, path); + Futures.addCallback(tx.submit(), callback); + } + +} diff --git a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/MDSALUtil.java b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/MDSALUtil.java index 81cfd10d..fea7e624 100644 --- a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/MDSALUtil.java +++ b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/MDSALUtil.java @@ -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()).build(); private static final Match EMPTY_Matches = new MatchBuilder().build(); - // public static Map syncStatusMap = new - // ConcurrentHashMap(); - public static Map> lportMap = new ConcurrentHashMap>(); - public static Map> lportDownMap = new ConcurrentHashMap>(); - // public static Map ofRefMap = new - // ConcurrentHashMap(); - public static Map> ofRefMapDpn = new ConcurrentHashMap>(); - public static Map> ofRefGroupMapDpn = new ConcurrentHashMap>(); - public static Map> ofRefFlowMapDpn = new ConcurrentHashMap>(); - public static FlowEntity buildFlowEntity(long dpnId, short tableId, String flowId, int priority, String flowName, int idleTimeOut, int hardTimeOut, BigInteger cookie, List listMatchInfo, List 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 listMatchInfo, - List 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 listMatchInfo, List 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 listMatchInfo, - List 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 listMatchInfo, - List 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 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 listBucketInfo) { - return buildGroup(groupId, groupName, groupType, listBucketInfo, false); - } - - public static Group buildGroup(long groupId, String groupName, GroupTypes groupType, - List 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 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 actionInfos, byte[] payload, long dpnId) { return new TransmitPacketInputBuilder() .setAction(buildActions(actionInfos)) diff --git a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/MatchFieldType.java b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/MatchFieldType.java index f38acf70..178ba18c 100644 --- a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/MatchFieldType.java +++ b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/MatchFieldType.java @@ -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 getMatchType() { - return EthSrc.class; - } - - @Override - public void createInnerMatchBuilder(MatchInfo matchInfo, Map, 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, Object> mapMatchBuilder) { - EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder - .remove(EthernetMatchBuilder.class); - - if (ethernetMatchBuilder != null) { - matchBuilderInOut.setEthernetMatch(ethernetMatchBuilder.build()); - } - } - }, - - eth_dst { - @Override - protected Class getMatchType() { - return EthDst.class; - } - - @Override - public void createInnerMatchBuilder(MatchInfo matchInfo, Map, 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, Object> mapMatchBuilder) { - EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder - .remove(EthernetMatchBuilder.class); - - if (ethernetMatchBuilder != null) { - matchBuilderInOut.setEthernetMatch(ethernetMatchBuilder.build()); - } - } - }, - - eth_type { - @Override - protected Class getMatchType() { - return EthType.class; - } - - @Override - public void createInnerMatchBuilder(MatchInfo matchInfo, Map, 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, Object> mapMatchBuilder) { - EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder - .remove(EthernetMatchBuilder.class); - - if (ethernetMatchBuilder != null) { - matchBuilderInOut.setEthernetMatch(ethernetMatchBuilder.build()); - } - } - }, - - in_port { - @Override - protected Class getMatchType() { - return InPort.class; - } - - @Override - public void createInnerMatchBuilder(MatchInfo matchInfo, Map, Object> mapMatchBuilder) { - } - - @Override - public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map, Object> mapMatchBuilder) { - // NodeConnectorId format -> openflow:: - 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 getMatchType() { - return IpProto.class; - } - - @Override - public void createInnerMatchBuilder(MatchInfo matchInfo, Map, 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, Object> mapMatchBuilder) { - IpMatchBuilder ipMatchBuilder = (IpMatchBuilder) mapMatchBuilder.remove(IpMatchBuilder.class); - - if (ipMatchBuilder != null) { - matchBuilderInOut.setIpMatch(ipMatchBuilder.build()); - } - } - }, - - ipv4_dst { - @Override - protected Class getMatchType() { - return Ipv4Dst.class; - } - - @Override - public void createInnerMatchBuilder(MatchInfo matchInfo, Map, 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, Object> mapMatchBuilder) { - Ipv4MatchBuilder ipv4MatchBuilder = (Ipv4MatchBuilder) mapMatchBuilder.remove(Ipv4MatchBuilder.class); - - if (ipv4MatchBuilder != null) { - matchBuilderInOut.setLayer3Match(ipv4MatchBuilder.build()); - } - } - }, - - ipv4_src { - @Override - protected Class getMatchType() { - return Ipv4Src.class; - } - - @Override - public void createInnerMatchBuilder(MatchInfo matchInfo, Map, 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, Object> mapMatchBuilder) { - Ipv4MatchBuilder ipv4MatchBuilder = (Ipv4MatchBuilder) mapMatchBuilder.remove(Ipv4MatchBuilder.class); - - if (ipv4MatchBuilder != null) { - matchBuilderInOut.setLayer3Match(ipv4MatchBuilder.build()); - } - } - }, - - arp_op { - @Override - protected Class getMatchType() { - return ArpOp.class; - } - - @Override - public void createInnerMatchBuilder(MatchInfo matchInfo, Map, 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, Object> mapMatchBuilder) { - ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.remove(ArpMatchBuilder.class); - - if (arpMatchBuilder != null) { - matchBuilderInOut.setLayer3Match(arpMatchBuilder.build()); - } - } - }, - - arp_tpa { - @Override - protected Class getMatchType() { - return ArpTpa.class; - } - - @Override - public void createInnerMatchBuilder(MatchInfo matchInfo, Map, 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, Object> mapMatchBuilder) { - ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.remove(ArpMatchBuilder.class); - - if (arpMatchBuilder != null) { - matchBuilderInOut.setLayer3Match(arpMatchBuilder.build()); - } - } - }, - - arp_spa { - @Override - protected Class getMatchType() { - return ArpSpa.class; - } - - @Override - public void createInnerMatchBuilder(MatchInfo matchInfo, Map, 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, Object> mapMatchBuilder) { - ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.remove(ArpMatchBuilder.class); - - if (arpMatchBuilder != null) { - matchBuilderInOut.setLayer3Match(arpMatchBuilder.build()); - } - } - }, - - metadata { - @Override - protected Class getMatchType() { - return Metadata.class; - } - - @Override - public void createInnerMatchBuilder(MatchInfo matchInfo, Map, 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, Object> mapMatchBuilder) { - MetadataBuilder metadataBuilder = (MetadataBuilder) mapMatchBuilder.remove(MetadataBuilder.class); - - if (metadataBuilder != null) { - matchBuilderInOut.setMetadata(metadataBuilder.build()); - } - } - }, - - mpls_label { - @Override - protected Class getMatchType() { - return MplsLabel.class; - } - - @Override - public void createInnerMatchBuilder(MatchInfo matchInfo, Map, 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, Object> mapMatchBuilder) { - ProtocolMatchFieldsBuilder protocolMatchFieldsBuilder = (ProtocolMatchFieldsBuilder) mapMatchBuilder - .remove(ProtocolMatchFieldsBuilder.class); - - if (protocolMatchFieldsBuilder != null) { - matchBuilderInOut.setProtocolMatchFields(protocolMatchFieldsBuilder.build()); - } - } - }, - - pbb_isid { - @Override - protected Class getMatchType() { - return PbbIsid.class; - } - - @Override - public void createInnerMatchBuilder(MatchInfo matchInfo, Map, 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, Object> mapMatchBuilder) { - ProtocolMatchFieldsBuilder protocolMatchFieldsBuilder = (ProtocolMatchFieldsBuilder) mapMatchBuilder - .remove(ProtocolMatchFieldsBuilder.class); - - if (protocolMatchFieldsBuilder != null) { - matchBuilderInOut.setProtocolMatchFields(protocolMatchFieldsBuilder.build()); - } - } - }, - - tcp_dst { - @Override - protected Class getMatchType() { - return TcpDst.class; - } - - @Override - public void createInnerMatchBuilder(MatchInfo matchInfo, Map, 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, Object> mapMatchBuilder) { - TcpMatchBuilder tcpMatchBuilder = (TcpMatchBuilder) mapMatchBuilder.remove(TcpMatchBuilder.class); - - if (tcpMatchBuilder != null) { - matchBuilderInOut.setLayer4Match(tcpMatchBuilder.build()); - } - } - }, - - tcp_src { - @Override - protected Class getMatchType() { - return TcpSrc.class; - } - - @Override - public void createInnerMatchBuilder(MatchInfo matchInfo, Map, 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, Object> mapMatchBuilder) { - TcpMatchBuilder tcpMatchBuilder = (TcpMatchBuilder) mapMatchBuilder.remove(TcpMatchBuilder.class); - - if (tcpMatchBuilder != null) { - matchBuilderInOut.setLayer4Match(tcpMatchBuilder.build()); - } - } - }, - - udp_dst { - @Override - protected Class getMatchType() { - return UdpDst.class; - } - - @Override - public void createInnerMatchBuilder(MatchInfo matchInfo, Map, 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, Object> mapMatchBuilder) { - UdpMatchBuilder udpMatchBuilder = (UdpMatchBuilder) mapMatchBuilder.remove(UdpMatchBuilder.class); - - if (udpMatchBuilder != null) { - matchBuilderInOut.setLayer4Match(udpMatchBuilder.build()); - } - } - }, - - udp_src { - @Override - protected Class getMatchType() { - return UdpSrc.class; - } - - @Override - public void createInnerMatchBuilder(MatchInfo matchInfo, Map, 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, 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, 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, Object> mapMatchBuilder) { - TunnelBuilder tunnelBuilder = (TunnelBuilder) mapMatchBuilder.remove(TunnelBuilder.class); - - if (tunnelBuilder != null) { - matchBuilderInOut.setTunnel(tunnelBuilder.build()); - } - } - - @Override - protected Class getMatchType() { - return TunnelId.class; - } - - }, - - vlan_vid { - @Override - protected Class getMatchType() { - return VlanVid.class; - } - - @Override - public void createInnerMatchBuilder(MatchInfo matchInfo, Map, 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, 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, Object> mapMatchBuilder); - - public abstract void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, - Map, Object> mapMatchBuilder); - - protected abstract Class getMatchType(); - - protected boolean hasMatchFieldMask() { - // Override this to return true - return false; - } + eth_src { + @Override + protected Class getMatchType() { + return EthSrc.class; + } + + @Override + public void createInnerMatchBuilder(MatchInfo matchInfo, Map, 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, Object> mapMatchBuilder) { + EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder + .remove(EthernetMatchBuilder.class); + + if (ethernetMatchBuilder != null) { + matchBuilderInOut.setEthernetMatch(ethernetMatchBuilder.build()); + } + } + }, + + eth_dst { + @Override + protected Class getMatchType() { + return EthDst.class; + } + + @Override + public void createInnerMatchBuilder(MatchInfo matchInfo, Map, 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, Object> mapMatchBuilder) { + EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder + .remove(EthernetMatchBuilder.class); + + if (ethernetMatchBuilder != null) { + matchBuilderInOut.setEthernetMatch(ethernetMatchBuilder.build()); + } + } + }, + + eth_type { + @Override + protected Class getMatchType() { + return EthType.class; + } + + @Override + public void createInnerMatchBuilder(MatchInfo matchInfo, Map, 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, Object> mapMatchBuilder) { + EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder + .remove(EthernetMatchBuilder.class); + + if (ethernetMatchBuilder != null) { + matchBuilderInOut.setEthernetMatch(ethernetMatchBuilder.build()); + } + } + }, + + in_port { + @Override + protected Class getMatchType() { + return InPort.class; + } + + @Override + public void createInnerMatchBuilder(MatchInfo matchInfo, Map, Object> mapMatchBuilder) { + } + + @Override + public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map, 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 getMatchType() { + return IpProto.class; + } + + @Override + public void createInnerMatchBuilder(MatchInfo matchInfo, Map, 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, Object> mapMatchBuilder) { + IpMatchBuilder ipMatchBuilder = (IpMatchBuilder) mapMatchBuilder.remove(IpMatchBuilder.class); + + if (ipMatchBuilder != null) { + matchBuilderInOut.setIpMatch(ipMatchBuilder.build()); + } + } + }, + + ipv4_dst { + @Override + protected Class getMatchType() { + return Ipv4Dst.class; + } + + @Override + public void createInnerMatchBuilder(MatchInfo matchInfo, Map, 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, Object> mapMatchBuilder) { + Ipv4MatchBuilder ipv4MatchBuilder = (Ipv4MatchBuilder) mapMatchBuilder.remove(Ipv4MatchBuilder.class); + + if (ipv4MatchBuilder != null) { + matchBuilderInOut.setLayer3Match(ipv4MatchBuilder.build()); + } + } + }, + + ipv4_src { + @Override + protected Class getMatchType() { + return Ipv4Src.class; + } + + @Override + public void createInnerMatchBuilder(MatchInfo matchInfo, Map, 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, Object> mapMatchBuilder) { + Ipv4MatchBuilder ipv4MatchBuilder = (Ipv4MatchBuilder) mapMatchBuilder.remove(Ipv4MatchBuilder.class); + + if (ipv4MatchBuilder != null) { + matchBuilderInOut.setLayer3Match(ipv4MatchBuilder.build()); + } + } + }, + + arp_op { + @Override + protected Class getMatchType() { + return ArpOp.class; + } + + @Override + public void createInnerMatchBuilder(MatchInfo matchInfo, Map, 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, Object> mapMatchBuilder) { + ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.remove(ArpMatchBuilder.class); + + if (arpMatchBuilder != null) { + matchBuilderInOut.setLayer3Match(arpMatchBuilder.build()); + } + } + }, + + arp_tpa { + @Override + protected Class getMatchType() { + return ArpTpa.class; + } + + @Override + public void createInnerMatchBuilder(MatchInfo matchInfo, Map, 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, Object> mapMatchBuilder) { + ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.remove(ArpMatchBuilder.class); + + if (arpMatchBuilder != null) { + matchBuilderInOut.setLayer3Match(arpMatchBuilder.build()); + } + } + }, + + arp_spa { + @Override + protected Class getMatchType() { + return ArpSpa.class; + } + + @Override + public void createInnerMatchBuilder(MatchInfo matchInfo, Map, 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, Object> mapMatchBuilder) { + ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.remove(ArpMatchBuilder.class); + + if (arpMatchBuilder != null) { + matchBuilderInOut.setLayer3Match(arpMatchBuilder.build()); + } + } + }, + + metadata { + @Override + protected Class getMatchType() { + return Metadata.class; + } + + @Override + public void createInnerMatchBuilder(MatchInfo matchInfo, Map, 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, Object> mapMatchBuilder) { + MetadataBuilder metadataBuilder = (MetadataBuilder) mapMatchBuilder.remove(MetadataBuilder.class); + + if (metadataBuilder != null) { + matchBuilderInOut.setMetadata(metadataBuilder.build()); + } + } + }, + + mpls_label { + @Override + protected Class getMatchType() { + return MplsLabel.class; + } + + @Override + public void createInnerMatchBuilder(MatchInfo matchInfo, Map, 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, Object> mapMatchBuilder) { + ProtocolMatchFieldsBuilder protocolMatchFieldsBuilder = (ProtocolMatchFieldsBuilder) mapMatchBuilder + .remove(ProtocolMatchFieldsBuilder.class); + + if (protocolMatchFieldsBuilder != null) { + matchBuilderInOut.setProtocolMatchFields(protocolMatchFieldsBuilder.build()); + } + } + }, + + pbb_isid { + @Override + protected Class getMatchType() { + return PbbIsid.class; + } + + @Override + public void createInnerMatchBuilder(MatchInfo matchInfo, Map, 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, Object> mapMatchBuilder) { + ProtocolMatchFieldsBuilder protocolMatchFieldsBuilder = (ProtocolMatchFieldsBuilder) mapMatchBuilder + .remove(ProtocolMatchFieldsBuilder.class); + + if (protocolMatchFieldsBuilder != null) { + matchBuilderInOut.setProtocolMatchFields(protocolMatchFieldsBuilder.build()); + } + } + }, + + tcp_dst { + @Override + protected Class getMatchType() { + return TcpDst.class; + } + + @Override + public void createInnerMatchBuilder(MatchInfo matchInfo, Map, 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, Object> mapMatchBuilder) { + TcpMatchBuilder tcpMatchBuilder = (TcpMatchBuilder) mapMatchBuilder.remove(TcpMatchBuilder.class); + + if (tcpMatchBuilder != null) { + matchBuilderInOut.setLayer4Match(tcpMatchBuilder.build()); + } + } + }, + + tcp_src { + @Override + protected Class getMatchType() { + return TcpSrc.class; + } + + @Override + public void createInnerMatchBuilder(MatchInfo matchInfo, Map, 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, Object> mapMatchBuilder) { + TcpMatchBuilder tcpMatchBuilder = (TcpMatchBuilder) mapMatchBuilder.remove(TcpMatchBuilder.class); + + if (tcpMatchBuilder != null) { + matchBuilderInOut.setLayer4Match(tcpMatchBuilder.build()); + } + } + }, + + udp_dst { + @Override + protected Class getMatchType() { + return UdpDst.class; + } + + @Override + public void createInnerMatchBuilder(MatchInfo matchInfo, Map, 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, Object> mapMatchBuilder) { + UdpMatchBuilder udpMatchBuilder = (UdpMatchBuilder) mapMatchBuilder.remove(UdpMatchBuilder.class); + + if (udpMatchBuilder != null) { + matchBuilderInOut.setLayer4Match(udpMatchBuilder.build()); + } + } + }, + + udp_src { + @Override + protected Class getMatchType() { + return UdpSrc.class; + } + + @Override + public void createInnerMatchBuilder(MatchInfo matchInfo, Map, 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, 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, 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, Object> mapMatchBuilder) { + TunnelBuilder tunnelBuilder = (TunnelBuilder) mapMatchBuilder.remove(TunnelBuilder.class); + + if (tunnelBuilder != null) { + matchBuilderInOut.setTunnel(tunnelBuilder.build()); + } + } + + @Override + protected Class getMatchType() { + return TunnelId.class; + } + + }, + + vlan_vid { + @Override + protected Class getMatchType() { + return VlanVid.class; + } + + @Override + public void createInnerMatchBuilder(MatchInfo matchInfo, Map, 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, Object> mapMatchBuilder) { + VlanMatchBuilder vlanMatchBuilder = (VlanMatchBuilder) mapMatchBuilder.remove(VlanMatchBuilder.class); + + if (vlanMatchBuilder != null) { + matchBuilderInOut.setVlanMatch(vlanMatchBuilder.build()); + } + } + }; + + + public abstract void createInnerMatchBuilder(MatchInfo matchInfo, Map, Object> mapMatchBuilder); + + public abstract void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, + Map, Object> mapMatchBuilder); + + protected abstract Class getMatchType(); + + protected boolean hasMatchFieldMask() { + // Override this to return true + return false; + } } diff --git a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/MetaDataConstants.java b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/MetaDataConstants.java index b1c2cf87..5cd8dba5 100644 --- a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/MetaDataConstants.java +++ b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/MetaDataConstants.java @@ -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 } diff --git a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/MetaDataUtil.java b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/MetaDataUtil.java index 0628cda7..a57f0ff9 100644 --- a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/MetaDataUtil.java +++ b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/MetaDataUtil.java @@ -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)); - } } diff --git a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/NwConstants.java b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/NwConstants.java index 37d35863..f800dbf0 100644 --- a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/NwConstants.java +++ b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/NwConstants.java @@ -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 diff --git a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/interfaces/IMdsalApiManager.java b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/interfaces/IMdsalApiManager.java index 1ab2c54a..697946fa 100644 --- a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/interfaces/IMdsalApiManager.java +++ b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/interfaces/IMdsalApiManager.java @@ -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 { diff --git a/mdsalutil/mdsalutil-impl/src/main/java/org/opendaylight/vpnservice/mdsalutil/internal/MDSALManager.java b/mdsalutil/mdsalutil-impl/src/main/java/org/opendaylight/vpnservice/mdsalutil/internal/MDSALManager.java index 7a3ec91f..fe5039cd 100644 --- a/mdsalutil/mdsalutil-impl/src/main/java/org/opendaylight/vpnservice/mdsalutil/internal/MDSALManager.java +++ b/mdsalutil/mdsalutil-impl/src/main/java/org/opendaylight/vpnservice/mdsalutil/internal/MDSALManager.java @@ -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 actionInfos = new ArrayList(); @@ -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 actionInfos) { m_packetProcessingService.transmitPacket(MDSALUtil.getPacketOut(actionInfos, payload, lDpnId, getNodeConnRef("openflow:" + lDpnId, "0xfffffffd"))); } - @Override public void sendARPPacketOutWithActions(long lDpnId, byte[] payload, List actions) { - m_packetProcessingService.transmitPacket(MDSALUtil.getPacketOut(actions, payload, lDpnId, getNodeConnRef("openflow:" + lDpnId, "0xfffffffd"))); } diff --git a/mdsalutil/mdsalutil-impl/src/main/java/org/opendaylight/vpnservice/mdsalutil/internal/MDSALUtilProvider.java b/mdsalutil/mdsalutil-impl/src/main/java/org/opendaylight/vpnservice/mdsalutil/internal/MDSALUtilProvider.java index 4ef07496..6246d9c7 100644 --- a/mdsalutil/mdsalutil-impl/src/main/java/org/opendaylight/vpnservice/mdsalutil/internal/MDSALUtilProvider.java +++ b/mdsalutil/mdsalutil-impl/src/main/java/org/opendaylight/vpnservice/mdsalutil/internal/MDSALUtilProvider.java @@ -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 actionInfos) { + mdSalMgr.sendPacketOutWithActions(lDpnId, groupId, payload, actionInfos); + } + + + @Override + public void sendARPPacketOutWithActions(long dpid, byte[] payload, + List action_info) { + mdSalMgr.sendARPPacketOutWithActions(dpid, payload, action_info); + } + + + @Override + public void printTest() { + // TODO Auto-generated method stub + mdSalMgr.printTest(); + } + } -- 2.36.6