Fix Bug 271 30/4030/5
authorEd Warnicke <eaw@cisco.com>
Sat, 4 Jan 2014 22:01:44 +0000 (14:01 -0800)
committerGerrit Code Review <gerrit@opendaylight.org>
Wed, 8 Jan 2014 09:02:56 +0000 (09:02 +0000)
Due to order of merging for controller, I have had
to merge three commits to get it all to verify in Jenkins.

https://git.opendaylight.org/gerrit/#/c/4017/3
https://git.opendaylight.org/gerrit/#/c/4007/6
https://git.opendaylight.org/gerrit/#/c/4030/

I have preserved all three log messages below.

Fixed port discovery for OF 1.0

1)  Consolodated translation from Port to NodeConnectorUpdated into
PortTranslatorUtils.java
2)  Updated PortTranslatorUtils.translatePort to correctly handle
OF 1.0
3)  Switched MultiPartReplyPortToNodeConnectorUpdatedTranslator.java
to using PortTranslatorUtils.translatePort
4)  Switched PortStatusMessageToNodeConnectorUpdatedTranslator.java
to using PortTranslatorUtils.translatePort
5)  Write FeaturesV10ToNodeConnectorUpdatedTranslator.java to
translate OF 1.0 GetFeaturesOutput to a NodeConnectorUpdated
as thats where in OF 1.0 we learn about ports
6)  Changed MDController.java to register the new translator for OF 1.0
7)  Changed ConnectionConductorImpl.java to queue up the
GetFeaturesOutput for OF 1.0 so we can process it like any other
message.

Properly extract the port number from an MD-SAL NodeConnectorId

MD-SAL NodeConnectorId's are not numbers. They are a URI of the form
openflow:<switchid>:<portno>. Changed logic to extract it but only for OF1.3.

Fix for Bug 271

Change-Id: Iafd21693313e79f25ad16a24a4e3a2baec59a403
Signed-off-by: Moiz Raja <moraja@cisco.com>
Signed-off-by: Ed Warnicke <eaw@cisco.com>
28 files changed:
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/ConnectionConductorImpl.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/MDController.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/ModelDrivenSwitchImpl.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/ActionConvertor.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/FlowConvertor.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/FlowStatsResponseConvertor.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/GroupConvertor.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/common/ConvertReactor.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/common/Convertor.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/flowflag/FlowFlagConvertor.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/flowflag/FlowFlagsConvertorImpl.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/flowflag/FlowFlagsConvertorV10Impl.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/match/MatchConvertor.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/match/MatchConvertorImpl.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/match/MatchConvertorV10Impl.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/translator/FeaturesV10ToNodeConnectorUpdatedTranslator.java [new file with mode: 0644]
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/translator/FlowRemovedTranslator.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/translator/MultiPartReplyPortToNodeConnectorUpdatedTranslator.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/translator/MultipartReplyTranslator.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/translator/PortStatusMessageToNodeConnectorUpdatedTranslator.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/util/InventoryDataServiceUtil.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/util/PortTranslatorUtil.java
openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/ModelDrivenSwitchImplTest.java
openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/ActionConvertorTest.java
openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/GroupConvertorTest.java
openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/flowflag/FlowFlagReactorTest.java
openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/match/MatchReactorTest.java
test-provider/src/main/java/org/opendaylight/openflowplugin/test/OpenflowpluginTestCommandProvider.java

index 98e9037eb18f29ee5161f7be18816f2e9c7098d3..912cc6e72c5f223b218da7109a3e6da88b057052 100644 (file)
@@ -384,6 +384,11 @@ public class ConnectionConductorImpl implements OpenflowProtocolListener,
         if(version == OFConstants.OFP_VERSION_1_3){
             requestGroupFeatures();
             requestMeterFeatures();
+        } else if (version == OFConstants.OFP_VERSION_1_0) {
+            //  Because the GetFeaturesOutput contains information about the port
+            //  in OF1.0 (that we would otherwise get from the PortDesc) we have to pass
+            //  it up for parsing to convert into a NodeConnectorUpdate
+            queueKeeper.push(featureOutput, this);
         }
     }
 
index ca3da38b4c2de87b3da57ac271f4134bf4cb94c0..1f208797257342466e96386445fe23c1a3086e4a 100644 (file)
@@ -25,6 +25,7 @@ import org.opendaylight.openflowjava.protocol.spi.connection.SwitchConnectionPro
 import org.opendaylight.openflowplugin.openflow.md.core.session.OFSessionUtil;
 import org.opendaylight.openflowplugin.openflow.md.core.translator.ErrorTranslator;
 import org.opendaylight.openflowplugin.openflow.md.core.translator.ExperimenterTranslator;
+import org.opendaylight.openflowplugin.openflow.md.core.translator.FeaturesV10ToNodeConnectorUpdatedTranslator;
 import org.opendaylight.openflowplugin.openflow.md.core.translator.FlowRemovedTranslator;
 import org.opendaylight.openflowplugin.openflow.md.core.translator.MultiPartMessageDescToNodeUpdatedTranslator;
 import org.opendaylight.openflowplugin.openflow.md.core.translator.MultiPartReplyPortToNodeConnectorUpdatedTranslator;
