X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=itm%2Fitm-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fvpnservice%2Fitm%2Frpc%2FItmManagerRpcService.java;h=c3adcc40e2b9255c54844940b04e56d8b7678248;hb=6a77580a6058d5a21de4a22852ac2ab38e2fea6c;hp=dad264df619811925ef286d19b625bab85669e51;hpb=e2253650acc6343c84883216d5d7f1bd6abf177f;p=vpnservice.git diff --git a/itm/itm-impl/src/main/java/org/opendaylight/vpnservice/itm/rpc/ItmManagerRpcService.java b/itm/itm-impl/src/main/java/org/opendaylight/vpnservice/itm/rpc/ItmManagerRpcService.java index dad264df..c3adcc40 100644 --- a/itm/itm-impl/src/main/java/org/opendaylight/vpnservice/itm/rpc/ItmManagerRpcService.java +++ b/itm/itm-impl/src/main/java/org/opendaylight/vpnservice/itm/rpc/ItmManagerRpcService.java @@ -17,20 +17,26 @@ import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.vpnservice.itm.confighelpers.ItmExternalTunnelAddWorker; import org.opendaylight.vpnservice.itm.impl.ItmUtils; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.itm.op.rev150701.tunnels.DPNTEPsInfo; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.itm.rpcs.rev151217.BuildTunnelFromDpnToDcgatewayInput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.itm.rpcs.rev151217.BuildTunnelToDcgatewayInput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.itm.rpcs.rev151217.GetTunnelInterfaceIdInput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.itm.rpcs.rev151217.GetTunnelInterfaceIdOutput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.itm.rpcs.rev151217.GetTunnelInterfaceIdOutputBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.itm.rpcs.rev151217.ItmRpcService; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.op.rev150701.ExternalTunnelList; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.op.rev150701.TunnelList; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.op.rev150701.dpn.endpoints.DPNTEPsInfo; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.op.rev150701.external.tunnel.list.ExternalTunnel; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.op.rev150701.external.tunnel.list.ExternalTunnelKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.op.rev150701.tunnel.list.Tunnel; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.op.rev150701.tunnel.list.TunnelKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.rpcs.rev151217.AddExternalTunnelEndpointInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.rpcs.rev151217.BuildExternalTunnelFromDpnsInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.rpcs.rev151217.GetExternalTunnelInterfaceNameInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.rpcs.rev151217.GetExternalTunnelInterfaceNameOutput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.rpcs.rev151217.GetExternalTunnelInterfaceNameOutputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.rpcs.rev151217.GetTunnelInterfaceNameInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.rpcs.rev151217.GetTunnelInterfaceNameOutput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.rpcs.rev151217.GetTunnelInterfaceNameOutputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.rpcs.rev151217.ItmRpcService; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.rpcs.rev151217.RemoveExternalTunnelEndpointInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.rpcs.rev151217.RemoveExternalTunnelFromDpnsInput; import org.opendaylight.yangtools.yang.common.RpcResult; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.InterfacesState; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.InterfaceBuilder; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.InterfaceKey; import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.Futures; @@ -46,66 +52,118 @@ import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; public class ItmManagerRpcService implements ItmRpcService { - private static final Logger LOG = LoggerFactory.getLogger(ItmRpcService.class); + private static final Logger LOG = LoggerFactory.getLogger(ItmManagerRpcService.class); DataBroker dataBroker; public ItmManagerRpcService(DataBroker dataBroker) { this.dataBroker = dataBroker; } - + @Override - public Future> buildTunnelFromDpnToDcgateway(BuildTunnelFromDpnToDcgatewayInput input) { - //Ignore the Futures for now - final SettableFuture> result = SettableFuture.create(); - ItmExternalTunnelAddWorker.buildTunnelsFromDpnToExternalEndPoint(dataBroker, input.getDpid(), null, input.getDcgwyid()); - result.set(RpcResultBuilder.success().build()); - return result ; - } - - @Override - public Future> getTunnelInterfaceId(GetTunnelInterfaceIdInput input) { - final SettableFuture> result = SettableFuture.create() ; - RpcResultBuilder resultBld = null; + public Future> getTunnelInterfaceName(GetTunnelInterfaceNameInput input) { + RpcResultBuilder resultBld = null; BigInteger sourceDpn = input.getSourceDpid() ; BigInteger destinationDpn = input.getDestinationDpid() ; - String parentName = null; - IpAddress srcIp = null ; - IpAddress destIp = null ; - List meshDpnList = ItmUtils.getTunnelMeshInfo(dataBroker); - for ( DPNTEPsInfo dpn : meshDpnList) { - if( (dpn.getDPNID()).equals(sourceDpn) ){ - parentName = dpn.getTunnelEndPoints().get(0).getInterfaceName(); - srcIp = dpn.getTunnelEndPoints().get(0).getIpAddress() ; - }else if( (dpn.getDPNID()).equals(destinationDpn)) { - destIp = dpn.getTunnelEndPoints().get(0).getIpAddress() ; - } - } - if( srcIp != null && destIp != null ) + InstanceIdentifier path = InstanceIdentifier.create( + TunnelList.class) + .child(Tunnel.class, new TunnelKey(destinationDpn, sourceDpn)); + + Optional tnl = ItmUtils.read(LogicalDatastoreType.CONFIGURATION, path, dataBroker); + + if( tnl != null && tnl.isPresent()) { - String trunkInterfaceName = ItmUtils.getTrunkInterfaceName(parentName, srcIp.getIpv4Address().getValue(), destIp.getIpv4Address().getValue()) ; - InstanceIdentifierBuilder idBuilder = InstanceIdentifier.builder(InterfacesState.class) - .child(Interface.class, new InterfaceKey(trunkInterfaceName)); - InstanceIdentifier id = idBuilder.build(); - Optional stateIf = ItmUtils.read(LogicalDatastoreType.OPERATIONAL, id, dataBroker); - if(stateIf.isPresent()){ - GetTunnelInterfaceIdOutputBuilder output = new GetTunnelInterfaceIdOutputBuilder() ; - output.setInterfaceid(stateIf.get().getIfIndex()) ; - resultBld.withResult(output.build()) ; - result.set(resultBld.build()) ; - }else { - result.set(RpcResultBuilder.failed().withError(RpcError.ErrorType.APPLICATION, "Interface Not found ").build()) ; - } + Tunnel tunnel = tnl.get(); + GetTunnelInterfaceNameOutputBuilder output = new GetTunnelInterfaceNameOutputBuilder() ; + output.setInterfaceName(tunnel.getTunnelInterfaceName()) ; + resultBld = RpcResultBuilder.success(); + resultBld.withResult(output.build()) ; }else { - result.set(RpcResultBuilder.failed().withError(RpcError.ErrorType.APPLICATION, "Source or Destination Dpn Id not found ").build()) ; + resultBld = RpcResultBuilder.failed(); } - return result ; + + return Futures.immediateFuture(resultBld.build()); } - @Override - public Future> buildTunnelToDcgateway(BuildTunnelToDcgatewayInput input) { - //Ignore the Futures for now - final SettableFuture> result = SettableFuture.create(); - ItmExternalTunnelAddWorker.buildTunnelsToExternalEndPoint(dataBroker, null, input.getDcgwyid()) ; - result.set(RpcResultBuilder.success().build()); - return result ; - } + + @Override + public Future> removeExternalTunnelEndpoint( + RemoveExternalTunnelEndpointInput input) { + // TODO Auto-generated method stub + return null; + } + + @Override + public Future> removeExternalTunnelFromDpns( + RemoveExternalTunnelFromDpnsInput input) { + //Ignore the Futures for now + final SettableFuture> result = SettableFuture.create(); +// ItmExternalTunnelDeleteWorker.buildTunnelsFromDpnToExternalEndPoint(dataBroker, input.getDpnId(), null, input.getDestinationIp()); + result.set(RpcResultBuilder.success().build()); + return result; + } + + @Override + public Future> buildExternalTunnelFromDpns( + BuildExternalTunnelFromDpnsInput input) { + //Ignore the Futures for now + final SettableFuture> result = SettableFuture.create(); + List> extTunnelResultList = ItmExternalTunnelAddWorker.buildTunnelsFromDpnToExternalEndPoint(dataBroker, input.getDpnId(), input.getDestinationIp(), input.getTunnelType()); + for (ListenableFuture extTunnelResult : extTunnelResultList) { + Futures.addCallback(extTunnelResult, new FutureCallback(){ + + @Override + public void onSuccess(Void aVoid) { + result.set(RpcResultBuilder.success().build()); + } + + @Override + public void onFailure(Throwable error) { + String msg = String.format("Unable to create ext tunnel"); + LOG.error("create ext tunnel failed. {}. {}", msg, error); + result.set(RpcResultBuilder.failed().withError(RpcError.ErrorType.APPLICATION, msg, error).build()); + } + }); + } + result.set(RpcResultBuilder.success().build()); + return result; + } + + @Override + public Future> addExternalTunnelEndpoint( + AddExternalTunnelEndpointInput input) { + // TODO Auto-generated method stub + + //Ignore the Futures for now + final SettableFuture> result = SettableFuture.create(); + // ItmExternalTunnelAddWorker.buildTunnelsToExternalEndPoint(dataBroker, null, input.getDestinationIp()) ; + result.set(RpcResultBuilder.success().build()); + return result; + } + + @Override + public Future> getExternalTunnelInterfaceName( + GetExternalTunnelInterfaceNameInput input) { + final SettableFuture> result = SettableFuture.create() ; + RpcResultBuilder resultBld; + BigInteger sourceDpn = input.getSourceDpid() ; + IpAddress destinationIp = input.getDestinationIp() ; + InstanceIdentifier path = InstanceIdentifier.create( + ExternalTunnelList.class) + .child(ExternalTunnel.class, new ExternalTunnelKey(destinationIp, sourceDpn)); + + Optional ext = ItmUtils.read(LogicalDatastoreType.CONFIGURATION, path, dataBroker); + + if( ext != null && ext.isPresent()) + { + ExternalTunnel exTunnel = ext.get(); + GetExternalTunnelInterfaceNameOutputBuilder output = new GetExternalTunnelInterfaceNameOutputBuilder() ; + output.setInterfaceName(exTunnel.getTunnelInterfaceName()) ; + resultBld = RpcResultBuilder.success(); + resultBld.withResult(output.build()) ; + }else { + resultBld = RpcResultBuilder.failed(); + } + + return Futures.immediateFuture(resultBld.build()); + + } }