From a73a74356cdfaf8f766179ea52baab25e9e6c5e7 Mon Sep 17 00:00:00 2001 From: Ed Warnicke Date: Sat, 4 Jan 2014 14:01:44 -0800 Subject: [PATCH] Fix Bug 271 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::. Changed logic to extract it but only for OF1.3. Fix for Bug 271 Change-Id: Iafd21693313e79f25ad16a24a4e3a2baec59a403 Signed-off-by: Moiz Raja Signed-off-by: Ed Warnicke --- .../md/core/ConnectionConductorImpl.java | 5 ++ .../openflow/md/core/MDController.java | 3 + .../md/core/sal/ModelDrivenSwitchImpl.java | 16 ++--- .../core/sal/convertor/ActionConvertor.java | 25 ++++--- .../md/core/sal/convertor/FlowConvertor.java | 22 +++--- .../convertor/FlowStatsResponseConvertor.java | 11 +-- .../md/core/sal/convertor/GroupConvertor.java | 9 +-- .../sal/convertor/common/ConvertReactor.java | 5 +- .../core/sal/convertor/common/Convertor.java | 4 +- .../convertor/flowflag/FlowFlagConvertor.java | 4 +- .../flowflag/FlowFlagsConvertorImpl.java | 4 +- .../flowflag/FlowFlagsConvertorV10Impl.java | 4 +- .../sal/convertor/match/MatchConvertor.java | 4 +- .../convertor/match/MatchConvertorImpl.java | 17 ++--- .../match/MatchConvertorV10Impl.java | 12 ++-- ...esV10ToNodeConnectorUpdatedTranslator.java | 41 +++++++++++ .../translator/FlowRemovedTranslator.java | 14 ++-- ...yPortToNodeConnectorUpdatedTranslator.java | 18 +---- .../translator/MultipartReplyTranslator.java | 2 +- ...ssageToNodeConnectorUpdatedTranslator.java | 21 ++---- .../md/util/InventoryDataServiceUtil.java | 19 +++-- .../openflow/md/util/PortTranslatorUtil.java | 71 +++++++++++++++++++ .../core/sal/ModelDrivenSwitchImplTest.java | 6 ++ .../sal/convertor/ActionConvertorTest.java | 6 +- .../sal/convertor/GroupConvertorTest.java | 9 +-- .../flowflag/FlowFlagReactorTest.java | 6 +- .../sal/convertor/match/MatchReactorTest.java | 16 +++-- .../OpenflowpluginTestCommandProvider.java | 15 ++-- 28 files changed, 263 insertions(+), 126 deletions(-) create mode 100644 openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/translator/FeaturesV10ToNodeConnectorUpdatedTranslator.java diff --git a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/ConnectionConductorImpl.java b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/ConnectionConductorImpl.java index 98e9037eb1..912cc6e72c 100644 --- a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/ConnectionConductorImpl.java +++ b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/ConnectionConductorImpl.java @@ -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); } } diff --git a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/MDController.java b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/MDController.java index ca3da38b4c..1f20879725 100644 --- a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/MDController.java +++ b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/MDController.java @@ -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 notificationPopListener = new NotificationPopListener(); diff --git a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/ModelDrivenSwitchImpl.java b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/ModelDrivenSwitchImpl.java index a0c8308f0e..e39742497b 100644 --- a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/ModelDrivenSwitchImpl.java +++ b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/ModelDrivenSwitchImpl.java @@ -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()); diff --git a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/ActionConvertor.java b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/ActionConvertor.java index 49d4d4e1f7..61920bef65 100644 --- a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/ActionConvertor.java +++ b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/ActionConvertor.java @@ -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 getActionList( List 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"); } diff --git a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/FlowConvertor.java b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/FlowConvertor.java index 4c5f037767..04af484f31 100644 --- a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/FlowConvertor.java +++ b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/FlowConvertor.java @@ -89,7 +89,7 @@ public class FlowConvertor { /** default match entries - empty */ public static final List DEFAULT_MATCH_ENTRIES = new ArrayList(); - 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 toInstructions( org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Instructions instructions, - short version) { + short version,BigInteger datapathid) { List 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 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); } } diff --git a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/FlowStatsResponseConvertor.java b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/FlowStatsResponseConvertor.java index f5f7c47ec6..0c16970002 100644 --- a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/FlowStatsResponseConvertor.java +++ b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/FlowStatsResponseConvertor.java @@ -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 toSALFlowStatsList(List allFlowStats){ + public List toSALFlowStatsList(List allFlowStats,BigInteger datapathid){ List convertedSALFlowStats = new ArrayList(); 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(), diff --git a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/GroupConvertor.java b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/GroupConvertor.java index e9cbe346e5..f36e840431 100644 --- a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/GroupConvertor.java +++ b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/GroupConvertor.java @@ -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 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(); - 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 bucketLists, short version, int groupType) { + private static void getbucketList(Buckets buckets, List bucketLists, short version, int groupType,BigInteger datapathid) { Iterator groupBucketIterator = buckets .getBucket().iterator(); @@ -130,7 +131,7 @@ public final class GroupConvertor { bucketBuilder.setWatchPort(new PortNumber(BinContent.intToUnsignedLong(DEFAULT_WATCH_PORT.intValue()))); } - List bucketActionList = ActionConvertor.getActionList(groupBucket.getAction(), version); + List bucketActionList = ActionConvertor.getActionList(groupBucket.getAction(), version,datapathid); bucketBuilder.setActionsList(bucketActionList); BucketsList bucket = bucketBuilder.build(); bucketLists.add(bucket); diff --git a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/common/ConvertReactor.java b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/common/ConvertReactor.java index 136b5db371..3def2450ea 100644 --- a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/common/ConvertReactor.java +++ b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/common/ConvertReactor.java @@ -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 { * @param target */ @SuppressWarnings("unchecked") - public void convert(FROM source, short version, TARGET target) { + public void convert(FROM source, short version, TARGET target,BigInteger datapathid) { //lookup converter Convertor convertor = (Convertor) 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()); diff --git a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/common/Convertor.java b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/common/Convertor.java index 553ca3f8db..6f2c2e2652 100644 --- a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/common/Convertor.java +++ b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/common/Convertor.java @@ -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 { * @param source * @return converted match (into OF-API model) */ - TO convert(FROM source); + TO convert(FROM source,BigInteger datapathid); } diff --git a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/flowflag/FlowFlagConvertor.java b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/flowflag/FlowFlagConvertor.java index 389cccc193..7daa4a4d75 100644 --- a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/flowflag/FlowFlagConvertor.java +++ b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/flowflag/FlowFlagConvertor.java @@ -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 extends Convertor { * @return converted match (into OF-API model) */ @Override - E convert(FlowModFlags source); + E convert(FlowModFlags source,BigInteger datapathid); } diff --git a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/flowflag/FlowFlagsConvertorImpl.java b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/flowflag/FlowFlagsConvertorImpl.java index 2dfb2acf85..af119b1bd9 100644 --- a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/flowflag/FlowFlagsConvertorImpl.java +++ b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/flowflag/FlowFlagsConvertorImpl.java @@ -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 { @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) { diff --git a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/flowflag/FlowFlagsConvertorV10Impl.java b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/flowflag/FlowFlagsConvertorV10Impl.java index ee5dac9b1d..478b0c00c2 100644 --- a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/flowflag/FlowFlagsConvertorV10Impl.java +++ b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/flowflag/FlowFlagsConvertorV10Impl.java @@ -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 extends Convertor { * @return converted match (into OF-API model) */ @Override - E convert(Match source); + E convert(Match source,BigInteger datapathid); } diff --git a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/match/MatchConvertorImpl.java b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/match/MatchConvertorImpl.java index 7d18d6c8a0..90080bae14 100644 --- a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/match/MatchConvertorImpl.java +++ b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/match/MatchConvertorImpl.java @@ -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> { private static final short PROTO_UDP = 17; @Override - public List convert(org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.Match match) { + public List convert(org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.Match match,BigInteger datapathid) { List 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> { * @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> { 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> { * @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> { 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); diff --git a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/match/MatchConvertorV10Impl.java b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/match/MatchConvertorV10Impl.java index 214e46355f..323c1f050a 100644 --- a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/match/MatchConvertorV10Impl.java +++ b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/match/MatchConvertorV10Impl.java @@ -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 { * @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 { _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 { * @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 index 0000000000..63680701cc --- /dev/null +++ b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/translator/FeaturesV10ToNodeConnectorUpdatedTranslator.java @@ -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> { + protected static final Logger LOG = LoggerFactory + .getLogger(FeaturesV10ToNodeConnectorUpdatedTranslator.class); + + @Override + public List translate(SwitchConnectionDistinguisher cookie, + SessionContext sc, OfHeader msg) { + if(msg instanceof GetFeaturesOutput) { + GetFeaturesOutput features = (GetFeaturesOutput) msg; + List list = new CopyOnWriteArrayList(); + 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(); + } + } +} diff --git a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/translator/FlowRemovedTranslator.java b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/translator/FlowRemovedTranslator.java index 1a746accfd..8912585da3 100644 --- a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/translator/FlowRemovedTranslator.java +++ b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/translator/FlowRemovedTranslator.java @@ -160,10 +160,10 @@ public class FlowRemovedTranslator implements IMDMessageTranslator 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())); diff --git a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/translator/MultiPartReplyPortToNodeConnectorUpdatedTranslator.java b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/translator/MultiPartReplyPortToNodeConnectorUpdatedTranslator.java index e79bbc7cef..2b19dd09bd 100644 --- a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/translator/MultiPartReplyPortToNodeConnectorUpdatedTranslator.java +++ b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/translator/MultiPartReplyPortToNodeConnectorUpdatedTranslator.java @@ -38,23 +38,7 @@ public class MultiPartReplyPortToNodeConnectorUpdatedTranslator implements IMDMe List list = new CopyOnWriteArrayList(); 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 { diff --git a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/translator/MultipartReplyTranslator.java b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/translator/MultipartReplyTranslator.java index 79f76b2e1f..29280e31dc 100644 --- a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/translator/MultipartReplyTranslator.java +++ b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/translator/MultipartReplyTranslator.java @@ -128,7 +128,7 @@ public class MultipartReplyTranslator implements IMDMessageTranslator list = new CopyOnWriteArrayList(); 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? diff --git a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/util/InventoryDataServiceUtil.java b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/util/InventoryDataServiceUtil.java index 3e80c812ee..7efd74df94 100644 --- a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/util/InventoryDataServiceUtil.java +++ b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/util/InventoryDataServiceUtil.java @@ -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)); } diff --git a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/util/PortTranslatorUtil.java b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/util/PortTranslatorUtil.java index 760c43f39f..2509fabc87 100644 --- a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/util/PortTranslatorUtil.java +++ b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/util/PortTranslatorUtil.java @@ -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(); + } } diff --git a/openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/ModelDrivenSwitchImplTest.java b/openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/ModelDrivenSwitchImplTest.java index fabeb85e54..d20798b783 100644 --- a/openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/ModelDrivenSwitchImplTest.java +++ b/openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/ModelDrivenSwitchImplTest.java @@ -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); } diff --git a/openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/ActionConvertorTest.java b/openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/ActionConvertorTest.java index 652df87fd2..cb360905da 100644 --- a/openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/ActionConvertorTest.java +++ b/openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/ActionConvertorTest.java @@ -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 OFActionsList = ActionConvertor.getActionList(actions, (short) 0X4); + List 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(); diff --git a/openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/GroupConvertorTest.java b/openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/GroupConvertorTest.java index 6102e4247e..dc708a7e01 100644 --- a/openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/GroupConvertorTest.java +++ b/openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/GroupConvertorTest.java @@ -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()); diff --git a/openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/flowflag/FlowFlagReactorTest.java b/openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/flowflag/FlowFlagReactorTest.java index 2a3074c930..8e51e3d6e0 100644 --- a/openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/flowflag/FlowFlagReactorTest.java +++ b/openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/flowflag/FlowFlagReactorTest.java @@ -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()); } } diff --git a/openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/match/MatchReactorTest.java b/openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/match/MatchReactorTest.java index e59e7a9769..ee46c6ed64 100644 --- a/openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/match/MatchReactorTest.java +++ b/openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/match/MatchReactorTest.java @@ -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()); } diff --git a/test-provider/src/main/java/org/opendaylight/openflowplugin/test/OpenflowpluginTestCommandProvider.java b/test-provider/src/main/java/org/opendaylight/openflowplugin/test/OpenflowpluginTestCommandProvider.java index df1a59bc5a..aea2830318 100644 --- a/test-provider/src/main/java/org/opendaylight/openflowplugin/test/OpenflowpluginTestCommandProvider.java +++ b/test-provider/src/main/java/org/opendaylight/openflowplugin/test/OpenflowpluginTestCommandProvider.java @@ -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 actionList = new ArrayList(); 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; } -- 2.36.6