Policy exclusions & parallel netconf transactions
[groupbasedpolicy.git] / neutron-vpp-mapper / src / main / java / org / opendaylight / groupbasedpolicy / neutron / vpp / mapper / processors / PortHandler.java
index 29cdde18c5b85fc3e0841edf71f5552e4549bb42..b3f7ab56cb7c4655ccd05367f87370fa63eaef55 100644 (file)
@@ -54,6 +54,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.por
 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.Ports;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.ports.Port;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.ports.PortKey;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.portsecurity.rev150712.PortSecurityExtension;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150712.Neutron;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.subnets.rev150712.subnets.attributes.Subnets;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.subnets.rev150712.subnets.attributes.subnets.Subnet;\r
@@ -243,6 +244,7 @@ public class PortHandler implements TransactionChainListener {
     @VisibleForTesting\r
     VppEndpoint buildVppEndpoint(Port port, BaseEndpointByPort bebp) {\r
         PortBindingExtension portBinding = port.getAugmentation(PortBindingExtension.class);\r
+        ExcludeFromPolicy excludeFromPolicy = new ExcludeFromPolicyBuilder().setExcludeFromPolicy(true).build();\r
         VppEndpointBuilder vppEpBuilder = new VppEndpointBuilder().setDescription("neutron port")\r
             .setContextId(bebp.getContextId())\r
             .setContextType(bebp.getContextType())\r
@@ -250,9 +252,16 @@ public class PortHandler implements TransactionChainListener {
             .setAddressType(bebp.getAddressType())\r
             .setVppInterfaceName(VPP_INTERFACE_NAME_PREFIX + bebp.getPortId().getValue())\r
             .setVppNodeId(new NodeId(portBinding.getHostId()));\r
+\r
         if (port.getDeviceOwner().contains(COMPUTE_OWNER)) {\r
             vppEpBuilder.setInterfaceTypeChoice(\r
-                new VhostUserCaseBuilder().setSocket(getSocketFromPortBinding(portBinding)).build());\r
+                    new VhostUserCaseBuilder().setSocket(getSocketFromPortBinding(portBinding)).build());\r
+            Optional<PortSecurityExtension> portSecurity =\r
+                    Optional.fromNullable(port.getAugmentation(PortSecurityExtension.class));\r
+            if (portSecurity.isPresent() && !portSecurity.get().isPortSecurityEnabled()) {\r
+                vppEpBuilder.addAugmentation(ExcludeFromPolicy.class, excludeFromPolicy);\r
+            }\r
+\r
         } else if (port.getDeviceOwner().contains(DHCP_OWNER) && port.getMacAddress() != null) {\r
             IpAddress dhcpServerIpAddress = port.getFixedIps().stream().findFirst().isPresent() ?\r
                 port.getFixedIps().stream().findFirst().get().getIpAddress() : null;\r
@@ -261,13 +270,14 @@ public class PortHandler implements TransactionChainListener {
                 .setDhcpServerAddress(dhcpServerIpAddress)\r
                 .build();\r
             vppEpBuilder.setInterfaceTypeChoice(tapCase);\r
+\r
         } else if (isValidQRouterPort(port)) {\r
             TapCase tapCase = new TapCaseBuilder().setPhysicalAddress(new PhysAddress(port.getMacAddress().getValue()))\r
                     .setName(createQRouterPortName(port.getUuid()))\r
                     .build();\r
             vppEpBuilder.setInterfaceTypeChoice(tapCase);\r
-            vppEpBuilder.addAugmentation(ExcludeFromPolicy.class,\r
-                    new ExcludeFromPolicyBuilder().setExcludeFromPolicy(true).build());\r
+            vppEpBuilder.addAugmentation(ExcludeFromPolicy.class, excludeFromPolicy);\r
+\r
         } else if (isValidVppRouterPort(port)) {\r
             if (!DEFAULT_NODE.equals(routingNode.getValue())) {\r
                 LOG.warn(\r
@@ -300,8 +310,7 @@ public class PortHandler implements TransactionChainListener {
                     }\r
                 }\r
             }\r
-            vppEpBuilder.addAugmentation(ExcludeFromPolicy.class,\r
-                    new ExcludeFromPolicyBuilder().setExcludeFromPolicy(true).build());\r
+            vppEpBuilder.addAugmentation(ExcludeFromPolicy.class, excludeFromPolicy);\r
             vppEpBuilder.setInterfaceTypeChoice(getLoopbackCase(port));\r
         }\r
         return vppEpBuilder.build();\r