2 * Copyright (c) 2015 Ericsson India Global Services Pvt Ltd. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.vpnservice.itm.rpc;
10 import java.math.BigInteger;
11 import java.util.List;
12 import java.util.concurrent.Future;
14 import org.slf4j.Logger;
15 import org.slf4j.LoggerFactory;
16 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
17 import org.opendaylight.vpnservice.itm.confighelpers.ItmExternalTunnelAddWorker;
18 import org.opendaylight.vpnservice.itm.impl.ItmUtils;
19 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.itm.op.rev150701.tunnels.DPNTEPsInfo;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.itm.rpcs.rev151217.BuildTunnelFromDpnToDcgatewayInput;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.itm.rpcs.rev151217.BuildTunnelToDcgatewayInput;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.itm.rpcs.rev151217.GetTunnelInterfaceIdInput;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.itm.rpcs.rev151217.GetTunnelInterfaceIdOutput;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.itm.rpcs.rev151217.GetTunnelInterfaceIdOutputBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.itm.rpcs.rev151217.ItmRpcService;
27 import org.opendaylight.yangtools.yang.common.RpcResult;
28 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.InterfacesState;
29 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface;
30 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.InterfaceBuilder;
31 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
32 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder;
33 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.InterfaceKey;
35 import com.google.common.util.concurrent.FutureCallback;
36 import com.google.common.util.concurrent.Futures;
37 import com.google.common.util.concurrent.ListenableFuture;
38 import com.google.common.util.concurrent.SettableFuture;
40 import org.opendaylight.yangtools.yang.common.RpcError;
41 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
43 import com.google.common.base.Optional;
45 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
47 public class ItmManagerRpcService implements ItmRpcService {
49 private static final Logger LOG = LoggerFactory.getLogger(ItmRpcService.class);
50 DataBroker dataBroker;
51 public ItmManagerRpcService(DataBroker dataBroker) {
52 this.dataBroker = dataBroker;
56 public Future<RpcResult<java.lang.Void>> buildTunnelFromDpnToDcgateway(BuildTunnelFromDpnToDcgatewayInput input) {
57 //Ignore the Futures for now
58 final SettableFuture<RpcResult<Void>> result = SettableFuture.create();
59 ItmExternalTunnelAddWorker.buildTunnelsFromDpnToExternalEndPoint(dataBroker, input.getDpid(), null, input.getDcgwyid());
60 result.set(RpcResultBuilder.<Void>success().build());
65 public Future<RpcResult<GetTunnelInterfaceIdOutput>> getTunnelInterfaceId(GetTunnelInterfaceIdInput input) {
66 final SettableFuture<RpcResult<GetTunnelInterfaceIdOutput>> result = SettableFuture.create() ;
67 RpcResultBuilder<GetTunnelInterfaceIdOutput> resultBld = null;
68 BigInteger sourceDpn = input.getSourceDpid() ;
69 BigInteger destinationDpn = input.getDestinationDpid() ;
70 String parentName = null;
71 IpAddress srcIp = null ;
72 IpAddress destIp = null ;
73 List<DPNTEPsInfo> meshDpnList = ItmUtils.getTunnelMeshInfo(dataBroker);
74 for ( DPNTEPsInfo dpn : meshDpnList) {
75 if( (dpn.getDPNID()).equals(sourceDpn) ){
76 parentName = dpn.getTunnelEndPoints().get(0).getInterfaceName();
77 srcIp = dpn.getTunnelEndPoints().get(0).getIpAddress() ;
78 }else if( (dpn.getDPNID()).equals(destinationDpn)) {
79 destIp = dpn.getTunnelEndPoints().get(0).getIpAddress() ;
82 if( srcIp != null && destIp != null )
84 String trunkInterfaceName = ItmUtils.getTrunkInterfaceName(parentName, srcIp.getIpv4Address().getValue(), destIp.getIpv4Address().getValue()) ;
85 InstanceIdentifierBuilder<Interface> idBuilder = InstanceIdentifier.builder(InterfacesState.class)
86 .child(Interface.class, new InterfaceKey(trunkInterfaceName));
87 InstanceIdentifier<Interface> id = idBuilder.build();
88 Optional<Interface> stateIf = ItmUtils.read(LogicalDatastoreType.OPERATIONAL, id, dataBroker);
89 if(stateIf.isPresent()){
90 GetTunnelInterfaceIdOutputBuilder output = new GetTunnelInterfaceIdOutputBuilder() ;
91 output.setInterfaceid(stateIf.get().getIfIndex()) ;
92 resultBld.withResult(output.build()) ;
93 result.set(resultBld.build()) ;
95 result.set(RpcResultBuilder.<GetTunnelInterfaceIdOutput>failed().withError(RpcError.ErrorType.APPLICATION, "Interface Not found ").build()) ;
98 result.set(RpcResultBuilder.<GetTunnelInterfaceIdOutput>failed().withError(RpcError.ErrorType.APPLICATION, "Source or Destination Dpn Id not found ").build()) ;
104 public Future<RpcResult<java.lang.Void>> buildTunnelToDcgateway(BuildTunnelToDcgatewayInput input) {
105 //Ignore the Futures for now
106 final SettableFuture<RpcResult<Void>> result = SettableFuture.create();
107 ItmExternalTunnelAddWorker.buildTunnelsToExternalEndPoint(dataBroker, null, input.getDcgwyid()) ;
108 result.set(RpcResultBuilder.<Void>success().build());