Working with OVS
[vpnservice.git] / interfacemgr / interfacemgr-impl / src / main / java / org / opendaylight / vpnservice / interfacemgr / InterfacemgrProvider.java
index 74074883aad0f659bd67d11d0cda1552861ae1f5..ace54f553cffe0d9be4d894bd4a25495bee22475 100644 (file)
@@ -7,42 +7,96 @@
  */
 package org.opendaylight.vpnservice.interfacemgr;
 
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface;
-
-import java.math.BigInteger;
-import java.util.List;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
 import org.opendaylight.controller.sal.binding.api.BindingAwareProvider;
+import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
 import org.opendaylight.idmanager.IdManager;
+import org.opendaylight.vpnservice.interfacemgr.listeners.InterfaceConfigListener;
+import org.opendaylight.vpnservice.interfacemgr.listeners.InterfaceInventoryStateListener;
+import org.opendaylight.vpnservice.interfacemgr.listeners.InterfaceTopologyStateListener;
 import org.opendaylight.vpnservice.interfacemgr.interfaces.IInterfaceManager;
+import org.opendaylight.vpnservice.interfacemgr.rpcservice.InterfaceManagerRpcService;
+import org.opendaylight.vpnservice.interfacemgr.servicebindings.flowbased.listeners.FlowBasedServicesConfigListener;
+import org.opendaylight.vpnservice.interfacemgr.servicebindings.flowbased.listeners.FlowBasedServicesInterfaceStateListener;
+import org.opendaylight.vpnservice.interfacemgr.listeners.VlanMemberConfigListener;
 import org.opendaylight.vpnservice.mdsalutil.ActionInfo;
 import org.opendaylight.vpnservice.mdsalutil.MatchInfo;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.CreateIdPoolInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.CreateIdPoolInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rpcs.rev151003.*;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.math.BigInteger;
