Merge "Modify resolution for deny action in openflow renderer."
authorXia Yin Ben <xiayinben@huawei.com>
Wed, 16 Dec 2015 03:04:57 +0000 (03:04 +0000)
committerGerrit Code Review <gerrit@opendaylight.org>
Wed, 16 Dec 2015 03:04:57 +0000 (03:04 +0000)
nemo-renderers/openflow-renderer/src/main/java/org/opendaylight/nemo/renderer/openflow/FlowUtils.java

index bc5763a81110542a087ab05b06d09aabce14a662..03c3fe61dace6b20f564249804bb8756f45f91be 100644 (file)
@@ -18,10 +18,7 @@ import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
 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
@@ -48,6 +45,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.ta
 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
@@ -85,6 +83,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026
 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
@@ -103,6 +103,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.
 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
@@ -1516,12 +1517,17 @@ public class FlowUtils implements AutoCloseable {
             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
@@ -3602,7 +3608,9 @@ public class FlowUtils implements AutoCloseable {
             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
@@ -3689,6 +3697,47 @@ public class FlowUtils implements AutoCloseable {
 \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