Fixing socket for vpp endpoint
[groupbasedpolicy.git] / neutron-vpp-mapper / src / main / java / org / opendaylight / groupbasedpolicy / neutron / vpp / mapper / processors / PortHandler.java
index 32fe340a71bdd7dc7942d1067bdecf7c73ab7035..01c2152cc0309627e18c489ee87464937916f265 100644 (file)
@@ -21,7 +21,6 @@ import org.opendaylight.controller.md.sal.common.api.data.AsyncTransaction;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;\r
 import org.opendaylight.controller.md.sal.common.api.data.TransactionChain;\r
 import org.opendaylight.controller.md.sal.common.api.data.TransactionChainListener;\r
-import org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.SocketInfo;\r
 import org.opendaylight.groupbasedpolicy.util.DataStoreHelper;\r
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix;\r
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix;\r
@@ -64,6 +63,7 @@ import org.slf4j.LoggerFactory;
 import com.google.common.annotations.VisibleForTesting;\r
 import com.google.common.base.Optional;\r
 \r
+import javax.annotation.Nonnull;\r
 public class PortHandler implements TransactionChainListener {\r
 \r
     private static final Logger LOG = LoggerFactory.getLogger(PortHandler.class);\r
@@ -77,14 +77,13 @@ public class PortHandler implements TransactionChainListener {
     private static final String VPP_INTERFACE_NAME_PREFIX = "neutron_port_";\r
     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
 \r
     private BindingTransactionChain transactionChain;\r
     private DataBroker dataBroker;\r
-    private SocketInfo socketInfo;\r
 \r
-    PortHandler(DataBroker dataBroker, SocketInfo socketInfo) {\r
+    PortHandler(DataBroker dataBroker) {\r
         this.dataBroker = dataBroker;\r
-        this.socketInfo = socketInfo;\r
         transactionChain = this.dataBroker.createTransactionChain(this);\r
     }\r
 \r
@@ -238,9 +237,10 @@ 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
-            String socket = socketInfo.getSocketPath() + socketInfo.getSocketPrefix() + bebp.getPortId().getValue();\r
-            vppEpBuilder.setInterfaceTypeChoice(new VhostUserCaseBuilder().setSocket(socket).build());\r
+            vppEpBuilder.setInterfaceTypeChoice(\r
+                new VhostUserCaseBuilder().setSocket(getSocketFromPortBinding(portBinding)).build());\r
         } else if (port.getDeviceOwner().contains(DHCP_OWNER) && port.getMacAddress() != null) {\r
             TapCase tapCase = new TapCaseBuilder().setPhysicalAddress(new PhysAddress(port.getMacAddress().getValue()))\r
                 .setName(createPortName(port.getUuid()))\r
@@ -257,6 +257,17 @@ public class PortHandler implements TransactionChainListener {
         return vppEpBuilder.build();\r
     }\r
 \r
+    private String getSocketFromPortBinding(@Nonnull PortBindingExtension portBindingExtension) {\r
+        List<VifDetails> vifDetails = nullToEmpty(portBindingExtension.getVifDetails());\r
+\r
+        for (VifDetails detail : vifDetails) {\r
+            if (VHOST_SOCKET_KEY.equalsIgnoreCase(detail.getDetailsKey())) {\r
+                return detail.getValue();\r
+            }\r
+        }\r
+        return null;\r
+    }\r
+\r
     private LoopbackCase getLoopbackCase(Port port) {\r
         LoopbackCaseBuilder loopbackCase = new LoopbackCaseBuilder()\r
             .setPhysAddress(new PhysAddress(port.getMacAddress().getValue()));\r