+import java.util.List;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+
 public class InterfacemgrProvider implements BindingAwareProvider, AutoCloseable, IInterfaceManager {
 
     private static final Logger LOG = LoggerFactory.getLogger(InterfacemgrProvider.class);
 
+    private RpcProviderRegistry rpcProviderRegistry;
+
     private InterfaceManager interfaceManager;
     private IfmNodeConnectorListener ifmNcListener;
     private IdManager idManager;
 
+    private InterfaceConfigListener interfaceConfigListener;
+    private InterfaceTopologyStateListener topologyStateListener;
+    private InterfaceInventoryStateListener interfaceInventoryStateListener;
+    private FlowBasedServicesInterfaceStateListener flowBasedServicesInterfaceStateListener;
+    private FlowBasedServicesConfigListener flowBasedServicesConfigListener;
+    private VlanMemberConfigListener vlanMemberConfigListener;
+
+    private InterfaceManagerRpcService interfaceManagerRpcService;
+    private BindingAwareBroker.RpcRegistration<OdlInterfaceRpcService> rpcRegistration;
+
+    public void setRpcProviderRegistry(RpcProviderRegistry rpcProviderRegistry) {
+        this.rpcProviderRegistry = rpcProviderRegistry;
+    }
+
     @Override
     public void onSessionInitiated(ProviderContext session) {
         LOG.info("InterfacemgrProvider Session Initiated");
         try {
             final  DataBroker dataBroker = session.getSALService(DataBroker.class);
             idManager = new IdManager(dataBroker);
-            interfaceManager = new InterfaceManager(dataBroker, idManager);
-            ifmNcListener = new IfmNodeConnectorListener(dataBroker, interfaceManager);
             createIdPool();
+
+            interfaceManagerRpcService = new InterfaceManagerRpcService(dataBroker);
+            rpcRegistration = getRpcProviderRegistry().addRpcImplementation(
+                    OdlInterfaceRpcService.class, interfaceManagerRpcService);
+
+            interfaceConfigListener = new InterfaceConfigListener(dataBroker, idManager);
+            interfaceConfigListener.registerListener(LogicalDatastoreType.CONFIGURATION, dataBroker);
+
+            interfaceInventoryStateListener = new InterfaceInventoryStateListener(dataBroker);
+            interfaceInventoryStateListener.registerListener(LogicalDatastoreType.OPERATIONAL, dataBroker);
+
+            topologyStateListener = new InterfaceTopologyStateListener(dataBroker);
+            topologyStateListener.registerListener(LogicalDatastoreType.OPERATIONAL, dataBroker);
+
+            flowBasedServicesConfigListener = new FlowBasedServicesConfigListener(dataBroker);
+            flowBasedServicesConfigListener.registerListener(LogicalDatastoreType.CONFIGURATION, dataBroker);
+
+            flowBasedServicesInterfaceStateListener =
+                    new FlowBasedServicesInterfaceStateListener(dataBroker);
+            flowBasedServicesInterfaceStateListener.registerListener(LogicalDatastoreType.OPERATIONAL, dataBroker);
+
+            vlanMemberConfigListener =
+                               new VlanMemberConfigListener(dataBroker, idManager);
+            vlanMemberConfigListener.registerListener(LogicalDatastoreType.CONFIGURATION, dataBroker);
+
+
+            /*interfaceManager = new InterfaceManager(dataBroker, idManager);
+            ifmNcListener = new IfmNodeConnectorListener(dataBroker, interfaceManager);*/
         } catch (Exception e) {
             LOG.error("Error initializing services", e);
         }
@@ -70,27 +124,75 @@ public class InterfacemgrProvider implements BindingAwareProvider, AutoCloseable
         LOG.info("InterfacemgrProvider Closed");
         interfaceManager.close();
         ifmNcListener.close();
+        interfaceConfigListener.close();
+        rpcRegistration.close();
+    }
+
+    public RpcProviderRegistry getRpcProviderRegistry() {
+        return rpcProviderRegistry;
     }
 
     @Override
     public Long getPortForInterface(String ifName) {
-        return interfaceManager.getPortForInterface(ifName);
+        GetPortFromInterfaceInput input = new GetPortFromInterfaceInputBuilder().setIntfName(ifName).build();
+        Future<RpcResult<GetPortFromInterfaceOutput>> output = interfaceManagerRpcService.getPortFromInterface(input);
+        try {
+            RpcResult<GetPortFromInterfaceOutput> port = output.get();
+            if(port.isSuccessful()){
+                return port.getResult().getPortno();
+            }
+        }catch(NullPointerException | InterruptedException | ExecutionException e){
+            LOG.warn("Exception when getting port for interface",e);
+        }
+        return null;
     }
 
     @Override
     public Long getPortForInterface(Interface intf) {
-        return interfaceManager.getPortForInterface(intf);
+        GetPortFromInterfaceInput input = new GetPortFromInterfaceInputBuilder().setIntfName(intf.getName()).build();
+        Future<RpcResult<GetPortFromInterfaceOutput>> output = interfaceManagerRpcService.getPortFromInterface(input);
+        try {
+            RpcResult<GetPortFromInterfaceOutput> port = output.get();
+            if(port.isSuccessful()){
+                return port.getResult().getPortno();
+            }
+        }catch(NullPointerException | InterruptedException | ExecutionException e){
+            LOG.warn("Exception when getting port for interface",e);
+        }
+        return null;
     }
 
-
     @Override
     public BigInteger getDpnForInterface(String ifName) {
-        return interfaceManager.getDpnForInterface(ifName);
+        GetDpidFromInterfaceInput input = new GetDpidFromInterfaceInputBuilder().setIntfName(ifName).build();
+        Future<RpcResult<GetDpidFromInterfaceOutput>> output = interfaceManagerRpcService.getDpidFromInterface(input);
+        try {
+            RpcResult<GetDpidFromInterfaceOutput> dpn = output.get();
+            if(dpn.isSuccessful()){
+                return dpn.getResult().getDpid();
+            }
+        }catch(NullPointerException | InterruptedException | ExecutionException e){
+            LOG.warn("Exception when getting port for interface",e);
+        }
+        return null;
     }
 
     @Override
     public String getEndpointIpForDpn(BigInteger dpnId) {
-        return interfaceManager.getEndpointIpForDpn(dpnId);
+        GetEndpointIpForDpnInput input = new GetEndpointIpForDpnInputBuilder().setDpid(dpnId).build();
+        Future<RpcResult<GetEndpointIpForDpnOutput>> output = interfaceManagerRpcService.getEndpointIpForDpn(input);
+        try {
+            RpcResult<GetEndpointIpForDpnOutput> ipForDpnOutputRpcResult = output.get();
+            if(ipForDpnOutputRpcResult.isSuccessful()){
+                List<IpAddress> localIps = ipForDpnOutputRpcResult.getResult().getLocalIps();
+                if(!localIps.isEmpty()) {
+                    return localIps.get(0).getIpv4Address().getValue();
+                }
+            }
+        }catch(NullPointerException | InterruptedException | ExecutionException e){
+            LOG.warn("Exception when getting port for interface",e);
+        }
+        return null;
     }
 
     @Override
@@ -100,12 +202,11 @@ public class InterfacemgrProvider implements BindingAwareProvider, AutoCloseable
 
     @Override
     public List<ActionInfo> getInterfaceEgressActions(String ifName) {
-        return interfaceManager.getInterfaceEgressActions(ifName);
+        return interfaceManagerRpcService.getEgressActionInfosForInterface(ifName);
     }
 
     @Override
     public BigInteger getDpnForInterface(Interface intrf) {
-        // TODO Auto-generated method stub
-        return interfaceManager.getDpnForInterface(intrf);
+        return getDpnForInterface(intrf.getName());
     }
-}
+}
\ No newline at end of file