import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;\r
import org.opendaylight.nemo.renderer.openflow.physicalnetwork.PhyConfigLoader;\r
import org.opendaylight.nemo.renderer.openflow.utils.ARP;\r
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;\r
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpPrefix;\r
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;\r
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;\r
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.*;\r
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.*;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.dec.mpls.ttl._case.DecMplsTtl;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowBuilder;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowKey;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.OutputPortValues;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Instructions;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.InstructionsBuilder;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.*;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4Match;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4MatchBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.TcpMatchBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.UdpMatchBuilder;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.PacketProcessingService;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.PacketReceived;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.TransmitPacketInput;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.links.VirtualLink;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.nodes.VirtualNode;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.paths.VirtualPath;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.paths.VirtualPathBuilder;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.node.instance.VirtualPort;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.intent.mapping.result.rev151010.intent.vn.mapping.results.UserIntentVnMapping;\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.IntentVnMappingResult;\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
- VirtualNodeId virtualNodeId = new VirtualNodeId(virtualResource.getVirtualResourceEntityId().getValue());\r
+ VirtualPathId virtualPathId = new VirtualPathId(virtualResource.getVirtualResourceEntityId().getValue());\r
+ VirtualPath virtualPath = virtualNetworkHelper.getVirtualPath(virtualPathId);\r
+ VirtualLink virtualLink = virtualNetworkHelper.getFirstVirtualLinkOfVirtualPath(virtualPath);\r
+ VirtualNodeId virtualNodeId = virtualLink.getSrcNodeId();\r
\r
List<VnPnMappingResult> vnPnMappingResults = userVnPnMapping.getVnPnMappingResult();\r
VnPnMappingResult vnPnMappingResult = getVnPnMappingResult(vnPnMappingResults,\r
List<VirtualPath> virtualPaths = virtualNetwork.getVirtualPaths().getVirtualPath();\r
\r
for ( VirtualPath virtualPath : virtualPaths ) {\r
- virtualPathMap.put(virtualPath.getPathId(), virtualPath);\r
+// virtualPathMap.put(virtualPath.getPathId(), virtualPath);\r
+ virtualPathMap.put(virtualPath.getPathId(),\r
+ sortVirtualLinksOfVirtualPath(virtualPath));\r
}\r
\r
List<VirtualArp> virtualArps = virtualNetwork.getVirtualArps().getVirtualArp();\r
\r
return false;\r
}\r
+\r
+ protected VirtualLink getFirstVirtualLinkOfVirtualPath(VirtualPath virtualPath) {\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
+// if ( 0 == virtualLink.getOrder() ) {\r
+// return virtualLinkMap.get(virtualLink.getLinkId());\r
+// }\r
+// }\r
+//\r
+// return null;\r
+\r
+ if ( virtualPath.getVirtualLink().isEmpty() ) {\r
+ return null;\r
+ }\r
+\r
+ VirtualLinkId virtualLinkId = virtualPath.getVirtualLink().get(0).getLinkId();\r
+\r
+ return virtualLinkMap.get(virtualLinkId);\r
+ }\r
+\r
+ private VirtualPath sortVirtualLinksOfVirtualPath(VirtualPath virtualPath) {\r
+ if ( virtualPath.getVirtualLink().isEmpty()\r
+ || 1 == virtualPath.getVirtualLink().size() ) {\r
+ return virtualPath;\r
+ }\r
+\r
+ List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.path.instance.VirtualLink> sortedVirtualLinks =\r
+ new ArrayList<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.path.instance.VirtualLink>(virtualPath.getVirtualLink().size());\r
+ sortedVirtualLinks.addAll(virtualPath.getVirtualLink());\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
+ sortedVirtualLinks.set(virtualLink.getOrder().intValue(), virtualLink);\r
+ }\r
+\r
+ VirtualPath virtualPath1 = new VirtualPathBuilder(virtualPath)\r
+ .setVirtualLink(sortedVirtualLinks)\r
+ .build();\r
+\r
+ return virtualPath1;\r
+ }\r
}\r
\r
/**\r