WIP choosing L3 node by ODL for VPP
[groupbasedpolicy.git] / neutron-vpp-mapper / src / main / java / org / opendaylight / groupbasedpolicy / neutron / vpp / mapper / processors / PortHandler.java
index 01c2152cc0309627e18c489ee87464937916f265..7622ba488a1cab5a4b81be5a8d2bcc3ed57dde32 100644 (file)
@@ -70,7 +70,7 @@ public class PortHandler implements TransactionChainListener {
 \r
     private static final String COMPUTE_OWNER = "compute";\r
     private static final String DHCP_OWNER = "dhcp";\r
-    private static final String ROUTER_OWNER = "network:router_interface";\r
+    static final String ROUTER_OWNER = "network:router_interface";\r
     private static final String[] SUPPORTED_DEVICE_OWNERS = {COMPUTE_OWNER, DHCP_OWNER, ROUTER_OWNER};\r
     private static final String VHOST_USER = "vhostuser";\r
     private static final String UNBOUND = "unbound";\r
@@ -78,12 +78,15 @@ public class PortHandler implements TransactionChainListener {
     private static final String TAP_PORT_NAME_PREFIX = "tap";\r
     private static final String RT_PORT_NAME_PREFIX = "qr-";\r
     private static final String VHOST_SOCKET_KEY = "vhostuser_socket";\r
+    static final String DEFAULT_NODE = "default";\r
 \r
+    private final NodeId routingNode;\r
     private BindingTransactionChain transactionChain;\r
     private DataBroker dataBroker;\r
 \r
-    PortHandler(DataBroker dataBroker) {\r
+    PortHandler(DataBroker dataBroker, NodeId routingNodeId) {\r
         this.dataBroker = dataBroker;\r
+        this.routingNode = routingNodeId;\r
         transactionChain = this.dataBroker.createTransactionChain(this);\r
     }\r
 \r
@@ -237,7 +240,6 @@ 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
@@ -252,6 +254,12 @@ public class PortHandler implements TransactionChainListener {
                     .build();\r
             vppEpBuilder.setInterfaceTypeChoice(tapCase);\r
         } else if (isValidVppRouterPort(port)) {\r
+            if (!DEFAULT_NODE.equals(routingNode.getValue())) {\r
+                LOG.warn(\r
+                        "Host-id changed by ODL for port {}. This is a supplementary workaround for choosing a routing node.",\r
+                        port);\r
+                vppEpBuilder.setVppNodeId(routingNode);\r
+            }\r
             vppEpBuilder.setInterfaceTypeChoice(getLoopbackCase(port));\r
         }\r
         return vppEpBuilder.build();\r