@@ -50,6 +51,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ErrorMessage;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ExperimenterMessage;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.FlowRemovedMessage;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetFeaturesOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReplyMessage;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PacketInMessage;
@@ -111,6 +113,7 @@ public class MDController implements IMDController {
         addMessageTranslator(MultipartReplyMessage.class,OF10, new MultipartReplyTranslator());
         addMessageTranslator(MultipartReplyMessage.class,OF13, new MultipartReplyTranslator());
         addMessageTranslator(MultipartReplyMessage.class,OF13,new MultipartReplyTableFeaturesToTableUpdatedTranslator());
+        addMessageTranslator(GetFeaturesOutput.class,OF10, new FeaturesV10ToNodeConnectorUpdatedTranslator());
 
         //TODO: move registration to factory
         NotificationPopListener<DataObject> notificationPopListener = new NotificationPopListener<DataObject>();
index a0c8308f0efd00ecec9cbce324d26ec990c2d2e2..e39742497b8cf3f9c34649b953c618a5791e93b0 100644 (file)
@@ -234,7 +234,7 @@ public class ModelDrivenSwitchImpl extends AbstractModelDrivenSwitch {
        } 
        
        // Convert the AddFlowInput to FlowModInput
-       FlowModInputBuilder ofFlowModInput = FlowConvertor.toFlowModInput(input, version);
+       FlowModInputBuilder ofFlowModInput = FlowConvertor.toFlowModInput(input, version,this.getSessionContext().getFeatures().getDatapathId());
        xId = session.getNextXid();
         ofFlowModInput.setXid(xId);
         
@@ -286,7 +286,7 @@ public class ModelDrivenSwitchImpl extends AbstractModelDrivenSwitch {
         } 
        
        // Convert the AddGroupInput to GroupModInput
-        GroupModInputBuilder ofGroupModInput = GroupConvertor.toGroupModInput(input, version);
+        GroupModInputBuilder ofGroupModInput = GroupConvertor.toGroupModInput(input, version,this.getSessionContext().getFeatures().getDatapathId());
         xId = session.getNextXid();
         ofGroupModInput.setXid(xId);
         
@@ -389,7 +389,7 @@ public class ModelDrivenSwitchImpl extends AbstractModelDrivenSwitch {
        }
         
         // Convert the RemoveFlowInput to FlowModInput
-        FlowModInputBuilder ofFlowModInput = FlowConvertor.toFlowModInput(input, version);        
+        FlowModInputBuilder ofFlowModInput = FlowConvertor.toFlowModInput(input, version,this.getSessionContext().getFeatures().getDatapathId());        
         xId = session.getNextXid();
         ofFlowModInput.setXid(xId);
         
@@ -443,7 +443,7 @@ public class ModelDrivenSwitchImpl extends AbstractModelDrivenSwitch {
         } 
        
        // Convert the RemoveGroupInput to GroupModInput
-        GroupModInputBuilder ofGroupModInput = GroupConvertor.toGroupModInput(input, version);
+        GroupModInputBuilder ofGroupModInput = GroupConvertor.toGroupModInput(input, version,this.getSessionContext().getFeatures().getDatapathId());
         xId = session.getNextXid();
         ofGroupModInput.setXid(xId);
         
@@ -589,7 +589,7 @@ public class ModelDrivenSwitchImpl extends AbstractModelDrivenSwitch {
        }
        
        // Convert the UpdateFlowInput to FlowModInput
-        FlowModInputBuilder ofFlowModInput = FlowConvertor.toFlowModInput(input.getUpdatedFlow(), version);
+        FlowModInputBuilder ofFlowModInput = FlowConvertor.toFlowModInput(input.getUpdatedFlow(), version,this.getSessionContext().getFeatures().getDatapathId());
         xId = session.getNextXid();
         ofFlowModInput.setXid(xId);
         
@@ -644,7 +644,7 @@ public class ModelDrivenSwitchImpl extends AbstractModelDrivenSwitch {
         } 
        
        // Convert the UpdateGroupInput to GroupModInput
-        GroupModInputBuilder ofGroupModInput = GroupConvertor.toGroupModInput(input.getUpdatedGroup(), version);
+        GroupModInputBuilder ofGroupModInput = GroupConvertor.toGroupModInput(input.getUpdatedGroup(), version,this.getSessionContext().getFeatures().getDatapathId());
         xId = session.getNextXid();
         ofGroupModInput.setXid(xId);
         
@@ -1367,7 +1367,7 @@ public class ModelDrivenSwitchImpl extends AbstractModelDrivenSwitch {
         mprFlowRequestBuilder.setCookieMask(OFConstants.DEFAULT_COOKIE_MASK);
 
         // convert and inject match
-        MatchReactor.getInstance().convert(arg0.getMatch(), version, mprFlowRequestBuilder);
+        MatchReactor.getInstance().convert(arg0.getMatch(), version, mprFlowRequestBuilder,this.getSessionContext().getFeatures().getDatapathId());
         //TODO: repeating code
         if(version == OFConstants.OFP_VERSION_1_3){
             mprFlowRequestBuilder.setCookie(arg0.getCookie());
@@ -1467,7 +1467,7 @@ public class ModelDrivenSwitchImpl extends AbstractModelDrivenSwitch {
         mprAggregateRequestBuilder.setCookieMask(OFConstants.DEFAULT_COOKIE_MASK);
 
 
-        MatchReactor.getInstance().convert(arg0.getMatch(), version, mprAggregateRequestBuilder);
+        MatchReactor.getInstance().convert(arg0.getMatch(), version, mprAggregateRequestBuilder,this.getSessionContext().getFeatures().getDatapathId());
         //TODO: repeating code
         if(version == OFConstants.OFP_VERSION_1_3){
             mprAggregateRequestBuilder.setCookie(arg0.getCookie());
index 49d4d4e1f71b5628e25b6d629206ebd1c7990127..61920bef65e768b2a3f7b2c6356f8f8b84a175ad 100644 (file)
@@ -1,12 +1,10 @@
 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;
 
-import java.util.ArrayList;
-import java.util.List;
-
 import org.opendaylight.openflowjava.protocol.api.util.BinContent;
 import org.opendaylight.openflowplugin.openflow.md.OFConstants;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match.MatchConvertorImpl;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match.MatchReactor;
+import org.opendaylight.openflowplugin.openflow.md.util.InventoryDataServiceUtil;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlInCase;
@@ -132,6 +130,10 @@ import org.opendaylight.yangtools.yang.binding.Augmentation;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * @author usha@ericsson Action List:This class takes data from SAL layer and
  *         converts into OF Data
@@ -151,7 +153,7 @@ public final class ActionConvertor {
 
     public static List<ActionsList> getActionList(
             List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action> actions,
-            short version)
+            short version,BigInteger datapathid)
 
     {
         ActionsListBuilder actionsListBuilder = new ActionsListBuilder();
@@ -189,7 +191,7 @@ public final class ActionConvertor {
             else if (action instanceof DecNwTtlCase)
                 actionsList.add(SalToOFDecNwTtl(action, actionsListBuilder));
             else if (action instanceof SetFieldCase)
-                actionsList.add(SalToOFSetField(action, actionsListBuilder, version));
+                actionsList.add(SalToOFSetField(action, actionsListBuilder, version,datapathid));
             else if (action instanceof PushPbbActionCase)
                 actionsList.add(SalToOFPushPbbAction(action, actionsListBuilder));
             else if (action instanceof PopPbbActionCase)
@@ -226,14 +228,14 @@ public final class ActionConvertor {
 
     private static ActionsList SalToOFSetField(
             org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
-            ActionsListBuilder actionsListBuilder, short version) {
+            ActionsListBuilder actionsListBuilder, short version,BigInteger datapathid) {
 
         SetFieldCase setFieldCase = (SetFieldCase) action;
         org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.Match match = setFieldCase
                 .getSetField();
 
         OxmFieldsActionBuilder oxmFieldsActionBuilder = new OxmFieldsActionBuilder();
-        MatchReactor.getInstance().convert(match, version, oxmFieldsActionBuilder);
+        MatchReactor.getInstance().convert(match, version, oxmFieldsActionBuilder,datapathid);
 
         ActionBuilder actionBuilder = new ActionBuilder();
         actionBuilder
@@ -697,6 +699,7 @@ public final class ActionConvertor {
         Uri uri = outputAction.getOutputNodeConnector();
 
         if (version >= OFConstants.OFP_VERSION_1_3) {
+
             if (uri.getValue().equals(OutputPortValues.CONTROLLER.toString())) {
                 portAction.setPort(new PortNumber(BinContent.intToUnsignedLong(PortNumberValues.CONTROLLER
                         .getIntValue())));
@@ -722,8 +725,8 @@ public final class ActionConvertor {
 
             } else if (uri.getValue().equals(OutputPortValues.NONE.toString())) {
                 logger.error("Unknown Port Type for the Version");
-            } else if (Long.parseLong(uri.getValue()) > 0 && Long.parseLong(uri.getValue()) < MAXPortOF13) {
-                portAction.setPort(new PortNumber(BinContent.intToUnsignedLong(Integer.parseInt(uri.getValue()))));
+            } else if (InventoryDataServiceUtil.portNumberfromNodeConnectorId(outputAction.getOutputNodeConnector().getValue()) < MAXPortOF13) {
+                portAction.setPort(new PortNumber(InventoryDataServiceUtil.portNumberfromNodeConnectorId(outputAction.getOutputNodeConnector().getValue())));
             } else {
                 logger.error("Invalid Port for Output Action");
             }
@@ -747,8 +750,8 @@ public final class ActionConvertor {
                 portAction.setPort(new PortNumber((long) PortNumberValuesV10.NONE.getIntValue()));
             } else if (uri.getValue().equals(OutputPortValues.ANY.toString())) {
                 logger.error("Unknown Port Type for the Version");
-            } else if (Long.parseLong(uri.getValue()) > 0 && Long.parseLong(uri.getValue()) < MAXPortOF10) {
-                portAction.setPort(new PortNumber((long) Integer.parseInt(uri.getValue())));
+            } else if (InventoryDataServiceUtil.portNumberfromNodeConnectorId(outputAction.getOutputNodeConnector().getValue()) < MAXPortOF10) {
+                portAction.setPort(new PortNumber(InventoryDataServiceUtil.portNumberfromNodeConnectorId(outputAction.getOutputNodeConnector().getValue())));
             } else {
                 logger.error("Invalid Port for Output Action");
             }
index 4c5f03776797bff0da2e255607ca915396deab60..04af484f31ea68e085c931fd7ffcf3b6653edb24 100644 (file)
@@ -89,7 +89,7 @@ public class FlowConvertor {
     /** default match entries - empty */
     public static final List<MatchEntries> DEFAULT_MATCH_ENTRIES = new ArrayList<MatchEntries>();
 
-    public static FlowModInputBuilder toFlowModInput(Flow flow, short version) {
+    public static FlowModInputBuilder toFlowModInput(Flow flow, short version,BigInteger datapathid) {
         FlowModInputBuilder flowMod = new FlowModInputBuilder();
         if (flow.getCookie() != null) {
             flowMod.setCookie(flow.getCookie());
@@ -158,14 +158,14 @@ public class FlowConvertor {
 
         
         // convert and inject flowFlags
-        FlowFlagReactor.getInstance().convert(flow.getFlags(), version, flowMod);
+        FlowFlagReactor.getInstance().convert(flow.getFlags(), version, flowMod,datapathid);
 
         // convert and inject match
-        MatchReactor.getInstance().convert(flow.getMatch(), version, flowMod);
+        MatchReactor.getInstance().convert(flow.getMatch(), version, flowMod,datapathid);
 
         if (flow.getInstructions() != null) {
-            flowMod.setInstructions(toInstructions(flow.getInstructions(), version));
-            flowMod.setActionsList(getActionsList(flow.getInstructions(), version));
+            flowMod.setInstructions(toInstructions(flow.getInstructions(), version,datapathid));
+            flowMod.setActionsList(getActionsList(flow.getInstructions(), version,datapathid));
         }
         flowMod.setVersion(version);
         
@@ -174,7 +174,7 @@ public class FlowConvertor {
 
     private static List<Instructions> toInstructions(
             org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Instructions instructions,
-            short version) {
+            short version,BigInteger datapathid) {
         List<Instructions> instructionsList = new ArrayList<>();
 
         for (org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction instruction : instructions
@@ -213,7 +213,7 @@ public class FlowConvertor {
                         .setType(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.WriteActions.class);
                 ActionsInstructionBuilder actionsInstructionBuilder = new ActionsInstructionBuilder();
                 actionsInstructionBuilder.setActionsList(ActionConvertor.getActionList(writeActions.getAction(),
-                        version));
+                        version,datapathid));
                 instructionBuilder.addAugmentation(ActionsInstruction.class, actionsInstructionBuilder.build());
                 instructionsList.add(instructionBuilder.build());
             }
@@ -225,7 +225,7 @@ public class FlowConvertor {
                         .setType(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.ApplyActions.class);
                 ActionsInstructionBuilder actionsInstructionBuilder = new ActionsInstructionBuilder();
                 actionsInstructionBuilder.setActionsList(ActionConvertor.getActionList(applyActions.getAction(),
-                        version));
+                        version,datapathid));
                 instructionBuilder.addAugmentation(ActionsInstruction.class, actionsInstructionBuilder.build());
                 instructionsList.add(instructionBuilder.build());
             }
@@ -237,7 +237,7 @@ public class FlowConvertor {
                         .setType(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.ClearActions.class);
                 ActionsInstructionBuilder actionsInstructionBuilder = new ActionsInstructionBuilder();
                 actionsInstructionBuilder.setActionsList(ActionConvertor.getActionList(clearActions.getAction(),
-                        version));
+                        version,datapathid));
                 instructionBuilder.addAugmentation(ActionsInstruction.class, actionsInstructionBuilder.build());
                 instructionsList.add(instructionBuilder.build());
             }
@@ -259,7 +259,7 @@ public class FlowConvertor {
     
     private static List<ActionsList> getActionsList(
             org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Instructions instructions,
-            short version) {
+            short version,BigInteger datapathid) {
 
         for (org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction instruction : instructions
                 .getInstruction()) {
@@ -269,7 +269,7 @@ public class FlowConvertor {
             if (curInstruction instanceof ApplyActionsCase) {
                 ApplyActionsCase applyActionscase = (ApplyActionsCase) curInstruction;
                 ApplyActions applyActions = applyActionscase.getApplyActions();
-                return ActionConvertor.getActionList(applyActions.getAction(), version);
+                return ActionConvertor.getActionList(applyActions.getAction(), version,datapathid);
             }
 
         }
index f5f7c47ec6a23e744c5f75cb50b8892fc1027b96..0c16970002c0357cdea8537c6153684fa9447364 100644 (file)
@@ -7,6 +7,7 @@
  */
 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;
 
+import java.math.BigInteger;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -33,12 +34,12 @@ public class FlowStatsResponseConvertor {
      * @param allFlowStats
      * @return
      */
-    public List<FlowAndStatisticsMapList> toSALFlowStatsList(List<FlowStats> allFlowStats){
+    public List<FlowAndStatisticsMapList> toSALFlowStatsList(List<FlowStats> allFlowStats,BigInteger datapathid){
         
         List<FlowAndStatisticsMapList> convertedSALFlowStats = new ArrayList<FlowAndStatisticsMapList>();
         
         for(FlowStats flowStats : allFlowStats){
-            convertedSALFlowStats.add(toSALFlowStats(flowStats));
+            convertedSALFlowStats.add(toSALFlowStats(flowStats, datapathid));
         }
         
         return convertedSALFlowStats;
@@ -50,7 +51,7 @@ public class FlowStatsResponseConvertor {
      * @param flowStats
      * @return
      */
-    public FlowAndStatisticsMapList toSALFlowStats(FlowStats flowStats){
+    public FlowAndStatisticsMapList toSALFlowStats(FlowStats flowStats,BigInteger datapathid){
         FlowAndStatisticsMapListBuilder salFlowStatsBuilder = new FlowAndStatisticsMapListBuilder();
         salFlowStatsBuilder.setByteCount(new Counter64(flowStats.getByteCount()));
         salFlowStatsBuilder.setCookie(flowStats.getCookie());
@@ -66,10 +67,10 @@ public class FlowStatsResponseConvertor {
         salFlowStatsBuilder.setPriority(flowStats.getPriority());
         salFlowStatsBuilder.setTableId(flowStats.getTableId());
         if(flowStats.getMatchV10() != null){
-            salFlowStatsBuilder.setMatch(MatchConvertorImpl.fromOFMatchV10ToSALMatch(flowStats.getMatchV10()));
+            salFlowStatsBuilder.setMatch(MatchConvertorImpl.fromOFMatchV10ToSALMatch(flowStats.getMatchV10(),datapathid));
         }
         if(flowStats.getMatch() != null){
-            salFlowStatsBuilder.setMatch(MatchConvertorImpl.fromOFMatchToSALMatch(flowStats.getMatch()));
+            salFlowStatsBuilder.setMatch(MatchConvertorImpl.fromOFMatchToSALMatch(flowStats.getMatch(),datapathid));
             salFlowStatsBuilder.setFlags(
                     new FlowModFlags(flowStats.getFlags().isOFPFFCHECKOVERLAP(),
                             flowStats.getFlags().isOFPFFRESETCOUNTS(),
index e9cbe346e590c0b6c85ea19de999ea8f8a1ada98..f36e84043181b315c2ef7e546938a2ac6b79d54e 100644 (file)
@@ -1,5 +1,6 @@
 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;
 
+import java.math.BigInteger;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
@@ -44,7 +45,7 @@ public final class GroupConvertor {
 
     public static GroupModInputBuilder toGroupModInput(
 
-    org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group source, short version) {
+    org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group source, short version,BigInteger datapathid) {
         List<BucketsList> bucketLists = null;
         GroupModInputBuilder groupModInputBuilder = new GroupModInputBuilder();
         if (source instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.AddGroupInput) {
@@ -76,7 +77,7 @@ public final class GroupConvertor {
         if ((source.getBuckets() != null) && (source.getBuckets().getBucket().size() != 0)) {
 
             bucketLists = new ArrayList<BucketsList>();
-            getbucketList(source.getBuckets(), bucketLists, version, source.getGroupType().getIntValue());
+            getbucketList(source.getBuckets(), bucketLists, version, source.getGroupType().getIntValue(),datapathid);
             groupModInputBuilder.setBucketsList(bucketLists);
         }
         groupModInputBuilder.setVersion(version);
@@ -84,7 +85,7 @@ public final class GroupConvertor {
 
     }
 
-    private static void getbucketList(Buckets buckets, List<BucketsList> bucketLists, short version, int groupType) {
+    private static void getbucketList(Buckets buckets, List<BucketsList> bucketLists, short version, int groupType,BigInteger datapathid) {
 
         Iterator<org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.Bucket> groupBucketIterator = buckets
                 .getBucket().iterator();
@@ -130,7 +131,7 @@ public final class GroupConvertor {
                 bucketBuilder.setWatchPort(new PortNumber(BinContent.intToUnsignedLong(DEFAULT_WATCH_PORT.intValue())));
             }
 
-            List<ActionsList> bucketActionList = ActionConvertor.getActionList(groupBucket.getAction(), version);
+            List<ActionsList> bucketActionList = ActionConvertor.getActionList(groupBucket.getAction(), version,datapathid);
             bucketBuilder.setActionsList(bucketActionList);
             BucketsList bucket = bucketBuilder.build();
             bucketLists.add(bucket);
index 136b5db37165b6674dc13d7531c2c942e6a04a18..3def2450eab45582e955aca9cc39cdce800ce35a 100644 (file)
@@ -8,6 +8,7 @@
 
 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common;
 
+import java.math.BigInteger;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -40,14 +41,14 @@ public abstract class ConvertReactor<FROM> {
      * @param target 
      */
     @SuppressWarnings("unchecked")
-    public <RESULT, TARGET> void convert(FROM source, short version, TARGET target) {
+    public <RESULT, TARGET> void convert(FROM source, short version, TARGET target,BigInteger datapathid) {
         
         //lookup converter
         Convertor<FROM, RESULT> convertor = (Convertor<FROM, RESULT>) conversionMapping.get(version);
         if (convertor == null) {
             throw new IllegalArgumentException("convertor for given version ["+version+"] not found");
         }
-        RESULT convertedItem = convertor.convert(source);
+        RESULT convertedItem = convertor.convert(source,datapathid);
         
         //lookup injection
         InjectionKey key = new InjectionKey(version, target.getClass().getName());
index 553ca3f8db7e59760a810a6d21ab273a43339a0f..6f2c2e2652b5bfaef76fb46b2da364d4cc181aee 100644 (file)
@@ -8,6 +8,8 @@
 
 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common;
 
+import java.math.BigInteger;
+
 
 /**
  * converting from MD-SAL model into appropriate OF-API model
@@ -20,5 +22,5 @@ public interface Convertor<FROM, TO> {
      * @param source
      * @return converted match (into OF-API model)
      */
-    TO convert(FROM source);
+    TO convert(FROM source,BigInteger datapathid);
 }
index 389cccc1935b9b77a4ca46d7a3d360c512652489..7daa4a4d75a2ed89a448d737a09f7e1043e8b750 100644 (file)
@@ -8,6 +8,8 @@
 
 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.flowflag;
 
+import java.math.BigInteger;
+
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.Convertor;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowModFlags;
 
@@ -22,5 +24,5 @@ public interface FlowFlagConvertor<E> extends Convertor<FlowModFlags, E> {
      * @return converted match (into OF-API model)
      */
     @Override
-    E convert(FlowModFlags source);
+    E convert(FlowModFlags source,BigInteger datapathid);
 }
index 2dfb2acf854c1d62ceb9c32f7c0be8ef10e9e966..af119b1bd92d2ea04102e53d425b55ea39459311 100644 (file)
@@ -8,6 +8,8 @@
 
 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.flowflag;
 
+import java.math.BigInteger;
+
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.FlowConvertor;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowModFlags;
 
@@ -18,7 +20,7 @@ public class FlowFlagsConvertorImpl implements FlowFlagConvertor<FlowModFlags> {
 
     @Override
     public FlowModFlags convert(
-            org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowModFlags source) {
+            org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowModFlags source, BigInteger datapathid) {
     
         FlowModFlags ofFlowModFlags = null;
         if (source != null) {
index ee5dac9b1d493dde8acad0b53140a9e447075c50..478b0c00c27a900895d3ebefddc9d51f1af8775e 100644 (file)
@@ -8,6 +8,8 @@
 
 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.flowflag;
 
+import java.math.BigInteger;
+
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.FlowConvertor;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowModFlagsV10;
 
@@ -18,7 +20,7 @@ public class FlowFlagsConvertorV10Impl implements FlowFlagConvertor<FlowModFlags
 
     @Override
     public FlowModFlagsV10 convert(
-            org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowModFlags source) {
+            org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowModFlags source, BigInteger datapathid) {
     
         FlowModFlagsV10 ofFlowModFlags = null;
         if (source != null) {
index 27fbdfd21534d5bb66a32b3adf440b3426cebee9..2dfede1aa5b5a28f4d841d62464a40b602fac6b4 100644 (file)
@@ -8,6 +8,8 @@
 
 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match;
 
+import java.math.BigInteger;
+
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.Convertor;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.Match;
 
@@ -22,5 +24,5 @@ public interface MatchConvertor<E> extends Convertor<Match, E> {
      * @return converted match (into OF-API model)
      */
     @Override
-    E convert(Match source);
+    E convert(Match source,BigInteger datapathid);
 }
index 7d18d6c8a0176f73bd85cd4e5208a7a85e1698e5..90080bae147e5e936b197d28992f54cd0b0033d5 100644 (file)
@@ -14,6 +14,7 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.opendaylight.openflowplugin.openflow.md.util.ByteUtil;
+import org.opendaylight.openflowplugin.openflow.md.util.InventoryDataServiceUtil;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Dscp;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;
@@ -181,15 +182,15 @@ public class MatchConvertorImpl implements MatchConvertor<List<MatchEntries>> {
     private static final short PROTO_UDP = 17;
 
     @Override
-    public List<MatchEntries> convert(org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.Match match) {
+    public List<MatchEntries> convert(org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.Match match,BigInteger datapathid) {
         List<MatchEntries> matchEntriesList = new ArrayList<>();
 
         if (match.getInPort() != null) {
-            matchEntriesList.add(toOfPort(InPort.class, match.getInPort()));
+            matchEntriesList.add(toOfPort(InPort.class, InventoryDataServiceUtil.portNumberfromNodeConnectorId(match.getInPort())));
         }
 
         if (match.getInPhyPort() != null) {
-            matchEntriesList.add(toOfPort(InPhyPort.class, match.getInPhyPort()));
+            matchEntriesList.add(toOfPort(InPhyPort.class, InventoryDataServiceUtil.portNumberfromNodeConnectorId(match.getInPhyPort())));
         }
 
         org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.Metadata metadata = match
@@ -403,7 +404,7 @@ public class MatchConvertorImpl implements MatchConvertor<List<MatchEntries>> {
      * @return
      * @author avishnoi@in.ibm.com
      */
-    public static Match fromOFMatchV10ToSALMatch(MatchV10 swMatch){
+    public static Match fromOFMatchV10ToSALMatch(MatchV10 swMatch,BigInteger datapathid){
         MatchBuilder matchBuilder = new MatchBuilder();
         EthernetMatchBuilder ethMatchBuilder =  new EthernetMatchBuilder();
         VlanMatchBuilder vlanMatchBuilder = new VlanMatchBuilder();
@@ -411,7 +412,7 @@ public class MatchConvertorImpl implements MatchConvertor<List<MatchEntries>> {
         IpMatchBuilder ipMatchBuilder = new IpMatchBuilder();
        
         if(swMatch.getInPort() != null){
-            matchBuilder.setInPort((long)swMatch.getInPort());
+            matchBuilder.setInPort(InventoryDataServiceUtil.nodeConnectorIdfromDatapathPortNo(datapathid,(long)swMatch.getInPort()));
         }
         
         if(swMatch.getDlSrc()!= null){
@@ -499,7 +500,7 @@ public class MatchConvertorImpl implements MatchConvertor<List<MatchEntries>> {
      * @author avishnoi@in.ibm.com
      */
     public static Match fromOFMatchToSALMatch(
-            org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.match.grouping.Match swMatch) {
+            org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.match.grouping.Match swMatch,BigInteger datapathid) {
         
         MatchBuilder matchBuilder = new MatchBuilder();
         EthernetMatchBuilder ethMatchBuilder = new EthernetMatchBuilder();
@@ -521,10 +522,10 @@ public class MatchConvertorImpl implements MatchConvertor<List<MatchEntries>> {
             
             if(ofMatch.getOxmMatchField().equals(InPort.class)){
                 PortNumberMatchEntry portNumber = ofMatch.getAugmentation(PortNumberMatchEntry.class);
-                matchBuilder.setInPort(portNumber.getPortNumber().getValue());
+                matchBuilder.setInPort(InventoryDataServiceUtil.nodeConnectorIdfromDatapathPortNo(datapathid, portNumber.getPortNumber().getValue()));
             }else if (ofMatch.getOxmMatchField().equals(InPhyPort.class)){
                 PortNumberMatchEntry portNumber = ofMatch.getAugmentation(PortNumberMatchEntry.class);
-                matchBuilder.setInPhyPort(portNumber.getPortNumber().getValue());
+                matchBuilder.setInPhyPort(InventoryDataServiceUtil.nodeConnectorIdfromDatapathPortNo(datapathid,portNumber.getPortNumber().getValue()));
             }else if(ofMatch.getOxmMatchField().equals(Metadata.class)){
                 MetadataBuilder metadataBuilder = new MetadataBuilder();
                 MetadataMatchEntry metadataMatchEntry = ofMatch.getAugmentation(MetadataMatchEntry.class);
index 214e46355f7070636e5ab0cee170f20e85e0aa5c..323c1f050afd69c8e166f2c01bcb806a0a545283 100644 (file)
@@ -8,8 +8,12 @@
 
 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match;
 
+import java.math.BigInteger;
+
+import org.opendaylight.openflowplugin.openflow.md.util.InventoryDataServiceUtil;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.Match;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.EthernetMatch;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.IpMatch;
@@ -40,7 +44,7 @@ public class MatchConvertorV10Impl implements MatchConvertor<MatchV10> {
      * @author avishnoi@in.ibm.com
      */
     @Override
-    public MatchV10 convert(Match match) {
+    public MatchV10 convert(Match match,BigInteger datapathid) {
         MatchV10Builder matchBuilder = new MatchV10Builder();
         boolean _dLDST = true;
         boolean _dLSRC = true;
@@ -79,7 +83,7 @@ public class MatchConvertorV10Impl implements MatchConvertor<MatchV10> {
             _dLVLAN = convertDlVlan(matchBuilder, vlanMatch);
             _dLVLANPCP = convertDlVlanPcp(matchBuilder, vlanMatch);
         }
-        Long inPort = match.getInPort();
+        NodeConnectorId inPort = match.getInPort();
         if(inPort!=null){
             _iNPORT = convertInPortMatch(matchBuilder, inPort);
         }
@@ -323,9 +327,9 @@ public class MatchConvertorV10Impl implements MatchConvertor<MatchV10> {
      * @param matchBuilder
      * @param inPort
      */
-    private static boolean convertInPortMatch(MatchV10Builder matchBuilder, Long inPort) {
+    private static boolean convertInPortMatch(MatchV10Builder matchBuilder, NodeConnectorId inPort) {
         if (inPort != null) {
-            matchBuilder.setInPort(inPort.intValue());
+            matchBuilder.setInPort(InventoryDataServiceUtil.portNumberfromNodeConnectorId(inPort).intValue());
             return false;
         }
         return true;
diff --git a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/translator/FeaturesV10ToNodeConnectorUpdatedTranslator.java b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/translator/FeaturesV10ToNodeConnectorUpdatedTranslator.java
new file mode 100644 (file)
index 0000000..6368070
--- /dev/null
@@ -0,0 +1,41 @@
+package org.opendaylight.openflowplugin.openflow.md.core.translator;
+
+import java.math.BigInteger;
+import java.util.Collections;
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import org.opendaylight.openflowplugin.openflow.md.core.IMDMessageTranslator;
+import org.opendaylight.openflowplugin.openflow.md.core.SwitchConnectionDistinguisher;
+import org.opendaylight.openflowplugin.openflow.md.core.session.SessionContext;
+import org.opendaylight.openflowplugin.openflow.md.util.PortTranslatorUtil;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetFeaturesOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.features.reply.PhyPort;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class FeaturesV10ToNodeConnectorUpdatedTranslator implements IMDMessageTranslator<OfHeader, List<DataObject>> {
+    protected static final Logger LOG = LoggerFactory
+            .getLogger(FeaturesV10ToNodeConnectorUpdatedTranslator.class);
+
+    @Override
+    public List<DataObject> translate(SwitchConnectionDistinguisher cookie,
+            SessionContext sc, OfHeader msg) {
+        if(msg instanceof GetFeaturesOutput) {        
+            GetFeaturesOutput features = (GetFeaturesOutput) msg;
+            List<DataObject> list = new CopyOnWriteArrayList<DataObject>();
+            BigInteger datapathId = sc.getFeatures().getDatapathId();
+            if( features.getPhyPort() != null ) {
+                for (PhyPort port : features.getPhyPort()) {
+                    list.add(PortTranslatorUtil.translatePort(msg.getVersion(), datapathId, port.getPortNo(), port));
+                }
+            }
+            return list;
+        } else {
+            // TODO - Do something smarter than returning null if translation fails... what Exception should we throw here?
+            return Collections.emptyList();
+        }
+    }
+}
index 1a746accfd336db80c809e17c9a69cf6a2de0291..8912585da37feea4bf797fbfed34c54290cd2fec 100644 (file)
@@ -160,10 +160,10 @@ public class FlowRemovedTranslator implements IMDMessageTranslator<OfHeader, Lis
             org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.match.grouping.Match ofMatch = ofFlow
                     .getMatch();
             if (ofMatch != null) {
-                salFlowRemoved.setMatch(fromMatch(ofMatch));
+                salFlowRemoved.setMatch(fromMatch(ofMatch,sc.getFeatures().getDatapathId()));
             }
             else if(ofFlow.getMatchV10() != null){
-                MatchBuilder matchBuilder = new MatchBuilder(MatchConvertorImpl.fromOFMatchV10ToSALMatch(ofFlow.getMatchV10()));
+                MatchBuilder matchBuilder = new MatchBuilder(MatchConvertorImpl.fromOFMatchV10ToSALMatch(ofFlow.getMatchV10(),sc.getFeatures().getDatapathId()));
                 salFlowRemoved.setMatch(matchBuilder.build());
             }
             salFlowRemoved.setNode(new NodeRef(InventoryDataServiceUtil.identifierFromDatapathId(sc.getFeatures()
@@ -178,7 +178,7 @@ public class FlowRemovedTranslator implements IMDMessageTranslator<OfHeader, Lis
     
     
     public Match fromMatch(
-            org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.match.grouping.Match ofMatch) {
+            org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.match.grouping.Match ofMatch,BigInteger datapathid) {
         MatchBuilder matchBuilder = new MatchBuilder();
         EthernetMatchBuilder ethernetMatch = null;
         VlanMatchBuilder vlanMatch = null;
@@ -196,11 +196,11 @@ public class FlowRemovedTranslator implements IMDMessageTranslator<OfHeader, Lis
         for (MatchEntries entry : ofMatch.getMatchEntries()) {
             Class<? extends MatchField> field = entry.getOxmMatchField();
             if (field.equals(InPort.class)) {
-                matchBuilder.setInPort(entry.getAugmentation(PortNumberMatchEntry.class).getPortNumber().getValue()
-                        .longValue());
+                matchBuilder.setInPort(InventoryDataServiceUtil.nodeConnectorIdfromDatapathPortNo(datapathid,entry.getAugmentation(PortNumberMatchEntry.class).getPortNumber().getValue()
+                        .longValue()));
             } else if (field.equals(InPhyPort.class)) {
-                matchBuilder.setInPhyPort(entry.getAugmentation(PortNumberMatchEntry.class).getPortNumber().getValue()
-                        .longValue());
+                matchBuilder.setInPhyPort(InventoryDataServiceUtil.nodeConnectorIdfromDatapathPortNo(datapathid,entry.getAugmentation(PortNumberMatchEntry.class).getPortNumber().getValue()
+                        .longValue()));
             } else if (field.equals(Metadata.class)) {
                 MetadataBuilder metadata = new MetadataBuilder();
                 metadata.setMetadata(new BigInteger(entry.getAugmentation(MetadataMatchEntry.class).getMetadata()));
index e79bbc7cef0fc933d5f7d59d44976e0e5424b3c1..2b19dd09bd92c2edae3c6158cf0dd2406dc41f7b 100644 (file)
@@ -38,23 +38,7 @@ public class MultiPartReplyPortToNodeConnectorUpdatedTranslator implements IMDMe
             List<DataObject> list = new CopyOnWriteArrayList<DataObject>();
             for ( Ports port : body.getPorts() ) {
                 LOG.info("Port: " + port);
-                port.getPortNo();
-                NodeConnectorUpdatedBuilder builder = InventoryDataServiceUtil
-                .nodeConnectorUpdatedBuilderFromDatapathIdPortNo(datapathId,port.getPortNo());
-                FlowCapableNodeConnectorUpdatedBuilder fcncub = new FlowCapableNodeConnectorUpdatedBuilder();
-                fcncub.setAdvertisedFeatures(PortTranslatorUtil.translatePortFeatures(port.getAdvertisedFeatures()));
-                fcncub.setConfiguration(PortTranslatorUtil.translatePortConfig(port.getConfig()));
-                fcncub.setCurrentFeature(PortTranslatorUtil.translatePortFeatures(port.getCurrentFeatures()));
-                fcncub.setCurrentSpeed(port.getCurrSpeed());
-                fcncub.setHardwareAddress(port.getHwAddr());
-                fcncub.setMaximumSpeed(port.getMaxSpeed());
-                fcncub.setName(port.getName());
-                fcncub.setPeerFeatures(PortTranslatorUtil.translatePortFeatures(port.getPeerFeatures()));
-                fcncub.setPortNumber(port.getPortNo());
-                fcncub.setState(PortTranslatorUtil.translatePortState(port.getState()));
-                fcncub.setSupported(PortTranslatorUtil.translatePortFeatures(port.getSupportedFeatures()));
-                builder.addAugmentation(FlowCapableNodeConnectorUpdated.class, fcncub.build());
-                list.add(builder.build());
+                list.add(PortTranslatorUtil.translatePort(msg.getVersion(), datapathId, port.getPortNo(), port));
             }
             return list;
         } else {
index 79f76b2e1f2a22d5281aaa1c0a3a86be59b17e74..29280e31dcdf25d03291e5c903f6cabf612fbcc9 100644 (file)
@@ -128,7 +128,7 @@ public class MultipartReplyTranslator implements IMDMessageTranslator<OfHeader,
                 message.setTransactionId(generateTransactionId(mpReply.getXid()));
                 MultipartReplyFlowCase caseBody = (MultipartReplyFlowCase)mpReply.getMultipartReplyBody();
                 MultipartReplyFlow replyBody = caseBody.getMultipartReplyFlow();
-                message.setFlowAndStatisticsMapList(flowStatsConvertor.toSALFlowStatsList(replyBody.getFlowStats()));
+                message.setFlowAndStatisticsMapList(flowStatsConvertor.toSALFlowStatsList(replyBody.getFlowStats(),sc.getFeatures().getDatapathId()));
                 
                 logger.debug("Converted flow statistics : {}",message.build().toString());
                 listDataObject.add(message.build());
index bd44bc66793c903bd01809b4f32104bfb71a2976..7bebcd1c9c33ee459275713cb7ce8db4cdf1fb15 100644 (file)
@@ -5,6 +5,7 @@ import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.CopyOnWriteArrayList;
 
+import org.opendaylight.openflowplugin.openflow.md.OFConstants;
 import org.opendaylight.openflowplugin.openflow.md.core.IMDMessageTranslator;
 import org.opendaylight.openflowplugin.openflow.md.core.SwitchConnectionDistinguisher;
 import org.opendaylight.openflowplugin.openflow.md.core.session.SessionContext;
@@ -32,23 +33,9 @@ public class PortStatusMessageToNodeConnectorUpdatedTranslator implements IMDMes
             List<DataObject> list = new CopyOnWriteArrayList<DataObject>();
             BigInteger datapathId = sc.getFeatures().getDatapathId();
             Long portNo = port.getPortNo();
-            LOG.error("PortStatusMessage: dataPathId {} portNo {}",datapathId,portNo);
-            NodeConnectorUpdatedBuilder builder = InventoryDataServiceUtil
-                    .nodeConnectorUpdatedBuilderFromDatapathIdPortNo(datapathId,port.getPortNo());
-            FlowCapableNodeConnectorUpdatedBuilder fcncub = new FlowCapableNodeConnectorUpdatedBuilder();
-            fcncub.setAdvertisedFeatures(PortTranslatorUtil.translatePortFeatures(port.getAdvertisedFeatures()));
-            fcncub.setConfiguration(PortTranslatorUtil.translatePortConfig(port.getConfig()));
-            fcncub.setCurrentFeature(PortTranslatorUtil.translatePortFeatures(port.getCurrentFeatures()));
-            fcncub.setCurrentSpeed(port.getCurrSpeed());
-            fcncub.setHardwareAddress(port.getHwAddr());
-            fcncub.setMaximumSpeed(port.getMaxSpeed());
-            fcncub.setName(port.getName());
-            fcncub.setPeerFeatures(PortTranslatorUtil.translatePortFeatures(port.getPeerFeatures()));
-            fcncub.setPortNumber(port.getPortNo());
-            fcncub.setState(PortTranslatorUtil.translatePortState(port.getState()));
-            fcncub.setSupported(PortTranslatorUtil.translatePortFeatures(port.getSupportedFeatures()));
-            builder.addAugmentation(FlowCapableNodeConnectorUpdated.class, fcncub.build());
-            list.add(builder.build());
+            Short version = port.getVersion();
+            LOG.error("PortStatusMessage: version {}  dataPathId {} portNo {}",version, datapathId,portNo);
+            list.add(PortTranslatorUtil.translatePort(version, datapathId, portNo, port));
             return list;
         } else {
             // TODO - Do something smarter than returning null if translation fails... what Exception should we throw here?
index 3e80c812ee4421e4deca38e4a11332203f45a145..7efd74df945ab6f3d50bad0d7cbf3dbc561d4967 100644 (file)
@@ -1,8 +1,5 @@
 package org.opendaylight.openflowplugin.openflow.md.util;
 
-import java.math.BigInteger;
-import java.util.List;
-
 import org.opendaylight.controller.sal.binding.api.data.DataModificationTransaction;
 import org.opendaylight.openflowplugin.openflow.md.core.session.OFSessionUtil;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
@@ -21,6 +18,9 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.math.BigInteger;
+import java.util.List;
+
 public class InventoryDataServiceUtil {
     private final static Logger LOG = LoggerFactory.getLogger(InventoryDataServiceUtil.class);
 
@@ -150,13 +150,24 @@ public class InventoryDataServiceUtil {
     }
     
     public static Long portNumberfromNodeConnectorId(NodeConnectorId ncId) {
-        String[] split = ncId.getValue().split(":");
+        return portNumberfromNodeConnectorId(ncId.getValue());
+    }
+
+    public static Long portNumberfromNodeConnectorId(String ncId){
+        String[] split = ncId.split(":");
+
+        // If the length is just one then this cannot be the new MD-SAL style node connector Id which
+        // is of the form openflow:1:3.
+        if(split.length == 1){
+            return Long.decode(ncId);
+        }
         String portNoString = split[split.length-1];
         Long portNo = Long.decode(portNoString);
         return portNo;
     }
 
 
+
     public static NodeConnectorRef nodeConnectorRefFromDatapathIdPortno(BigInteger datapathId, Long portNo) {
         return new NodeConnectorRef(nodeConnectorInstanceIdentifierFromDatapathIdPortno(datapathId, portNo));
     }
index 760c43f39f7a6a44a89f954853c6d7ad0cdd6f6f..2509fabc8752342f3adb90de75446a61487fd6a5 100644 (file)
@@ -1,10 +1,21 @@
 package org.opendaylight.openflowplugin.openflow.md.util;
 
+import java.math.BigInteger;
+
+import org.opendaylight.openflowplugin.openflow.md.OFConstants;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnectorUpdated;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnectorUpdatedBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.flow.capable.port.State;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.flow.capable.port.StateBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorUpdated;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorUpdatedBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortConfig;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortConfigV10;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortFeatures;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortFeaturesV10;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortState;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortStateV10;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.Port;
 
 public class PortTranslatorUtil {
     public static  org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortFeatures translatePortFeatures(PortFeatures apf) {
@@ -17,6 +28,18 @@ public class PortTranslatorUtil {
         }
         return napf;
     }
+    
+    public static org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortFeatures translatePortFeatures(
+            PortFeaturesV10 apf) {
+        org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortFeatures napf = null;
+        if(apf != null){
+                napf = new org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortFeatures(
+                        false,apf.is_100mbFd(),apf.is_100mbHd(),apf.is_10gbFd(),apf.is_10mbFd(),apf.is_10mbHd(),
+                        apf.is_1gbFd(),apf.is_1gbHd(),false,false,apf.isAutoneg(),apf.isCopper(),apf.isFiber(),false,
+                        apf.isPause(), apf.isPauseAsym());
+        }
+        return napf;
+    }
 
     public static  State translatePortState(PortState state) {
         StateBuilder nstate = new StateBuilder();
@@ -27,6 +50,16 @@ public class PortTranslatorUtil {
         }
         return nstate.build();
     }
+    
+    public static State translatePortState(PortStateV10 state) {
+        StateBuilder nstate = new StateBuilder();
+        if(state !=null) {
+            nstate.setBlocked(state.isBlocked());
+            nstate.setLinkDown(state.isLinkDown());
+            nstate.setLive(state.isLive());
+        }
+        return nstate.build();
+    }
 
     public static org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortConfig translatePortConfig(PortConfig pc) {
         org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortConfig npc = null;
@@ -36,4 +69,42 @@ public class PortTranslatorUtil {
         }
         return npc;
     }
+    
+    public static org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortConfig translatePortConfig(
+            PortConfigV10 pc) {
+        org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortConfig npc = null;
+        if(pc != null) {
+                npc = new org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortConfig(pc.isNoFwd(),
+                        pc.isNoPacketIn(), pc.isNoRecv(), pc.isPortDown());
+        }
+        return npc;
+    }
+    
+    public static NodeConnectorUpdated translatePort(Short version,BigInteger datapathId,Long portNo, Port port) {
+        NodeConnectorUpdatedBuilder builder = InventoryDataServiceUtil
+                .nodeConnectorUpdatedBuilderFromDatapathIdPortNo(datapathId,port.getPortNo());
+        FlowCapableNodeConnectorUpdatedBuilder fcncub = new FlowCapableNodeConnectorUpdatedBuilder();
+        if(version == OFConstants.OFP_VERSION_1_3) {
+            fcncub.setAdvertisedFeatures(PortTranslatorUtil.translatePortFeatures(port.getAdvertisedFeatures()));
+            fcncub.setConfiguration(PortTranslatorUtil.translatePortConfig(port.getConfig()));
+            fcncub.setCurrentFeature(PortTranslatorUtil.translatePortFeatures(port.getCurrentFeatures()));
+            fcncub.setPeerFeatures(PortTranslatorUtil.translatePortFeatures(port.getPeerFeatures()));
+            fcncub.setState(PortTranslatorUtil.translatePortState(port.getState()));
+            fcncub.setSupported(PortTranslatorUtil.translatePortFeatures(port.getSupportedFeatures()));
+        } else if (version == OFConstants.OFP_VERSION_1_0) {
+            fcncub.setAdvertisedFeatures(PortTranslatorUtil.translatePortFeatures(port.getAdvertisedFeaturesV10()));
+            fcncub.setConfiguration(PortTranslatorUtil.translatePortConfig(port.getConfigV10()));
+            fcncub.setCurrentFeature(PortTranslatorUtil.translatePortFeatures(port.getCurrentFeaturesV10()));
+            fcncub.setPeerFeatures(PortTranslatorUtil.translatePortFeatures(port.getPeerFeaturesV10()));
+            fcncub.setState(PortTranslatorUtil.translatePortState(port.getStateV10()));
+            fcncub.setSupported(PortTranslatorUtil.translatePortFeatures(port.getSupportedFeaturesV10()));
+        }
+        fcncub.setCurrentSpeed(port.getCurrSpeed());
+        fcncub.setHardwareAddress(port.getHwAddr());
+        fcncub.setMaximumSpeed(port.getMaxSpeed());
+        fcncub.setName(port.getName());
+        fcncub.setPortNumber(port.getPortNo());
+        builder.addAugmentation(FlowCapableNodeConnectorUpdated.class, fcncub.build());
+        return builder.build();
+    }
 }
index fabeb85e541e8b6390ba2b713139a31a714cd8e1..d20798b7835ae5cf41ca72101b1562c38a004627 100644 (file)
@@ -35,6 +35,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.flow
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev131103.TransactionId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.FlowModInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetFeaturesOutput;
 import org.opendaylight.yangtools.yang.common.RpcError;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 
@@ -53,6 +54,8 @@ public class ModelDrivenSwitchImplTest {
     private ConnectionConductor conductor;
     @Mock
     private IMessageDispatchService messageDispatchService;
+    @Mock
+    private GetFeaturesOutput features;
 
     /**
      * @throws java.lang.Exception
@@ -64,6 +67,9 @@ public class ModelDrivenSwitchImplTest {
         Mockito.when(conductor.getVersion())
             .thenReturn(OFConstants.OFP_VERSION_1_0)
             .thenReturn(OFConstants.OFP_VERSION_1_3);
+        Mockito.when(context.getFeatures()).thenReturn(features);
+        Mockito.when(features.getDatapathId()).thenReturn(BigInteger.valueOf(1));
+
         mdSwitchOF10 = new ModelDrivenSwitchImpl(null, null, context);
         mdSwitchOF13 = new ModelDrivenSwitchImpl(null, null, context);
     }
index 652df87fd2a44718a5b3906e22885d20d14c8ca6..cb360905dabd04e0bb299ba1f148723f083671f5 100644 (file)
@@ -1,5 +1,6 @@
 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;
 
+import java.math.BigInteger;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -46,6 +47,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.acti
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.OutputPortValues;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EthertypeAction;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.GroupIdAction;
@@ -87,7 +89,7 @@ public class ActionConvertorTest {
         pbbActionData();
         setFieldData();
         setExperimenterData();
-        List<ActionsList> OFActionsList = ActionConvertor.getActionList(actions, (short) 0X4);
+        List<ActionsList> OFActionsList = ActionConvertor.getActionList(actions, (short) 0X4,BigInteger.valueOf(1));
 
        // OutputActions(OFActionsList);
 
@@ -105,7 +107,7 @@ public class ActionConvertorTest {
 
         SetFieldBuilder matchBuilder = setFA;
 
-        matchBuilder.setInPort(2125L);
+        matchBuilder.setInPort(new NodeConnectorId("openflow:1:2125"));
 
         SetFieldBuilder setFB = new SetFieldBuilder();
 
index 6102e4247eba2d71d42a2f05d2aff884954eae2a..dc708a7e019e464d0828ffc03c8e4e9b8b877859 100644 (file)
@@ -1,5 +1,6 @@
 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;
 
+import java.math.BigInteger;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -110,7 +111,7 @@ public class GroupConvertorTest {
 
         addGroupBuilder.setBuckets(buckets);
 
-        GroupModInputBuilder outAddGroupInput = GroupConvertor.toGroupModInput(addGroupBuilder.build(), (short) 0X4);
+        GroupModInputBuilder outAddGroupInput = GroupConvertor.toGroupModInput(addGroupBuilder.build(), (short) 0X4,BigInteger.valueOf(1));
 
         Assert.assertEquals(GroupModCommand.OFPGCADD, outAddGroupInput.getCommand());
         Assert.assertEquals(GroupType.OFPGTALL, outAddGroupInput.getType());
@@ -160,7 +161,7 @@ public class GroupConvertorTest {
 
         addGroupBuilder.setGroupType(GroupTypes.GroupAll);
 
-        GroupModInputBuilder outAddGroupInput = GroupConvertor.toGroupModInput(addGroupBuilder.build(), (short) 0X4);
+        GroupModInputBuilder outAddGroupInput = GroupConvertor.toGroupModInput(addGroupBuilder.build(), (short) 0X4,BigInteger.valueOf(1));
 
         Assert.assertEquals(GroupModCommand.OFPGCADD, outAddGroupInput.getCommand());
         Assert.assertEquals(GroupType.OFPGTALL, outAddGroupInput.getType());
@@ -216,7 +217,7 @@ public class GroupConvertorTest {
 
         addGroupBuilder.setBuckets(buckets);
 
-        GroupModInputBuilder outAddGroupInput = GroupConvertor.toGroupModInput(addGroupBuilder.build(), (short) 0X4);
+        GroupModInputBuilder outAddGroupInput = GroupConvertor.toGroupModInput(addGroupBuilder.build(), (short) 0X4,BigInteger.valueOf(1));
 
         Assert.assertEquals(GroupModCommand.OFPGCADD, outAddGroupInput.getCommand());
         Assert.assertEquals(GroupType.OFPGTFF, outAddGroupInput.getType());
@@ -329,7 +330,7 @@ public class GroupConvertorTest {
 
         addGroupBuilder.setBuckets(buckets);
 
-        GroupModInputBuilder outAddGroupInput = GroupConvertor.toGroupModInput(addGroupBuilder.build(), (short) 0X4);
+        GroupModInputBuilder outAddGroupInput = GroupConvertor.toGroupModInput(addGroupBuilder.build(), (short) 0X4,BigInteger.valueOf(1));
 
         Assert.assertEquals(GroupModCommand.OFPGCADD, outAddGroupInput.getCommand());
         Assert.assertEquals(GroupType.OFPGTALL, outAddGroupInput.getType());
index 2a3074c930fd39ccd89c3f5e3b9ccd859606faa4..8e51e3d6e08bc0cf8d97c034c6e42190b52a7842 100644 (file)
@@ -1,5 +1,7 @@
 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.flowflag;
 
+import java.math.BigInteger;
+
 import junit.framework.Assert;
 
 import org.junit.Before;
@@ -36,7 +38,7 @@ public class FlowFlagReactorTest {
         for (FlowModFlags fFlag : flowFlags) {
             target.setFlags(null);
             FlowFlagReactor.getInstance().convert(fFlag, 
-                    OFConstants.OFP_VERSION_1_3, target);
+                    OFConstants.OFP_VERSION_1_3, target,BigInteger.valueOf(1));
             Assert.assertNotNull(target.getFlags());
         }
     }
@@ -50,7 +52,7 @@ public class FlowFlagReactorTest {
         for (FlowModFlags fFlag : flowFlags) {
             target.setFlagsV10(null);
             FlowFlagReactor.getInstance().convert(fFlag, 
-                    OFConstants.OFP_VERSION_1_0, target);
+                    OFConstants.OFP_VERSION_1_0, target,BigInteger.valueOf(1));
             Assert.assertNotNull(target.getFlagsV10());
         }
     }
index e59e7a9769c1cd5ad68083d3d56a1172095aae00..ee46c6ed644d8e3b529fab6e0115299749f8ab24 100644 (file)
@@ -1,5 +1,7 @@
 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match;
 
+import java.math.BigInteger;
+
 import junit.framework.Assert;
 
 import org.junit.Before;
@@ -41,7 +43,7 @@ public class MatchReactorTest {
     public void testMatchConvertorV13_flow() {
         FlowModInputBuilder target = new FlowModInputBuilder();
         MatchReactor.getInstance().convert(matchBuilder.build(), 
-                OFConstants.OFP_VERSION_1_3, target);
+                OFConstants.OFP_VERSION_1_3, target,BigInteger.valueOf(1));
         Assert.assertNotNull(target.getMatch());
     }
     
@@ -52,7 +54,7 @@ public class MatchReactorTest {
     public void testMatchConvertorV10_flow() {
         FlowModInputBuilder target = new FlowModInputBuilder();
         MatchReactor.getInstance().convert(matchBuilder.build(), 
-                OFConstants.OFP_VERSION_1_0, target);
+                OFConstants.OFP_VERSION_1_0, target,BigInteger.valueOf(1));
         Assert.assertNotNull(target.getMatchV10());
     }
 
@@ -63,7 +65,7 @@ public class MatchReactorTest {
     public void testMatchConvertorV13_action() {
         OxmFieldsActionBuilder target = new OxmFieldsActionBuilder();
         MatchReactor.getInstance().convert(matchBuilder.build(), 
-                OFConstants.OFP_VERSION_1_3, target);
+                OFConstants.OFP_VERSION_1_3, target,BigInteger.valueOf(1));
         Assert.assertNotNull(target.getMatchEntries());
     }
     
@@ -74,7 +76,7 @@ public class MatchReactorTest {
     public void testMatchConvertorV13_mpRequestFlow() {
         MultipartRequestFlowBuilder target = new MultipartRequestFlowBuilder();
         MatchReactor.getInstance().convert(matchBuilder.build(), 
-                OFConstants.OFP_VERSION_1_3, target);
+                OFConstants.OFP_VERSION_1_3, target,BigInteger.valueOf(1));
         Assert.assertNotNull(target.getMatch());
     }
     
@@ -85,7 +87,7 @@ public class MatchReactorTest {
     public void testMatchConvertorV10_mpRequestFlow() {
         MultipartRequestFlowBuilder target = new MultipartRequestFlowBuilder();
         MatchReactor.getInstance().convert(matchBuilder.build(), 
-                OFConstants.OFP_VERSION_1_0, target);
+                OFConstants.OFP_VERSION_1_0, target,BigInteger.valueOf(1));
         Assert.assertNotNull(target.getMatchV10());
     }
     
@@ -96,7 +98,7 @@ public class MatchReactorTest {
     public void testMatchConvertorV13_mpRequestAggregate() {
         MultipartRequestAggregateBuilder target = new MultipartRequestAggregateBuilder();
         MatchReactor.getInstance().convert(matchBuilder.build(), 
-                OFConstants.OFP_VERSION_1_3, target);
+                OFConstants.OFP_VERSION_1_3, target,BigInteger.valueOf(1));
         Assert.assertNotNull(target.getMatch());
     }
     
@@ -107,7 +109,7 @@ public class MatchReactorTest {
     public void testMatchConvertorV10_mpRequestAggregate() {
         MultipartRequestAggregateBuilder target = new MultipartRequestAggregateBuilder();
         MatchReactor.getInstance().convert(matchBuilder.build(), 
-                OFConstants.OFP_VERSION_1_0, target);
+                OFConstants.OFP_VERSION_1_0, target,BigInteger.valueOf(1));
         Assert.assertNotNull(target.getMatchV10());
     }
     
index df1a59bc5a61c92cfd248ee2f350cb8987e1ca32..aea2830318062f5aa27a1c9809ef3f36e59a3ad3 100644 (file)
@@ -136,6 +136,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instru
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorRemoved;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorUpdated;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
@@ -488,7 +489,7 @@ public class OpenflowpluginTestCommandProvider implements CommandProvider {
         case "f31":
             id += 31;
             flow.setMatch(createMatch1().build());
-            flow.setInstructions(createAppyActionInstruction23().build());
+            flow.setInstructions(createAppyActionInstruction23(nodeBuilder.getId()).build());
             break;
         case "f32":
             id += 32;
@@ -552,7 +553,7 @@ public class OpenflowpluginTestCommandProvider implements CommandProvider {
             break;
         case "f44":
             id += 44;
-            flow.setMatch(createInphyportMatch().build());
+            flow.setMatch(createInphyportMatch(nodeBuilder.getId()).build());
             flow.setInstructions(createDropInstructions().build());
             break;
         case "f45":
@@ -1583,13 +1584,13 @@ public class OpenflowpluginTestCommandProvider implements CommandProvider {
         return isb;
     }
 
-    private static InstructionsBuilder createAppyActionInstruction23() {
+    private static InstructionsBuilder createAppyActionInstruction23(NodeId nodeId) {
 
         List<Action> actionList = new ArrayList<Action>();
         ActionBuilder ab = new ActionBuilder();
 
         SetFieldBuilder setFieldBuilder = new SetFieldBuilder();
-        setFieldBuilder.setInPort(new Long(2));
+        setFieldBuilder.setInPort(new NodeConnectorId(nodeId + ":2"));
         actionList.add(ab.build());
 
         // Create an Apply Action
@@ -2683,10 +2684,10 @@ public class OpenflowpluginTestCommandProvider implements CommandProvider {
         return match;
     }  
 
-    private static MatchBuilder createInphyportMatch() {
+    private static MatchBuilder createInphyportMatch(NodeId nodeId) {
         MatchBuilder match = new MatchBuilder();
-        match.setInPort(202L);
-        match.setInPhyPort(10122L);
+        match.setInPort(new NodeConnectorId(nodeId+":202"));
+        match.setInPhyPort(new NodeConnectorId(nodeId+":10122"));
         return match;
     }