import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionBuilder;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.*;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorKey;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.intent.mapping.result.rev151010.intent.vn.mapping.results.user.intent.vn.mapping.intent.vn.mapping.result.VirtualResource;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.intent.mapping.result.rev151010.vn.pn.mapping.results.UserVnPnMapping;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.intent.mapping.result.rev151010.vn.pn.mapping.results.user.vn.pn.mapping.VnPnMappingResult;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.IntentId;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.MatchItemName;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.PropertyName;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.UserId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.*;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.common.rev151010.*;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.operations.Operation;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.users.User;\r
updateMplsTable(user, virtualNetwork, userIntentVnMapping, userVnPnMapping, physicalNetwork);\r
updateIpTable(user, virtualNetwork, userIntentVnMapping, userVnPnMapping, physicalNetwork);\r
updateArpTable(user, virtualNetwork, userIntentVnMapping, userVnPnMapping, physicalNetwork);\r
+ updateFlowTableForOperations(user, virtualNetwork, userIntentVnMapping, userVnPnMapping, physicalNetwork);\r
\r
return;\r
}\r
for ( MacAddress macAddress : macAddresses ) {\r
virtualArp = virtualNetworkHelper.getVirtualArp(macAddress);\r
\r
- configArpTableEntry(user.getUserId(), virtualArp, physicalPath);\r
- configMacTableEntry(user.getUserId(), macAddress, physicalNodeId1, physicalPortId);\r
+ if ( null != virtualArp ) {\r
+ configArpTableEntry(user.getUserId(), virtualArp, physicalPath);\r
+ configMacTableEntry(user.getUserId(), macAddress, physicalNodeId1, physicalPortId);\r
+ }\r
}\r
}\r
}\r
layer2ExternalVirtualPort = virtualNetworkHelper.getLayer2ExternalVirtualPort(virtualNodeId);\r
\r
if ( null != layer2ExternalVirtualPort ) {\r
- // TODO: config ip and arp tables.\r
+ vnPnMappingResult = getVnPnMappingResult(vnPnMappingResults,\r
+ new VirtualResourceEntityId(layer2ExternalVirtualPort.getPortId().getValue()));\r
+ physicalPortId = new PhysicalPortId(vnPnMappingResult.getPhysicalResourceEntityId().getValue());\r
+ physicalPort = physicalNetworkHelper.getPhysicalPort(physicalNodeId, physicalPortId);\r
+\r
+ ipPrefixes = layer2ExternalVirtualPort.getExternalIpPrefixes().getExternalIpPrefix();\r
+\r
+ if ( !ipPrefixes.isEmpty() ) {\r
+ ipPrefix = ipPrefixes.get(0);\r
+\r
+ configIpTableEntry(user.getUserId(), ipPrefix, physicalNodeId, physicalPort, true);\r
+ }\r
+\r
+ macAddresses = layer2ExternalVirtualPort.getExternalMacAddresses().getExternalMacAddress();\r
+\r
+ for ( MacAddress macAddress : macAddresses ) {\r
+ virtualArp = virtualNetworkHelper.getVirtualArp(macAddress);\r
+\r
+ if ( null != virtualArp ) {\r
+ configArpTableEntry(user.getUserId(), virtualArp, physicalNodeId, physicalPortId);\r
+ }\r
+ }\r
}\r
}\r
\r
- updateIpTableForOperations(user, virtualNetwork, userIntentVnMapping, userVnPnMapping, physicalNetwork);\r
-\r
- // log format: vnode(nodetype) --> vnode(nodetype): vlink; ppath; plinks; mplslabels; meterid;\r
+ // Log format: vnode(nodetype) --> vnode(nodetype): vlink; ppath; plinks; mplslabels; meterid;\r
StringBuilder stringBuilder = new StringBuilder();\r
Set<VirtualLinkId> printedVirtualLinks = new HashSet<VirtualLinkId>();\r
VirtualNode srcVirtualNode;\r
* @param userVnPnMapping TODO\r
* @param physicalNetwork TODO\r
*/\r
- private void updateIpTableForOperations(User user,\r
- VirtualNetwork virtualNetwork,\r
- UserIntentVnMapping userIntentVnMapping,\r
- UserVnPnMapping userVnPnMapping,\r
- PhysicalNetwork physicalNetwork) {\r
+ private void updateFlowTableForOperations(User user,\r
+ VirtualNetwork virtualNetwork,\r
+ UserIntentVnMapping userIntentVnMapping,\r
+ UserVnPnMapping userVnPnMapping,\r
+ PhysicalNetwork physicalNetwork) {\r
if ( null == user.getOperations() ) {\r
return;\r
}\r
return;\r
}\r
\r
- Operation operation = operations.get(0);\r
+ List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.operation.instance.Action> actions;\r
+ org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.operation.instance.Action action;\r
+ ActionName denyActionName = new ActionName("deny");\r
+ ActionName allowActionName = new ActionName("allow");\r
+ ActionName goThroughActionName = new ActionName("go-through");\r
+\r
+ for ( Operation operation : operations ) {\r
+ actions = operation.getAction();\r
+\r
+ action = getAction(actions, denyActionName);\r
+\r
+ if ( null != action ) {\r
+ updateFlowTableForOperationWithDenyAction(user, operation,\r
+ virtualNetwork, userIntentVnMapping, userVnPnMapping, physicalNetwork);\r
+\r
+ break;\r
+ }\r
+\r
+ action = getAction(actions, allowActionName);\r
+\r
+ if ( null != action ) {\r
+ updateFlowTableForOperationWithAllowAction(user, operation,\r
+ virtualNetwork, userIntentVnMapping, userVnPnMapping, physicalNetwork);\r
+\r
+ break;\r
+ }\r
+\r
+ action = getAction(actions, goThroughActionName);\r
+\r
+ if ( null != action ) {\r
+ updateFlowTableForOperationWithGoThroughAction(user, operation,\r
+ virtualNetwork, userIntentVnMapping, userVnPnMapping, physicalNetwork);\r
+\r
+// break;\r
+ }\r
+ }\r
+\r
+ return;\r
+ }\r
\r
+ /**\r
+ * TODO\r
+ *\r
+ * @author Zhigang Ji\r
+ * @param user TODO\r
+ * @param operation TODO\r
+ * @param virtualNetwork TODO\r
+ * @param userIntentVnMapping TODO\r
+ * @param userVnPnMapping TODO\r
+ * @param physicalNetwork TODO\r
+ */\r
+ private void updateFlowTableForOperationWithDenyAction(User user,\r
+ Operation operation,\r
+ VirtualNetwork virtualNetwork,\r
+ UserIntentVnMapping userIntentVnMapping,\r
+ UserVnPnMapping userVnPnMapping,\r
+ PhysicalNetwork physicalNetwork) {\r
+ List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Flow> nemoFlows =\r
+ user.getObjects().getFlow();\r
+ org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.FlowId nemoFlowId =\r
+ new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.FlowId(operation.getTargetObject().getValue());\r
+ org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Flow nemoFlow =\r
+ getFlow(nemoFlows, nemoFlowId);\r
+\r
+ long priority;\r
+\r
+ if ( null == operation.getPriority() ) {\r
+ priority = 1;\r
+ } else {\r
+ priority = 1 + operation.getPriority();\r
+ }\r
+\r
+ List<IntentVnMappingResult> intentVnMappingResults = userIntentVnMapping.getIntentVnMappingResult();\r
+ IntentId intentId = new IntentId(operation.getOperationId().getValue());\r
+ IntentVnMappingResult intentVnMappingResult = getIntentVnMappingResult(intentVnMappingResults, intentId);\r
+ List<VirtualResource> virtualResources = intentVnMappingResult.getVirtualResource();\r
+ VirtualResource virtualResource = virtualResources.get(0);\r
+ VirtualNodeId virtualNodeId = new VirtualNodeId(virtualResource.getVirtualResourceEntityId().getValue());\r
+\r
+ List<VnPnMappingResult> vnPnMappingResults = userVnPnMapping.getVnPnMappingResult();\r
+ VnPnMappingResult vnPnMappingResult = getVnPnMappingResult(vnPnMappingResults,\r
+ new VirtualResourceEntityId(virtualNodeId.getValue()));\r
+ PhysicalNodeId physicalNodeId =\r
+ new PhysicalNodeId(vnPnMappingResult.getPhysicalResourceEntityId().getValue());\r
+\r
+ configFlowTableEntryForOperation(user.getUserId(), nemoFlow, physicalNodeId, (short)priority, true);\r
+\r
+ return;\r
+ }\r
+\r
+ /**\r
+ * TODO\r
+ *\r
+ * @author Zhigang Ji\r
+ * @param user TODO\r
+ * @param operation TODO\r
+ * @param virtualNetwork TODO\r
+ * @param userIntentVnMapping TODO\r
+ * @param userVnPnMapping TODO\r
+ * @param physicalNetwork TODO\r
+ */\r
+ private void updateFlowTableForOperationWithAllowAction(User user,\r
+ Operation operation,\r
+ VirtualNetwork virtualNetwork,\r
+ UserIntentVnMapping userIntentVnMapping,\r
+ UserVnPnMapping userVnPnMapping,\r
+ PhysicalNetwork physicalNetwork) {\r
+ List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Flow> nemoFlows =\r
+ user.getObjects().getFlow();\r
+ org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.FlowId nemoFlowId =\r
+ new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.FlowId(operation.getTargetObject().getValue());\r
+ org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Flow nemoFlow =\r
+ getFlow(nemoFlows, nemoFlowId);\r
+\r
+ long priority;\r
+\r
+ if ( null == operation.getPriority() ) {\r
+ priority = 1;\r
+ } else {\r
+ priority = 1 + operation.getPriority();\r
+ }\r
+\r
+ VirtualNetworkHelper virtualNetworkHelper = virtualNetworkHelpers.get(virtualNetwork.getNetworkId());\r
+\r
+ List<IntentVnMappingResult> intentVnMappingResults = userIntentVnMapping.getIntentVnMappingResult();\r
+ IntentId intentId = new IntentId(operation.getOperationId().getValue());\r
+ IntentVnMappingResult intentVnMappingResult = getIntentVnMappingResult(intentVnMappingResults, intentId);\r
+ List<VirtualResource> virtualResources = intentVnMappingResult.getVirtualResource();\r
+ VirtualResource virtualResource = virtualResources.get(0);\r
+ VirtualPathId virtualPathId = new VirtualPathId(virtualResource.getVirtualResourceEntityId().getValue());\r
+ VirtualPath virtualPath = virtualNetworkHelper.getVirtualPath(virtualPathId);\r
+\r
+ if ( null == virtualPath || virtualPath.getVirtualLink().isEmpty() ) {\r
+ return;\r
+ }\r
+\r
+ List<VnPnMappingResult> vnPnMappingResults = userVnPnMapping.getVnPnMappingResult();\r
+ VnPnMappingResult vnPnMappingResult;\r
+ PhysicalPathId physicalPathId;\r
+ PhysicalPath physicalPath;\r
+\r
+ for ( org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.path.instance.VirtualLink\r
+ virtualLink : virtualPath.getVirtualLink() ) {\r
+ vnPnMappingResult = getVnPnMappingResult(vnPnMappingResults,\r
+ new VirtualResourceEntityId(virtualLink.getLinkId().getValue()));\r
+ physicalPathId = new PhysicalPathId(vnPnMappingResult.getPhysicalResourceEntityId().getValue());\r
+ physicalPath = physicalNetworkHelper.getPhysicalPath(physicalPathId);\r
+\r
+ configFlowTableEntryForOperation(user.getUserId(), nemoFlow,\r
+ null, physicalPath, (short)priority, true);\r
+ }\r
+\r
+ return;\r
+ }\r
+\r
+ /**\r
+ * TODO\r
+ *\r
+ * @author Zhigang Ji\r
+ * @param user TODO\r
+ * @param operation TODO\r
+ * @param virtualNetwork TODO\r
+ * @param userIntentVnMapping TODO\r
+ * @param userVnPnMapping TODO\r
+ * @param physicalNetwork TODO\r
+ */\r
+ private void updateFlowTableForOperationWithGoThroughAction(User user,\r
+ Operation operation,\r
+ VirtualNetwork virtualNetwork,\r
+ UserIntentVnMapping userIntentVnMapping,\r
+ UserVnPnMapping userVnPnMapping,\r
+ PhysicalNetwork physicalNetwork) {\r
+ List<IntentVnMappingResult> intentVnMappingResults = userIntentVnMapping.getIntentVnMappingResult();\r
+ IntentId intentId = new IntentId(operation.getOperationId().getValue());\r
+ IntentVnMappingResult intentVnMappingResult = getIntentVnMappingResult(intentVnMappingResults, intentId);\r
+ List<VirtualResource> virtualResources = intentVnMappingResult.getVirtualResource();\r
+\r
+ if ( 1 == virtualResources.size() ) {\r
+ updateFlowTableForOperationWithGoThroughNormalGroupAction(user, operation,\r
+ virtualNetwork, userIntentVnMapping, userVnPnMapping, physicalNetwork);\r
+ } else {\r
+ updateFlowTableForOperationWithGoThroughChainGroupAction(user, operation,\r
+ virtualNetwork, userIntentVnMapping, userVnPnMapping, physicalNetwork);\r
+ }\r
+\r
+ return;\r
+ }\r
+\r
+ /**\r
+ * TODO\r
+ *\r
+ * @author Zhigang Ji\r
+ * @param user TODO\r
+ * @param operation TODO\r
+ * @param virtualNetwork TODO\r
+ * @param userIntentVnMapping TODO\r
+ * @param userVnPnMapping TODO\r
+ * @param physicalNetwork TODO\r
+ */\r
+ private void updateFlowTableForOperationWithGoThroughNormalGroupAction(User user,\r
+ Operation operation,\r
+ VirtualNetwork virtualNetwork,\r
+ UserIntentVnMapping userIntentVnMapping,\r
+ UserVnPnMapping userVnPnMapping,\r
+ PhysicalNetwork physicalNetwork) {\r
+ List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Flow> nemoFlows =\r
+ user.getObjects().getFlow();\r
+ org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.FlowId nemoFlowId =\r
+ new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.FlowId(operation.getTargetObject().getValue());\r
+ org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Flow nemoFlow =\r
+ getFlow(nemoFlows, nemoFlowId);\r
+\r
+ long priority;\r
+\r
+ if ( null == operation.getPriority() ) {\r
+ priority = 1;\r
+ } else {\r
+ priority = 1 + operation.getPriority();\r
+ }\r
+\r
+ VirtualNetworkHelper virtualNetworkHelper = virtualNetworkHelpers.get(virtualNetwork.getNetworkId());\r
+\r
+ List<IntentVnMappingResult> intentVnMappingResults = userIntentVnMapping.getIntentVnMappingResult();\r
+ IntentId intentId = new IntentId(operation.getOperationId().getValue());\r
+ IntentVnMappingResult intentVnMappingResult = getIntentVnMappingResult(intentVnMappingResults, intentId);\r
+ List<VirtualResource> virtualResources = intentVnMappingResult.getVirtualResource();\r
+ VirtualResource virtualResource = virtualResources.get(0);\r
+ VirtualPathId virtualPathId = new VirtualPathId(virtualResource.getVirtualResourceEntityId().getValue());\r
+ VirtualPath virtualPath = virtualNetworkHelper.getVirtualPath(virtualPathId);\r
+\r
+ if ( null == virtualPath || virtualPath.getVirtualLink().isEmpty() ) {\r
+ return;\r
+ }\r
+\r
+ List<VnPnMappingResult> vnPnMappingResults = userVnPnMapping.getVnPnMappingResult();\r
+ VnPnMappingResult vnPnMappingResult;\r
+ PhysicalPathId physicalPathId;\r
+ PhysicalPath physicalPath;\r
+\r
+ for ( org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.path.instance.VirtualLink\r
+ virtualLink : virtualPath.getVirtualLink() ) {\r
+ vnPnMappingResult = getVnPnMappingResult(vnPnMappingResults,\r
+ new VirtualResourceEntityId(virtualLink.getLinkId().getValue()));\r
+ physicalPathId = new PhysicalPathId(vnPnMappingResult.getPhysicalResourceEntityId().getValue());\r
+ physicalPath = physicalNetworkHelper.getPhysicalPath(physicalPathId);\r
+\r
+ configFlowTableEntryForOperation(user.getUserId(), nemoFlow,\r
+ null, physicalPath, (short)priority, true);\r
+ }\r
+\r
+ return;\r
+ }\r
+\r
+ /**\r
+ * TODO\r
+ *\r
+ * @author Zhigang Ji\r
+ * @param user TODO\r
+ * @param operation TODO\r
+ * @param virtualNetwork TODO\r
+ * @param userIntentVnMapping TODO\r
+ * @param userVnPnMapping TODO\r
+ * @param physicalNetwork TODO\r
+ */\r
+ private void updateFlowTableForOperationWithGoThroughChainGroupAction(User user,\r
+ Operation operation,\r
+ VirtualNetwork virtualNetwork,\r
+ UserIntentVnMapping userIntentVnMapping,\r
+ UserVnPnMapping userVnPnMapping,\r
+ PhysicalNetwork physicalNetwork) {\r
List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Flow> nemoFlows =\r
user.getObjects().getFlow();\r
org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.FlowId nemoFlowId =\r
physicalPort = physicalNetworkHelper\r
.getPhysicalPort(physicalLink.getSrcNodeId(), physicalLink.getSrcPortId());\r
\r
- configIpTableEntryForOperation(user.getUserId(), nemoFlow,\r
- physicalPort, physicalPath, (short)priority, true);\r
+ configFlowTableEntryForOperation(user.getUserId(), nemoFlow,\r
+ physicalPort, physicalPath, (short) priority, true);\r
}\r
}\r
\r
vnPnMappingResult.getPhysicalResourceEntityId().getValue());\r
physicalPort = physicalNetworkHelper.getPhysicalPort(physicalNodeId, physicalPortId);\r
\r
- configIpTableEntryForOperation(user.getUserId(), nemoFlow,\r
- physicalPort, physicalPath, (short)priority, true);\r
+ configFlowTableEntryForOperation(user.getUserId(), nemoFlow,\r
+ physicalPort, physicalPath, (short) priority, true);\r
}\r
\r
layer2ExternalVirtualPort = virtualNetworkHelper\r
vnPnMappingResult.getPhysicalResourceEntityId().getValue());\r
physicalPort = physicalNetworkHelper.getPhysicalPort(physicalNodeId, physicalPortId);\r
\r
- configIpTableEntryForOperation(user.getUserId(), nemoFlow,\r
- physicalPort, physicalPath, (short)priority, true);\r
+ configFlowTableEntryForOperation(user.getUserId(), nemoFlow,\r
+ physicalPort, physicalPath, (short) priority, true);\r
}\r
}\r
} else if ( VirtualResource.VirtualResourceType.Vport\r
physicalPort1 = physicalNetworkHelper\r
.getPhysicalPort(physicalLink.getSrcNodeId(), physicalLink.getSrcPortId());\r
\r
- configIpTableEntryForOperation(user.getUserId(), nemoFlow,\r
- physicalNodeId, physicalPort1, physicalPort, (short)priority, true);\r
+ configFlowTableEntryForOperation(user.getUserId(), nemoFlow,\r
+ physicalNodeId, physicalPort1, physicalPort, (short) priority, true);\r
}\r
}\r
\r
vnPnMappingResult.getPhysicalResourceEntityId().getValue());\r
physicalPort1 = physicalNetworkHelper.getPhysicalPort(physicalNodeId1, physicalPortId1);\r
\r
- configIpTableEntryForOperation(user.getUserId(), nemoFlow,\r
- physicalNodeId1, physicalPort1, physicalPort, (short)priority, true);\r
+ configFlowTableEntryForOperation(user.getUserId(), nemoFlow,\r
+ physicalNodeId1, physicalPort1, physicalPort, (short) priority, true);\r
}\r
\r
layer2ExternalVirtualPort = virtualNetworkHelper.getLayer2ExternalVirtualPort(virtualNodeId);\r
vnPnMappingResult.getPhysicalResourceEntityId().getValue());\r
physicalPort1 = physicalNetworkHelper.getPhysicalPort(physicalNodeId1, physicalPortId1);\r
\r
- configIpTableEntryForOperation(user.getUserId(), nemoFlow,\r
- physicalNodeId1, physicalPort1, physicalPort, (short)priority, true);\r
+ configFlowTableEntryForOperation(user.getUserId(), nemoFlow,\r
+ physicalNodeId1, physicalPort1, physicalPort, (short) priority, true);\r
}\r
}\r
} else {\r
vnPnMappingResult.getPhysicalResourceEntityId().getValue());\r
physicalPort = physicalNetworkHelper.getPhysicalPort(physicalNodeId, physicalPortId);\r
\r
- configIpTableEntryForOperation(user.getUserId(), nemoFlow,\r
- physicalPort, physicalPath, (short)priority, true);\r
+ configFlowTableEntryForOperation(user.getUserId(), nemoFlow,\r
+ physicalPort, physicalPath, (short) priority, true);\r
}\r
} else if ( VirtualResource.VirtualResourceType.Vpath == virtualResource1.getVirtualResourceType()\r
&& VirtualResource.VirtualResourceType.Vport == virtualResource.getVirtualResourceType() ) {\r
vnPnMappingResult.getPhysicalResourceEntityId().getValue());\r
physicalPort = physicalNetworkHelper.getPhysicalPort(physicalNodeId, physicalPortId);\r
\r
- configIpTableEntryForOperation(user.getUserId(), nemoFlow,\r
- physicalNodeId, physicalPort1, physicalPort, (short)priority, true);\r
+ configFlowTableEntryForOperation(user.getUserId(), nemoFlow,\r
+ physicalNodeId, physicalPort1, physicalPort, (short) priority, true);\r
} else if ( VirtualResource.VirtualResourceType.Vport == virtualResource1.getVirtualResourceType()\r
&& VirtualResource.VirtualResourceType.Vport == virtualResource.getVirtualResourceType() ) {\r
vnPnMappingResult = getVnPnMappingResult(vnPnMappingResults,\r
vnPnMappingResult.getPhysicalResourceEntityId().getValue());\r
physicalPort = physicalNetworkHelper.getPhysicalPort(physicalNodeId, physicalPortId);\r
\r
- configIpTableEntryForOperation(user.getUserId(), nemoFlow,\r
- physicalNodeId1, physicalPort1, physicalPort, (short)priority, true);\r
+ configFlowTableEntryForOperation(user.getUserId(), nemoFlow,\r
+ physicalNodeId1, physicalPort1, physicalPort, (short) priority, true);\r
}\r
}\r
\r
return null;\r
}\r
\r
+ /**\r
+ * TODO\r
+ *\r
+ * @author Zhigang Ji\r
+ * @param actions TODO\r
+ * @param actionName TODO\r
+ * @return TODO\r
+ */\r
+ private static org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.operation.instance.Action getAction(\r
+ List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.operation.instance.Action> actions,\r
+ ActionName actionName) {\r
+ for ( org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.operation.instance.Action\r
+ action : actions ) {\r
+ if ( action.getActionName().equals(actionName) ) {\r
+ return action;\r
+ }\r
+ }\r
+\r
+ return null;\r
+ }\r
+\r
/**\r
* TODO\r
*\r
List<Instruction> instructionList = new LinkedList<Instruction>();\r
List<Action> actionList = new LinkedList<Action>();\r
\r
- EthernetMatchBuilder ethernetMatchBuilder = new EthernetMatchBuilder().setEthernetType(new EthernetTypeBuilder().setType(new EtherType((long)ETH_TYPE_IP)).build());\r
+ EthernetMatchBuilder ethernetMatchBuilder = new EthernetMatchBuilder().setEthernetType(new EthernetTypeBuilder().setType(new EtherType((long) ETH_TYPE_IP)).build());\r
EthernetMatch ethernetMatch = ethernetMatchBuilder.build();\r
\r
MetadataBuilder metadataBuilder = new MetadataBuilder().setMetadata(BigInteger.valueOf(metadatas.get(userId)));\r
return;\r
}\r
\r
+ /**\r
+ * TODO\r
+ *\r
+ * @author Zhigang Ji\r
+ * @param userId TODO\r
+ * @param nemoFlow TODO\r
+ * @param physicalNodeId TODO\r
+ * @param operationPriority TODO\r
+ * @param layer3Forwarding TODO\r
+ */\r
+ private void configFlowTableEntryForOperation(UserId userId,\r
+ org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Flow nemoFlow,\r
+ PhysicalNodeId physicalNodeId,\r
+ short operationPriority,\r
+ boolean layer3Forwarding) {\r
+ WriteTransaction writeTransaction = dataBroker.newWriteOnlyTransaction();\r
+\r
+ Match match = createMatch(userId, nemoFlow, null);\r
+ Instructions instructions = new InstructionsBuilder().setInstruction(new ArrayList<Instruction>(0)).build();\r
+\r
+ FlowId flowId = new FlowId(UUID.randomUUID().toString());\r
+ FlowBuilder flowBuilder = baseFlowBuilder().setId(flowId).setTableId(layer3Forwarding ? IP_TABLE_ID : MAC_TABLE_ID);\r
+ Flow flow = flowBuilder.setPriority(DEFAULT_FLOW_PRIORITY + operationPriority).setMatch(match).setInstructions(instructions).build();\r
+\r
+ NodeId nodeId = createNodeId(physicalNodeId);\r
+ InstanceIdentifier<Flow> flowInsId = generateFlowInsId(userId, nodeId, flow.getTableId(), flow.getId());\r
+\r
+ writeTransaction.put(LogicalDatastoreType.CONFIGURATION, flowInsId, flow, true);\r
+ writeTransaction.submit();\r
+\r
+ return;\r
+ }\r
+\r
/**\r
* TODO\r
*\r
* @param physicalNodeId TODO\r
* @param inPhysicalPort TODO\r
* @param outPhysicalPort TODO\r
- * @param policyPriority TODO\r
+ * @param operationPriority TODO\r
* @param layer3Forwarding TODO\r
*/\r
- private void configIpTableEntryForOperation(UserId userId,\r
- org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Flow nemoFlow,\r
- PhysicalNodeId physicalNodeId,\r
- PhysicalPort inPhysicalPort,\r
- PhysicalPort outPhysicalPort,\r
- short policyPriority,\r
- boolean layer3Forwarding) {\r
+ private void configFlowTableEntryForOperation(UserId userId,\r
+ org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Flow nemoFlow,\r
+ PhysicalNodeId physicalNodeId,\r
+ PhysicalPort inPhysicalPort,\r
+ PhysicalPort outPhysicalPort,\r
+ short operationPriority,\r
+ boolean layer3Forwarding) {\r
WriteTransaction writeTransaction = dataBroker.newWriteOnlyTransaction();\r
List<Instruction> instructionList = new LinkedList<Instruction>();\r
List<Action> actionList = new LinkedList<Action>();\r
\r
FlowId flowId = new FlowId(UUID.randomUUID().toString());\r
FlowBuilder flowBuilder = baseFlowBuilder().setId(flowId).setTableId(layer3Forwarding ? IP_TABLE_ID : MAC_TABLE_ID);\r
- Flow flow = flowBuilder.setPriority(DEFAULT_FLOW_PRIORITY + policyPriority).setMatch(match).setInstructions(instructions).build();\r
+ Flow flow = flowBuilder.setPriority(DEFAULT_FLOW_PRIORITY + operationPriority).setMatch(match).setInstructions(instructions).build();\r
\r
NodeId nodeId = createNodeId(physicalNodeId);\r
InstanceIdentifier<Flow> flowInsId = generateFlowInsId(userId, nodeId, flow.getTableId(), flow.getId());\r
* @param nemoFlow TODO\r
* @param inPhysicalPort TODO\r
* @param outPhysicalPath TODO\r
- * @param policyPriority TODO\r
+ * @param operationPriority TODO\r
* @param layer3Forwarding TODO\r
*/\r
- private void configIpTableEntryForOperation(UserId userId,\r
- org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Flow nemoFlow,\r
- PhysicalPort inPhysicalPort,\r
- PhysicalPath outPhysicalPath,\r
- short policyPriority,\r
- boolean layer3Forwarding) {\r
+ private void configFlowTableEntryForOperation(UserId userId,\r
+ org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Flow nemoFlow,\r
+ PhysicalPort inPhysicalPort,\r
+ PhysicalPath outPhysicalPath,\r
+ short operationPriority,\r
+ boolean layer3Forwarding) {\r
WriteTransaction writeTransaction = dataBroker.newWriteOnlyTransaction();\r
PhysicalLink physicalLink = physicalNetworkHelper.getFirstPhysicalLinkOfPhysicalPath(outPhysicalPath);\r
List<Instruction> instructionList = new LinkedList<Instruction>();\r
\r
FlowId flowId = new FlowId(UUID.randomUUID().toString());\r
FlowBuilder flowBuilder = baseFlowBuilder().setId(flowId).setTableId(layer3Forwarding ? IP_TABLE_ID : MAC_TABLE_ID);\r
- Flow flow = flowBuilder.setPriority(DEFAULT_FLOW_PRIORITY + policyPriority).setMatch(match).setInstructions(instructions).build();\r
+ Flow flow = flowBuilder.setPriority(DEFAULT_FLOW_PRIORITY + operationPriority).setMatch(match).setInstructions(instructions).build();\r
\r
NodeId nodeId = createNodeId(physicalLink.getSrcNodeId());\r
InstanceIdentifier<Flow> flowInsId = generateFlowInsId(userId, nodeId, flow.getTableId(), flow.getId());\r