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);
}
}
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;
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;
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>();
}
// 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);
}
// 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);
}
// 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);
}
// 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);
}
// 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);
}
// 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);
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());
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());
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;
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
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();
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)
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
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())));
} 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");
}
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");
}
/** 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());
// 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);
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
.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());
}
.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());
}
.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());
}
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()) {
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);
}
}
*/
package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;
+import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;
* @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;
* @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());
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(),
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;
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) {
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);
}
- 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();
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);
package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common;
+import java.math.BigInteger;
import java.util.HashMap;
import java.util.Map;
* @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());
package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common;
+import java.math.BigInteger;
+
/**
* converting from MD-SAL model into appropriate OF-API model
* @param source
* @return converted match (into OF-API model)
*/
- TO convert(FROM source);
+ TO convert(FROM source,BigInteger datapathid);
}
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;
* @return converted match (into OF-API model)
*/
@Override
- E convert(FlowModFlags source);
+ E convert(FlowModFlags source,BigInteger datapathid);
}
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;
@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) {
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;
@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) {
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;
* @return converted match (into OF-API model)
*/
@Override
- E convert(Match source);
+ E convert(Match source,BigInteger datapathid);
}
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;
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
* @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();
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){
* @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();
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);
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;
* @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;
_dLVLAN = convertDlVlan(matchBuilder, vlanMatch);
_dLVLANPCP = convertDlVlanPcp(matchBuilder, vlanMatch);
}
- Long inPort = match.getInPort();
+ NodeConnectorId inPort = match.getInPort();
if(inPort!=null){
_iNPORT = convertInPortMatch(matchBuilder, inPort);
}
* @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;
--- /dev/null
+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();
+ }
+ }
+}
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()
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;
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()));
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 {
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());
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;
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?
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;
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);
}
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));
}
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) {
}
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();
}
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;
}
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();
+ }
}
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;
private ConnectionConductor conductor;
@Mock
private IMessageDispatchService messageDispatchService;
+ @Mock
+ private GetFeaturesOutput features;
/**
* @throws java.lang.Exception
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);
}
package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;
+import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;
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;
pbbActionData();
setFieldData();
setExperimenterData();
- List<ActionsList> OFActionsList = ActionConvertor.getActionList(actions, (short) 0X4);
+ List<ActionsList> OFActionsList = ActionConvertor.getActionList(actions, (short) 0X4,BigInteger.valueOf(1));
// OutputActions(OFActionsList);
SetFieldBuilder matchBuilder = setFA;
- matchBuilder.setInPort(2125L);
+ matchBuilder.setInPort(new NodeConnectorId("openflow:1:2125"));
SetFieldBuilder setFB = new SetFieldBuilder();
package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;
+import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;
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());
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());
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());
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());
package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.flowflag;
+import java.math.BigInteger;
+
import junit.framework.Assert;
import org.junit.Before;
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());
}
}
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());
}
}
package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match;
+import java.math.BigInteger;
+
import junit.framework.Assert;
import org.junit.Before;
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());
}
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());
}
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());
}
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());
}
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());
}
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());
}
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());
}
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;
case "f31":
id += 31;
flow.setMatch(createMatch1().build());
- flow.setInstructions(createAppyActionInstruction23().build());
+ flow.setInstructions(createAppyActionInstruction23(nodeBuilder.getId()).build());
break;
case "f32":
id += 32;
break;
case "f44":
id += 44;
- flow.setMatch(createInphyportMatch().build());
+ flow.setMatch(createInphyportMatch(nodeBuilder.getId()).build());
flow.setInstructions(createDropInstructions().build());
break;
case "f45":
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
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;
}