From: esravik Date: Thu, 7 Jan 2016 09:25:46 +0000 (+0530) Subject: Itm:change in namespace, new RPCs, vpnmanager integration X-Git-Tag: release/beryllium~68 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=vpnservice.git;a=commitdiff_plain;h=3e477025479db59022496cabca5e85c79e70fc5a Itm:change in namespace, new RPCs, vpnmanager integration Change-Id: I5a67983b7192fc4a374e822f377627f15a38d286 Signed-off-by: esravik --- diff --git a/features/pom.xml b/features/pom.xml index e992726c..569c136b 100644 --- a/features/pom.xml +++ b/features/pom.xml @@ -285,17 +285,22 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL ${idmanager.version} - org.opendaylight.vpnservice + ${project.groupId} itm-impl ${itm.version} - org.opendaylight.vpnservice + ${project.groupId} itm-impl ${itm.version} config xml + + ${project.groupId} + itm-api + ${itm.version} + ${project.groupId} dhcpservice-impl diff --git a/features/src/main/features/features.xml b/features/src/main/features/features.xml index 99548a75..7268183e 100644 --- a/features/src/main/features/features.xml +++ b/features/src/main/features/features.xml @@ -21,6 +21,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html odl-mdsal-broker odl-mdsal-models odl-openflowplugin-nsf-model + odl-ovsdb-southbound-impl-rest mvn:org.opendaylight.controller/liblldp/${liblldp.version} mvn:org.opendaylight.neutron/model/${neutron.version} mvn:org.opendaylight.vpnservice/model-bgp/{{VERSION}} @@ -29,6 +30,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html mvn:org.opendaylight.vpnservice/mdsalutil-api/${vpnservices.version} mvn:org.opendaylight.vpnservice/arputil-api/${arputil.version} mvn:org.opendaylight.vpnservice/alivenessmonitor-api/${vpnservices.version} + mvn:org.opendaylight.vpnservice/interfacemgr-api/${interfacemgr.version} mvn:org.opendaylight.vpnservice/vpnmanager-api/${vpnmanager.version} mvn:org.opendaylight.vpnservice/fibmanager-api/${fibmanager.version} mvn:org.opendaylight.vpnservice/itm-api/${itm.version} diff --git a/fibmanager/fibmanager-impl/src/main/java/org/opendaylight/vpnservice/fibmanager/FibManager.java b/fibmanager/fibmanager-impl/src/main/java/org/opendaylight/vpnservice/fibmanager/FibManager.java index ef2bec3a..d3d58420 100644 --- a/fibmanager/fibmanager-impl/src/main/java/org/opendaylight/vpnservice/fibmanager/FibManager.java +++ b/fibmanager/fibmanager-impl/src/main/java/org/opendaylight/vpnservice/fibmanager/FibManager.java @@ -18,6 +18,8 @@ import java.net.UnknownHostException; import java.util.ArrayList; import java.util.Collection; 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.binding.api.DataChangeListener; @@ -48,17 +50,26 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.prefix.to._ import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.vpn.instance.op.data.VpnInstanceOpDataEntry; import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.vpn.instance.op.data.VpnInstanceOpDataEntryKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.vpn.instance.op.data.vpn.instance.op.data.entry.VpnToDpnList; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.itm.rpcs.rev151217.ItmRpcService; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.overlay.rev150105.TunnelTypeVxlan; +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.ItmRpcService; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev150330.FibEntries; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev150330.fibentries.VrfTables; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev150330.fibentries.VrfTablesKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev150330.vrfentries.VrfEntry; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.TunnelTypeBase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.TunnelTypeMplsOverGre; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rpcs.rev151003.GetEgressActionsForInterfaceInputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rpcs.rev151003.GetEgressActionsForInterfaceOutput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rpcs.rev151003.GetTunnelTypeInputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rpcs.rev151003.GetTunnelTypeOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rpcs.rev151003.OdlInterfaceRpcService; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.l3nexthop.rev150409.l3nexthop.vpnnexthops.VpnNexthop; import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder; +import org.opendaylight.yangtools.yang.common.RpcResult; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -317,13 +328,59 @@ public class FibManager extends AbstractDataChangeListener implements read(LogicalDatastoreType.OPERATIONAL, getPrefixToInterfaceIdentifier(vpnId, ipPrefix)); return localNextHopInfoData.isPresent() ? localNextHopInfoData.get() : null; } + + + private Class getTunnelType(String ifName) { + try { + Future> result = interfaceManager.getTunnelType( + new GetTunnelTypeInputBuilder().setIntfName(ifName).build()); + RpcResult rpcResult = result.get(); + if(!rpcResult.isSuccessful()) { + LOG.warn("RPC Call to getTunnelInterfaceId returned with Errors {}", rpcResult.getErrors()); + } else { + return rpcResult.getResult().getTunnelType(); + } + + } catch (InterruptedException | ExecutionException e) { + LOG.warn("Exception when getting tunnel interface Id for tunnel type {}", e); + } + + return null; + } private void createRemoteFibEntry(final BigInteger localDpnId, final BigInteger remoteDpnId, final long vpnId, final VrfTablesKey vrfTableKey, final VrfEntry vrfEntry) { String rd = vrfTableKey.getRouteDistinguisher(); LOG.debug("adding route " + vrfEntry.getDestPrefix() + " " + rd); - + /********************************************/ + String tunnelInterface = resolveAdjacency(localDpnId, remoteDpnId, vpnId, vrfEntry); + if(tunnelInterface == null) { + LOG.error("Could not get interface for nexthop: {} in vpn {}", + vrfEntry.getNextHopAddress(), rd); + LOG.warn("Failed to add Route: {} in vpn: {}", + vrfEntry.getDestPrefix(), rd); + return; + } + List actionInfos = nextHopManager.getEgressActionsForInterface(tunnelInterface); + Class tunnel_type = getTunnelType(tunnelInterface); + if (tunnel_type.equals(TunnelTypeMplsOverGre.class)) { + LOG.debug("Push label action for prefix {}", vrfEntry.getDestPrefix()); + actionInfos.add(new ActionInfo(ActionType.push_mpls, new String[] { null })); + actionInfos.add(new ActionInfo(ActionType.set_field_mpls_label, new String[] { Long.toString(vrfEntry.getLabel())})); + } else { + int label = vrfEntry.getLabel().intValue(); + BigInteger tunnelId; + if(tunnel_type.equals(TunnelTypeVxlan.class)) { + tunnelId = MetaDataUtil.getTunnelIdWithValidVniBitAndVniSet(label); + } else { + tunnelId = BigInteger.valueOf(label); + } + LOG.debug("adding set tunnel id action for label {}", label); + actionInfos.add(new ActionInfo(ActionType.set_field_tunnel_id, new BigInteger[] { + tunnelId, MetaDataUtil.METADA_MASK_VALID_TUNNEL_ID_BIT_AND_TUNNEL_ID })); + } +/* List actionInfos = resolveAdjacency(localDpnId, remoteDpnId, vpnId, vrfEntry); if(actionInfos == null) { LOG.error("Could not get nexthop group id for nexthop: {} in vpn {}", @@ -349,7 +406,7 @@ public class FibManager extends AbstractDataChangeListener implements MetaDataUtil.getTunnelIdWithValidVniBitAndVniSet(label), MetaDataUtil.METADA_MASK_VALID_TUNNEL_ID_BIT_AND_TUNNEL_ID })); } - +**/ makeConnectedRoute(remoteDpnId, vpnId, vrfEntry, rd, actionInfos, NwConstants.ADD_FLOW); LOG.debug( "Successfully added fib entry for " + vrfEntry.getDestPrefix() + " vpnId " + vpnId); @@ -381,8 +438,8 @@ public class FibManager extends AbstractDataChangeListener implements final VrfEntry vrfEntry) { LOG.debug("deleting route "+ vrfEntry.getDestPrefix() + " "+vpnId); String rd = vrfTableKey.getRouteDistinguisher(); - List actionInfos = resolveAdjacency(localDpnId, remoteDpnId, vpnId, vrfEntry); - if(actionInfos == null) { + String egressInterface = resolveAdjacency(localDpnId, remoteDpnId, vpnId, vrfEntry); + if(egressInterface == null) { LOG.error("Could not get nexthop group id for nexthop: {} in vpn {}", vrfEntry.getNextHopAddress(), rd); LOG.warn("Failed to delete Route: {} in vpn: {}", @@ -552,9 +609,9 @@ public class FibManager extends AbstractDataChangeListener implements .append(destPrefix.getHostAddress()).toString(); } - protected List resolveAdjacency(final BigInteger localDpnId, final BigInteger remoteDpnId, + protected String resolveAdjacency(final BigInteger localDpnId, final BigInteger remoteDpnId, final long vpnId, final VrfEntry vrfEntry) { - List adjacency = null; + String adjacency = null; LOG.trace("resolveAdjacency called with localdpid{} remotedpid {}, vpnId{}, VrfEntry {}", localDpnId, remoteDpnId, vpnId, vrfEntry);; try { adjacency = diff --git a/fibmanager/fibmanager-impl/src/main/java/org/opendaylight/vpnservice/fibmanager/FibManagerProvider.java b/fibmanager/fibmanager-impl/src/main/java/org/opendaylight/vpnservice/fibmanager/FibManagerProvider.java index 7d457708..382e6172 100644 --- a/fibmanager/fibmanager-impl/src/main/java/org/opendaylight/vpnservice/fibmanager/FibManagerProvider.java +++ b/fibmanager/fibmanager-impl/src/main/java/org/opendaylight/vpnservice/fibmanager/FibManagerProvider.java @@ -15,7 +15,7 @@ import org.opendaylight.controller.sal.binding.api.BindingAwareProvider; import org.opendaylight.fibmanager.api.IFibManager; import org.opendaylight.vpnmanager.api.IVpnManager; import org.opendaylight.vpnservice.mdsalutil.interfaces.IMdsalApiManager; -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.rpcs.rev151217.ItmRpcService; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.IdManagerService; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rpcs.rev151003.OdlInterfaceRpcService; import org.slf4j.Logger; diff --git a/fibmanager/fibmanager-impl/src/main/java/org/opendaylight/vpnservice/fibmanager/NexthopManager.java b/fibmanager/fibmanager-impl/src/main/java/org/opendaylight/vpnservice/fibmanager/NexthopManager.java index b762ced4..b8a01d13 100644 --- a/fibmanager/fibmanager-impl/src/main/java/org/opendaylight/vpnservice/fibmanager/NexthopManager.java +++ b/fibmanager/fibmanager-impl/src/main/java/org/opendaylight/vpnservice/fibmanager/NexthopManager.java @@ -24,6 +24,7 @@ import org.opendaylight.vpnservice.mdsalutil.interfaces.IMdsalApiManager; import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.VpnInterfaces; import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.interfaces.VpnInterface; import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.interfaces.VpnInterfaceKey; +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.inet.types.rev100924.IpAddressBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.OutputActionCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushVlanActionCase; @@ -33,9 +34,11 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.Adjacencies; import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.adjacency.list.Adjacency; import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.adjacency.list.AdjacencyKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.itm.rpcs.rev151217.GetTunnelInterfaceIdInputBuilder; -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.ItmRpcService; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.rpcs.rev151217.GetExternalTunnelInterfaceNameInputBuilder; +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.GetTunnelInterfaceNameInputBuilder; +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.ItmRpcService; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.AllocateIdInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.AllocateIdInputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.AllocateIdOutput; @@ -214,23 +217,43 @@ public class NexthopManager implements AutoCloseable { return listActionInfo; } - protected Integer getTunnelInterfaceId(BigInteger srcDpId, BigInteger dstDpId) { + protected String getTunnelInterfaceName(BigInteger srcDpId, BigInteger dstDpId) { // FIXME: Enable during itm integration - /* + try { - Future> result = itmManager.getTunnelInterfaceId(new GetTunnelInterfaceIdInputBuilder() + Future> result = itmManager.getTunnelInterfaceName(new GetTunnelInterfaceNameInputBuilder() .setSourceDpid(srcDpId) .setDestinationDpid(dstDpId).build()); - RpcResult rpcResult = result.get(); + RpcResult rpcResult = result.get(); if(!rpcResult.isSuccessful()) { LOG.warn("RPC Call to getTunnelInterfaceId returned with Errors {}", rpcResult.getErrors()); } else { - return rpcResult.getResult().getInterfaceid(); + return rpcResult.getResult().getInterfaceName(); } } catch (InterruptedException | ExecutionException e) { LOG.warn("Exception when getting tunnel interface Id for tunnel between {} and {}", srcDpId, dstDpId, e); } - */ + + return null; + } + + protected String getExternalTunnelInterfaceName(BigInteger srcDpId, IpAddress dstIp) { + // FIXME: Enable during itm integration + + try { + Future> result = itmManager.getExternalTunnelInterfaceName(new GetExternalTunnelInterfaceNameInputBuilder() + .setSourceDpid(srcDpId) + .setDestinationIp(dstIp).build()); + RpcResult rpcResult = result.get(); + if(!rpcResult.isSuccessful()) { + LOG.warn("RPC Call to getExternalTunnelInterfaceId returned with Errors {}", rpcResult.getErrors()); + } else { + return rpcResult.getResult().getInterfaceName(); + } + } catch (InterruptedException | ExecutionException e) { + LOG.warn("Exception when getting external tunnel interface Id for tunnel between {} and {}", srcDpId, dstIp, e); + } + return null; } @@ -334,9 +357,9 @@ public class NexthopManager implements AutoCloseable { } - public List getRemoteNextHopPointer(BigInteger localDpnId, BigInteger remoteDpnId, + public String getRemoteNextHopPointer(BigInteger localDpnId, BigInteger remoteDpnId, long vpnId, String prefixIp, String nextHopIp) { - List remoteNextHopActions = null; + String tunnelIfName = null; LOG.trace("getRemoteNextHopPointer: input [localDpnId {} remoteDpnId {}, vpnId {}, prefixIp {}, nextHopIp {} ]", localDpnId, remoteDpnId, vpnId, prefixIp, nextHopIp); @@ -353,22 +376,19 @@ public class NexthopManager implements AutoCloseable { } LOG.trace("getRemoteNextHopPointer: Calling ITM with localDpnId {} ", localDpnId); try{ + // here use the config for tunnel type param if(localDpnId != null){ - Integer interfaceId = getTunnelInterfaceId(remoteDpnId, localDpnId); - if(interfaceId != null) { - remoteNextHopActions = - getEgressActionsForInterface( - getTunnelInterfaceId(remoteDpnId, localDpnId).toString()); - } + //internal tunnel + tunnelIfName = getTunnelInterfaceName(remoteDpnId, localDpnId); } else { - // FIXME: dynamically build and use tunnel to dc gateway. - // remoteNextHopActions = itmManager.getEgressOutputForDCGateway(remoteDpnId, - // IpAddressBuilder.getDefaultInstance(nextHopIp)); + //external tunnel + tunnelIfName = getExternalTunnelInterfaceName(remoteDpnId, + IpAddressBuilder.getDefaultInstance(nextHopIp)); } }catch(Exception ex){ LOG.error("Error while retrieving nexthop pointer for DC Gateway : ", ex.getMessage()); } - return remoteNextHopActions; + return tunnelIfName; } public BigInteger getDpnForPrefix(long vpnId, String prefixIp) { diff --git a/fibmanager/fibmanager-impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/fibmanager/impl/rev150325/FibmanagerImplModule.java b/fibmanager/fibmanager-impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/fibmanager/impl/rev150325/FibmanagerImplModule.java index 1e7011e9..ede58da5 100644 --- a/fibmanager/fibmanager-impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/fibmanager/impl/rev150325/FibmanagerImplModule.java +++ b/fibmanager/fibmanager-impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/fibmanager/impl/rev150325/FibmanagerImplModule.java @@ -8,7 +8,7 @@ package org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.fibmanager.impl.rev150325; import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry; import org.opendaylight.vpnservice.fibmanager.FibManagerProvider; -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.rpcs.rev151217.ItmRpcService; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.IdManagerService; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rpcs.rev151003.OdlInterfaceRpcService; diff --git a/interfacemgr/interfacemgr-api/src/main/yang/odl-interface-rpc.yang b/interfacemgr/interfacemgr-api/src/main/yang/odl-interface-rpc.yang index a0399466..66e79efa 100644 --- a/interfacemgr/interfacemgr-api/src/main/yang/odl-interface-rpc.yang +++ b/interfacemgr/interfacemgr-api/src/main/yang/odl-interface-rpc.yang @@ -115,6 +115,23 @@ module odl-interface-rpc { } } + rpc get-tunnel-type { + description "to get the type of the tunnel interface(vxlan or gre)"; + input { + leaf intf-name { + type string; + } + } + output { + leaf tunnel-type { + type identityref { + base odlif:tunnel-type-base; + } + } + } + } + + rpc get-nodeconnector-id-from-interface { description "to get nodeconnector id associated with an interface"; input { diff --git a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/rpcservice/InterfaceManagerRpcService.java b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/rpcservice/InterfaceManagerRpcService.java index bd2b8b93..14070ed0 100644 --- a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/rpcservice/InterfaceManagerRpcService.java +++ b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/rpcservice/InterfaceManagerRpcService.java @@ -41,6 +41,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.met import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.IfL2vlan; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.IfTunnel; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.ParentRefs; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.TunnelTypeBase; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.TunnelTypeMplsOverGre; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rpcs.rev151003.*; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; @@ -236,6 +237,31 @@ public class InterfaceManagerRpcService implements OdlInterfaceRpcService { return Futures.immediateFuture(rpcResultBuilder.build()); } + @Override + public Future> getTunnelType(GetTunnelTypeInput input) { + String interfaceName = input.getIntfName(); + RpcResultBuilder rpcResultBuilder; + try { + InterfaceKey interfaceKey = new InterfaceKey(interfaceName); + Interface interfaceInfo = InterfaceManagerCommonUtils.getInterfaceFromConfigDS(interfaceKey, dataBroker); + + if (Tunnel.class.equals(interfaceInfo.getType())) { + IfTunnel tnl = interfaceInfo.getAugmentation(IfTunnel.class); + Class tun_type = tnl.getTunnelInterfaceType(); + GetTunnelTypeOutputBuilder output = new GetTunnelTypeOutputBuilder().setTunnelType(tun_type); + rpcResultBuilder = RpcResultBuilder.success(); + rpcResultBuilder.withResult(output.build()); + } else { + LOG.error("Retrieval of interface type for the key {} failed", interfaceName); + rpcResultBuilder = RpcResultBuilder.failed(); + } + } catch (Exception e) { + LOG.error("Retrieval of interface type for the key {} failed due to {}", interfaceName, e); + rpcResultBuilder = RpcResultBuilder.failed(); + } + return Futures.immediateFuture(rpcResultBuilder.build()); + } + @Override public Future> getEgressActionsForInterface(GetEgressActionsForInterfaceInput input) { RpcResultBuilder rpcResultBuilder; diff --git a/itm/itm-api/pom.xml b/itm/itm-api/pom.xml index 479728de..8a797e13 100644 --- a/itm/itm-api/pom.xml +++ b/itm/itm-api/pom.xml @@ -12,7 +12,7 @@ 4.0.0 org.opendaylight.vpnservice itm-api - 0.2.0-SNAPSHOT + ${vpnservices.version} bundle diff --git a/itm/itm-api/src/main/yang/itm-rpc.yang b/itm/itm-api/src/main/yang/itm-rpc.yang index 4779a265..83d52093 100644 --- a/itm/itm-api/src/main/yang/itm-rpc.yang +++ b/itm/itm-api/src/main/yang/itm-rpc.yang @@ -1,5 +1,5 @@ module itm-rpc { - namespace "urn:opendaylight:params:xml:ns:yang:itm:rpcs"; + namespace "urn:opendaylight:vpnservice:itm:rpcs"; prefix "itmrpcs"; import ietf-inet-types { @@ -15,46 +15,108 @@ module itm-rpc { prefix if; revision-date 2014-05-08; } + import odl-interface { + prefix odlif; + revision-date "2015-03-31"; + } + revision "2015-12-17" { description "ODL Specific Itm Manager Rpcs Module"; } /* RPCs */ - rpc get-tunnel-interface-id { + rpc get-tunnel-interface-name { description "used to retrieve tunnel interface id between Dpns"; input { leaf source-dpid { - type uint64; + type uint64; } leaf destination-dpid { - type uint64; + type uint64; } } output { - leaf interfaceid { - type uint16; + leaf interface-name { + type string; } } } - rpc build-tunnel-from-dpn-to-dcgateway { - description "used for building tunnels between a Dpn and DC Gateway"; + rpc get-external-tunnel-interface-name { + description "used to retrieve tunnel interface id between Dpns"; input { - leaf dpid { + leaf source-dpid { type uint64; } - leaf dcgwyid { + leaf destination-ip { type inet:ip-address; } } + output { + leaf interface-name { + type string; + } + } + } + + rpc build-external-tunnel-from-dpns { + description "used for building tunnels between a Dpn and external node"; + input { + leaf-list dpn-id { + type uint64; + } + leaf destination-ip { + type inet:ip-address; + } + leaf tunnel-type { + type identityref { + base odlif:tunnel-type-base; + } + } + } } - rpc build-tunnel-to-dcgateway { - description "used for building tunnels between teps on all Dpns and DC Gateway"; + rpc add-external-tunnel-endpoint { + description "used for building tunnels between teps on all Dpns and external node"; input { - leaf dcgwyid { - type inet:ip-address; + leaf destination-ip { + type inet:ip-address; + } + leaf tunnel-type { + type identityref { + base odlif:tunnel-type-base; + } + } + } + } + rpc remove-external-tunnel-from-dpns { + description "used for building tunnels between a Dpn and external node"; + input { + leaf-list dpn-id { + type uint64; + } + leaf destination-ip { + type inet:ip-address; + } + leaf tunnel-type { + type identityref { + base odlif:tunnel-type-base; + } + } + } + } + + rpc remove-external-tunnel-endpoint { + description "used for building tunnels between teps on all Dpns and external node"; + input { + leaf destination-ip { + type inet:ip-address; + } + leaf tunnel-type { + type identityref { + base odlif:tunnel-type-base; + } } } } diff --git a/itm/itm-api/src/main/yang/itm-state.yang b/itm/itm-api/src/main/yang/itm-state.yang index a1a1ce29..ea54594c 100644 --- a/itm/itm-api/src/main/yang/itm-state.yang +++ b/itm/itm-api/src/main/yang/itm-state.yang @@ -1,6 +1,6 @@ module itm-state { - namespace "urn:opendaylight:params:xml:ns:yang:itm:op"; + namespace "urn:opendaylight:vpnservice:itm:op"; prefix itm-state; @@ -16,6 +16,10 @@ module itm-state { prefix inet; revision-date "2010-09-24"; } + import odl-interface { + prefix odlif; revision-date "2015-03-31"; + } + description "This YANG module defines operation part of the model."; @@ -23,7 +27,7 @@ module itm-state { /* Operational state */ - container tunnels { + container dpn-endpoints { list DPN-TEPs-info { @@ -64,7 +68,9 @@ module itm-state { type string; } leaf tunnel-type { - type string; + type identityref { + base odlif:tunnel-type-base; + } } } @@ -72,8 +78,8 @@ module itm-state { } - container tunnels_state { - list state-tunnel-list { + container tunnel-list { + list tunnel { key "source-DPN destination-DPN"; @@ -87,36 +93,32 @@ module itm-state { /* logical-group interface id */ - leaf logical-tunnel-group-name { + leaf tunnel-interface-name { type string; - config false; } + } + } + + container external-tunnel-list { + list external-tunnel { - leaf logical-tunnel-state { - type boolean; - config false; + key "source-DPN destination-IP"; + + leaf source-DPN { + type uint64; } - } - } + leaf destination-IP { + type inet:ip-address; + } - rpc get-tunnel-id { + /* logical-group interface id */ - input { - leaf source-dpn { - type uint64; - } - leaf destination-dpn { - type uint64; - } - } + leaf tunnel-interface-name { + type string; + } - output { - leaf logical-group-name { - type string; - } } - } notification itm-tunnel-build-complete{ diff --git a/itm/itm-api/src/main/yang/itm.yang b/itm/itm-api/src/main/yang/itm.yang index 3dd4ba1f..8785d0a6 100644 --- a/itm/itm-api/src/main/yang/itm.yang +++ b/itm/itm-api/src/main/yang/itm.yang @@ -1,6 +1,6 @@ module itm { - namespace "urn:opendaylight:params:xml:ns:yang:itm"; + namespace "urn:opendaylight:vpnservice:itm"; prefix itm; @@ -14,6 +14,12 @@ module itm { prefix inet; revision-date "2010-09-24"; } + + import odl-interface { + prefix odlif; + } + + import config { prefix config; revision-date 2013-04-05; } description "This YANG module defines tunnel configuration."; @@ -28,7 +34,9 @@ module itm { type string; } leaf tunnel-type { - type string; + type identityref { + base odlif:tunnel-type-base; + } } list subnets { diff --git a/itm/itm-impl/pom.xml b/itm/itm-impl/pom.xml index 10463d8a..0e6fc4ff 100644 --- a/itm/itm-impl/pom.xml +++ b/itm/itm-impl/pom.xml @@ -11,7 +11,7 @@ 4.0.0 org.opendaylight.vpnservice itm-impl - 0.2.0-SNAPSHOT + ${vpnservices.version} bundle @@ -21,7 +21,7 @@ org.opendaylight.vpnservice itm-api - ${project.version} + ${vpnservices.version} org.opendaylight.vpnservice diff --git a/itm/itm-impl/src/main/java/org/opendaylight/vpnservice/itm/confighelpers/ItmExternalTunnelAddWorker.java b/itm/itm-impl/src/main/java/org/opendaylight/vpnservice/itm/confighelpers/ItmExternalTunnelAddWorker.java index 49b882fb..2dcbfcc2 100644 --- a/itm/itm-impl/src/main/java/org/opendaylight/vpnservice/itm/confighelpers/ItmExternalTunnelAddWorker.java +++ b/itm/itm-impl/src/main/java/org/opendaylight/vpnservice/itm/confighelpers/ItmExternalTunnelAddWorker.java @@ -17,28 +17,42 @@ import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; 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.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface; -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.op.rev150701.tunnels.dpn.teps.info.TunnelEndPoints; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.TunnelTypeBase; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.TunnelTypeGre; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.TunnelTypeVxlan; +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.dpn.endpoints.DPNTEPsInfo; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.op.rev150701.dpn.endpoints.dpn.teps.info.TunnelEndPoints; +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.ExternalTunnelBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.op.rev150701.external.tunnel.list.ExternalTunnelKey; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.commons.net.util.SubnetUtils; +import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.ListenableFuture; public class ItmExternalTunnelAddWorker { private static final Logger logger = LoggerFactory.getLogger(ItmExternalTunnelAddWorker.class ) ; - public static List> buildTunnelsToExternalEndPoint(DataBroker dataBroker,List meshedDpnList, IpAddress extIp) { + private static final FutureCallback DEFAULT_CALLBACK = + new FutureCallback() { + public void onSuccess(Void result) { + logger.debug("Success in Datastore operation"); + } + + public void onFailure(Throwable error) { + logger.error("Error in Datastore operation", error); + }; + }; + + public static List> buildTunnelsToExternalEndPoint(DataBroker dataBroker,List cfgDpnList, IpAddress extIp, Class tunType) { List> futures = new ArrayList<>(); WriteTransaction t = dataBroker.newWriteOnlyTransaction(); - if( null == meshedDpnList) - ItmUtils.getTunnelMeshInfo(dataBroker) ; - if( null != meshedDpnList) { - for( DPNTEPsInfo teps : meshedDpnList ) { + if( null != cfgDpnList) { + for( DPNTEPsInfo teps : cfgDpnList ) { // CHECK -- Assumption -- Only one End Point / Dpn for GRE/Vxlan Tunnels TunnelEndPoints firstEndPt = teps.getTunnelEndPoints().get(0) ; String interfaceName = firstEndPt.getInterfaceName() ; @@ -48,8 +62,7 @@ public class ItmExternalTunnelAddWorker { SubnetUtils utils = new SubnetUtils(subnetMaskStr); String dcGwyIpStr = String.valueOf(extIp.getValue()); IpAddress gwyIpAddress = (utils.getInfo().isInRange(dcGwyIpStr) ) ? null : firstEndPt.getGwIpAddress() ; - Class tunType = (teps.getTunnelEndPoints().get(0).getTunnelType().equals("GRE") ) ? TunnelTypeGre.class :TunnelTypeVxlan.class ; - String ifDescription = (tunType.equals("GRE") ) ? "GRE" : "VxLan" ; + String ifDescription = tunType.getName(); logger.debug( " Creating Trunk Interface with parameters trunk I/f Name - {}, parent I/f name - {}, source IP - {}, DC Gateway IP - {} gateway IP - {}",trunkInterfaceName, interfaceName, firstEndPt.getIpAddress(), extIp, gwyIpAddress ) ; Interface iface = ItmUtils.buildTunnelInterface(teps.getDPNID(), trunkInterfaceName, String.format( "%s %s",ifDescription, "Trunk Interface"), true, tunType, firstEndPt.getIpAddress(), extIp, gwyIpAddress) ; logger.debug( " Trunk Interface builder - {} ", iface ) ; @@ -58,22 +71,34 @@ public class ItmExternalTunnelAddWorker { logger.trace( " Writing Trunk Interface to Config DS {}, {} ", trunkIdentifier, iface ) ; //ItmUtils.asyncUpdate(LogicalDatastoreType.CONFIGURATION,trunkIdentifier, iface , dataBroker, ItmUtils.DEFAULT_CALLBACK); t.merge(LogicalDatastoreType.CONFIGURATION, trunkIdentifier, iface, true); + // update_external_tunnels_ds(teps.getDPNID(), extIp, trunkInterfaceName, tunType); + InstanceIdentifier path = InstanceIdentifier.create( + ExternalTunnelList.class) + .child(ExternalTunnel.class, new ExternalTunnelKey(extIp, teps.getDPNID())); + ExternalTunnel tnl = new ExternalTunnelBuilder().setKey(new ExternalTunnelKey(extIp, teps.getDPNID())) + .setDestinationIP(extIp) + .setSourceDPN(teps.getDPNID()) + .setTunnelInterfaceName(trunkInterfaceName).build(); + ItmUtils.asyncUpdate(LogicalDatastoreType.CONFIGURATION, path, tnl, dataBroker, DEFAULT_CALLBACK); } futures.add( t.submit()) ; } return futures ; } - public static List> buildTunnelsFromDpnToExternalEndPoint(DataBroker dataBroker,BigInteger dpnId,List meshedDpnList, IpAddress extIp) { + public static List> buildTunnelsFromDpnToExternalEndPoint(DataBroker dataBroker, List dpnId, IpAddress extIp, Class tunType) { List> futures = new ArrayList<>(); List cfgDpnList = new ArrayList() ; - if( null != meshedDpnList) { - for( DPNTEPsInfo teps : meshedDpnList ) { - if( teps.getDPNID().equals(dpnId)) { - cfgDpnList.add(teps) ; - } - } - futures = buildTunnelsToExternalEndPoint( dataBroker, cfgDpnList, extIp) ; + List meshedDpnList = ItmUtils.getTunnelMeshInfo(dataBroker) ; + if( null != meshedDpnList) { + for (BigInteger dpn : dpnId){ + for( DPNTEPsInfo teps : meshedDpnList ) { + if( teps.getDPNID().equals(dpn)) { + cfgDpnList.add(teps) ; + } + } + } + futures = buildTunnelsToExternalEndPoint( dataBroker, cfgDpnList, extIp, tunType) ; } return futures ; } diff --git a/itm/itm-impl/src/main/java/org/opendaylight/vpnservice/itm/confighelpers/ItmExternalTunnelDeleteWorker.java b/itm/itm-impl/src/main/java/org/opendaylight/vpnservice/itm/confighelpers/ItmExternalTunnelDeleteWorker.java index 13a6329e..50a036c0 100644 --- a/itm/itm-impl/src/main/java/org/opendaylight/vpnservice/itm/confighelpers/ItmExternalTunnelDeleteWorker.java +++ b/itm/itm-impl/src/main/java/org/opendaylight/vpnservice/itm/confighelpers/ItmExternalTunnelDeleteWorker.java @@ -16,8 +16,8 @@ import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; 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.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface; -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.op.rev150701.tunnels.dpn.teps.info.TunnelEndPoints; +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.dpn.endpoints.dpn.teps.info.TunnelEndPoints; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/itm/itm-impl/src/main/java/org/opendaylight/vpnservice/itm/confighelpers/ItmInternalTunnelAddWorker.java b/itm/itm-impl/src/main/java/org/opendaylight/vpnservice/itm/confighelpers/ItmInternalTunnelAddWorker.java index 8a914df3..8e62b9c9 100644 --- a/itm/itm-impl/src/main/java/org/opendaylight/vpnservice/itm/confighelpers/ItmInternalTunnelAddWorker.java +++ b/itm/itm-impl/src/main/java/org/opendaylight/vpnservice/itm/confighelpers/ItmInternalTunnelAddWorker.java @@ -12,6 +12,7 @@ import java.util.ArrayList; import java.util.List; import java.util.concurrent.Callable; +import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.ListenableFuture; import org.opendaylight.vpnservice.itm.impl.ItmUtils; @@ -19,13 +20,21 @@ import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; 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.params.xml.ns.yang.itm.op.rev150701.Tunnels; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.itm.op.rev150701.TunnelsBuilder; -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.op.rev150701.tunnels.dpn.teps.info.TunnelEndPoints; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.TunnelTypeBase; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.TunnelTypeGre; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.TunnelTypeVxlan; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.op.rev150701.DpnEndpoints; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.op.rev150701.DpnEndpointsBuilder; +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.dpn.endpoints.dpn.teps.info.TunnelEndPoints; +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.ExternalTunnelBuilder; +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.TunnelBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.op.rev150701.tunnel.list.TunnelKey; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; import org.slf4j.Logger; @@ -33,6 +42,17 @@ import org.slf4j.LoggerFactory; public class ItmInternalTunnelAddWorker { private static final Logger logger = LoggerFactory.getLogger(ItmInternalTunnelAddWorker.class) ; + private static final FutureCallback DEFAULT_CALLBACK = + new FutureCallback() { + public void onSuccess(Void result) { + logger.debug("Success in Datastore operation"); + } + + public void onFailure(Throwable error) { + logger.error("Error in Datastore operation", error); + }; + }; + public static List> build_all_tunnels(DataBroker dataBroker, List cfgdDpnList, List meshedDpnList) { logger.trace( "Building tunnels with DPN List {} " , cfgdDpnList ); @@ -44,6 +64,7 @@ public class ItmInternalTunnelAddWorker { } for( DPNTEPsInfo dpn : cfgdDpnList) { + //#####if dpn is not in meshedDpnList build_tunnel_from(dpn, meshedDpnList, dataBroker, t, futures); if(null == meshedDpnList) { meshedDpnList = new ArrayList() ; @@ -58,11 +79,11 @@ public class ItmInternalTunnelAddWorker { private static void updateOperationalDatastore(DataBroker dataBroker, DPNTEPsInfo dpn, WriteTransaction t, List> futures) { logger.debug("Updating CONFIGURATION datastore with DPN {} ", dpn); - InstanceIdentifier tnId = InstanceIdentifier.builder( Tunnels.class).build() ; + InstanceIdentifier dep = InstanceIdentifier.builder( DpnEndpoints.class).build() ; List dpnList = new ArrayList() ; dpnList.add(dpn) ; - Tunnels tnlBuilder = new TunnelsBuilder().setDPNTEPsInfo(dpnList).build() ; - t.merge(LogicalDatastoreType.CONFIGURATION, tnId, tnlBuilder, true); + DpnEndpoints tnlBuilder = new DpnEndpointsBuilder().setDPNTEPsInfo(dpnList).build() ; + t.merge(LogicalDatastoreType.CONFIGURATION, dep, tnlBuilder, true); } private static void build_tunnel_from( DPNTEPsInfo srcDpn,List meshedDpnList, DataBroker dataBroker, WriteTransaction t, List> futures) { @@ -120,8 +141,8 @@ public class ItmInternalTunnelAddWorker { // Wire Up logic logger.trace( "Wiring between source tunnel end points {}, destination tunnel end points {} " , srcte, dstte ); String interfaceName = srcte.getInterfaceName() ; - Class tunType = (srcte.getTunnelType().equals("GRE") ) ? TunnelTypeGre.class :TunnelTypeVxlan.class ; - String ifDescription = (srcte.getTunnelType().equals("GRE") ) ? "GRE" : "VxLan" ; + Class tunType = srcte.getTunnelType(); + String ifDescription = srcte.getTunnelType().getName(); // Form the trunk Interface Name String trunkInterfaceName = ItmUtils.getTrunkInterfaceName(interfaceName,srcte.getIpAddress().getIpv4Address().getValue(), dstte.getIpAddress().getIpv4Address().getValue()) ; IpAddress gwyIpAddress = ( srcte.getSubnetMask().equals(dstte.getSubnetMask()) ) ? null : srcte.getGwIpAddress() ; @@ -132,6 +153,15 @@ public class ItmInternalTunnelAddWorker { logger.debug( " Trunk Interface Identifier - {} ", trunkIdentifier ) ; logger.trace( " Writing Trunk Interface to Config DS {}, {} ", trunkIdentifier, iface ) ; t.merge(LogicalDatastoreType.CONFIGURATION, trunkIdentifier, iface, true); + // also update itm-state ds? + InstanceIdentifier path = InstanceIdentifier.create( + TunnelList.class) + .child(Tunnel.class, new TunnelKey(dstDpnId, srcDpnId)); + Tunnel tnl = new TunnelBuilder().setKey(new TunnelKey(dstDpnId, srcDpnId)) + .setDestinationDPN(dstDpnId) + .setSourceDPN(srcDpnId) + .setTunnelInterfaceName(trunkInterfaceName).build(); + ItmUtils.asyncUpdate(LogicalDatastoreType.CONFIGURATION, path, tnl, dataBroker, DEFAULT_CALLBACK); return true; } diff --git a/itm/itm-impl/src/main/java/org/opendaylight/vpnservice/itm/confighelpers/ItmInternalTunnelDeleteWorker.java b/itm/itm-impl/src/main/java/org/opendaylight/vpnservice/itm/confighelpers/ItmInternalTunnelDeleteWorker.java index 8922fd93..a6d3d47f 100644 --- a/itm/itm-impl/src/main/java/org/opendaylight/vpnservice/itm/confighelpers/ItmInternalTunnelDeleteWorker.java +++ b/itm/itm-impl/src/main/java/org/opendaylight/vpnservice/itm/confighelpers/ItmInternalTunnelDeleteWorker.java @@ -17,9 +17,9 @@ import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.vpnservice.itm.impl.ItmUtils; 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.params.xml.ns.yang.itm.op.rev150701.Tunnels; -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.op.rev150701.tunnels.dpn.teps.info.TunnelEndPoints; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.op.rev150701.DpnEndpoints; +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.dpn.endpoints.dpn.teps.info.TunnelEndPoints; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -66,13 +66,13 @@ public class ItmInternalTunnelDeleteWorker { // removing vtep / dpn from Tunnels OpDs. InstanceIdentifier tepPath = - InstanceIdentifier.builder(Tunnels.class).child(DPNTEPsInfo.class, srcDpn.getKey()) + InstanceIdentifier.builder(DpnEndpoints.class).child(DPNTEPsInfo.class, srcDpn.getKey()) .child(TunnelEndPoints.class, srcTep.getKey()).build(); logger.trace("Tep Removal from DPNTEPSINFO CONFIG DS " + srcTep); t.delete(LogicalDatastoreType.CONFIGURATION, tepPath); InstanceIdentifier dpnPath = - InstanceIdentifier.builder(Tunnels.class).child(DPNTEPsInfo.class, srcDpn.getKey()) + InstanceIdentifier.builder(DpnEndpoints.class).child(DPNTEPsInfo.class, srcDpn.getKey()) .build(); Optional dpnOptional = ItmUtils.read(LogicalDatastoreType.CONFIGURATION, dpnPath, dataBroker); @@ -84,15 +84,15 @@ public class ItmInternalTunnelDeleteWorker { // setUpOrRemoveTerminatingServiceTable(dpnRead.getDPNID(), false); logger.trace("DPN Removal from DPNTEPSINFO CONFIG DS " + dpnRead); t.delete(LogicalDatastoreType.CONFIGURATION, dpnPath); - InstanceIdentifier tnlContainerPath = - InstanceIdentifier.builder(Tunnels.class).build(); - Optional containerOptional = + InstanceIdentifier tnlContainerPath = + InstanceIdentifier.builder(DpnEndpoints.class).build(); + Optional containerOptional = ItmUtils.read(LogicalDatastoreType.CONFIGURATION, tnlContainerPath, dataBroker); // remove container if no DPNs are present if (containerOptional.isPresent()) { - Tunnels tnls = containerOptional.get(); - if (tnls.getDPNTEPsInfo() == null || tnls.getDPNTEPsInfo().isEmpty()) { + DpnEndpoints deps = containerOptional.get(); + if (deps.getDPNTEPsInfo() == null || deps.getDPNTEPsInfo().isEmpty()) { logger.trace("Container Removal from DPNTEPSINFO CONFIG DS"); t.delete(LogicalDatastoreType.CONFIGURATION, tnlContainerPath); } diff --git a/itm/itm-impl/src/main/java/org/opendaylight/vpnservice/itm/confighelpers/ItmTepAddWorker.java b/itm/itm-impl/src/main/java/org/opendaylight/vpnservice/itm/confighelpers/ItmTepAddWorker.java index 21bce967..e6dc9987 100644 --- a/itm/itm-impl/src/main/java/org/opendaylight/vpnservice/itm/confighelpers/ItmTepAddWorker.java +++ b/itm/itm-impl/src/main/java/org/opendaylight/vpnservice/itm/confighelpers/ItmTepAddWorker.java @@ -15,7 +15,7 @@ import com.google.common.util.concurrent.ListenableFuture; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.vpnservice.itm.impl.ItmUtils; -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.vpnservice.itm.op.rev150701.dpn.endpoints.DPNTEPsInfo; import org.slf4j.LoggerFactory; import org.slf4j.Logger; diff --git a/itm/itm-impl/src/main/java/org/opendaylight/vpnservice/itm/confighelpers/ItmTepRemoveWorker.java b/itm/itm-impl/src/main/java/org/opendaylight/vpnservice/itm/confighelpers/ItmTepRemoveWorker.java index 087da587..66ca7502 100644 --- a/itm/itm-impl/src/main/java/org/opendaylight/vpnservice/itm/confighelpers/ItmTepRemoveWorker.java +++ b/itm/itm-impl/src/main/java/org/opendaylight/vpnservice/itm/confighelpers/ItmTepRemoveWorker.java @@ -15,7 +15,7 @@ import com.google.common.util.concurrent.ListenableFuture; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.vpnservice.itm.impl.ItmUtils; -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.vpnservice.itm.op.rev150701.dpn.endpoints.DPNTEPsInfo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/itm/itm-impl/src/main/java/org/opendaylight/vpnservice/itm/impl/ITMManager.java b/itm/itm-impl/src/main/java/org/opendaylight/vpnservice/itm/impl/ITMManager.java index 07947391..87f8a8b1 100644 --- a/itm/itm-impl/src/main/java/org/opendaylight/vpnservice/itm/impl/ITMManager.java +++ b/itm/itm-impl/src/main/java/org/opendaylight/vpnservice/itm/impl/ITMManager.java @@ -24,8 +24,7 @@ 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.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.params.xml.ns.yang.itm.op.rev150701.Tunnels; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.itm.op.rev150701.TunnelsBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.op.rev150701.DpnEndpoints; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.TunnelTypeBase; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.TunnelTypeGre; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.TunnelTypeVxlan ; @@ -35,8 +34,7 @@ import org.slf4j.LoggerFactory; import org.opendaylight.vpnservice.mdsalutil.interfaces.IMdsalApiManager; -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.op.rev150701.tunnels.dpn.teps.info.TunnelEndPoints; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.op.rev150701.dpn.endpoints.DPNTEPsInfo; import com.google.common.base.Optional; diff --git a/itm/itm-impl/src/main/java/org/opendaylight/vpnservice/itm/impl/ItmProvider.java b/itm/itm-impl/src/main/java/org/opendaylight/vpnservice/itm/impl/ItmProvider.java index 441979ea..cba0777e 100644 --- a/itm/itm-impl/src/main/java/org/opendaylight/vpnservice/itm/impl/ItmProvider.java +++ b/itm/itm-impl/src/main/java/org/opendaylight/vpnservice/itm/impl/ItmProvider.java @@ -15,23 +15,23 @@ import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService; import org.opendaylight.controller.md.sal.binding.api.NotificationService; 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.vpnservice.interfacemgr.interfaces.IInterfaceManager; import org.opendaylight.vpnservice.itm.api.IITMProvider; import org.opendaylight.vpnservice.itm.listeners.TransportZoneListener; import org.opendaylight.vpnservice.itm.rpc.ItmManagerRpcService; import org.opendaylight.vpnservice.mdsalutil.interfaces.IMdsalApiManager; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.itm.op.rev150701.GetTunnelIdInput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.itm.op.rev150701.GetTunnelIdOutput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.itm.op.rev150701.ItmStateService; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.itm.op.rev150701.TunnelsState; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.itm.rev150701.transport.zones.transport.zone.*;; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rpcs.rev151003.OdlInterfaceRpcService; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.rpcs.rev151217.ItmRpcService; + import org.opendaylight.yangtools.yang.common.RpcResult; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class ItmProvider implements BindingAwareProvider, AutoCloseable, IITMProvider,ItmStateService { +public class ItmProvider implements BindingAwareProvider, AutoCloseable, IITMProvider /*,ItmStateService */{ private static final Logger LOG = LoggerFactory.getLogger(ItmProvider.class); private IInterfaceManager interfaceManager; @@ -42,6 +42,15 @@ public class ItmProvider implements BindingAwareProvider, AutoCloseable, IITMPro private ItmManagerRpcService itmRpcService ; private NotificationService notificationService; private TransportZoneListener tzChangeListener; + private RpcProviderRegistry rpcProviderRegistry; + + public void setRpcProviderRegistry(RpcProviderRegistry rpcProviderRegistry) { + this.rpcProviderRegistry = rpcProviderRegistry; + } + + public RpcProviderRegistry getRpcProviderRegistry() { + return this.rpcProviderRegistry; + } @Override public void onSessionInitiated(ProviderContext session) { @@ -52,6 +61,7 @@ public class ItmProvider implements BindingAwareProvider, AutoCloseable, IITMPro itmManager = new ITMManager(dataBroker); tzChangeListener = new TransportZoneListener(dataBroker) ; itmRpcService = new ItmManagerRpcService(dataBroker); + final BindingAwareBroker.RpcRegistration rpcRegistration = getRpcProviderRegistry().addRpcImplementation(ItmRpcService.class, itmRpcService); itmManager.setMdsalManager(mdsalManager); itmManager.setNotificationPublishService(notificationPublishService); @@ -90,11 +100,5 @@ public class ItmProvider implements BindingAwareProvider, AutoCloseable, IITMPro LOG.info("ItmProvider Closed"); } - @Override - public Future> getTunnelId( - GetTunnelIdInput input) { - // TODO Auto-generated method stub - return null; - } } diff --git a/itm/itm-impl/src/main/java/org/opendaylight/vpnservice/itm/impl/ItmUtils.java b/itm/itm-impl/src/main/java/org/opendaylight/vpnservice/itm/impl/ItmUtils.java index f1eaaed4..f156715a 100644 --- a/itm/itm-impl/src/main/java/org/opendaylight/vpnservice/itm/impl/ItmUtils.java +++ b/itm/itm-impl/src/main/java/org/opendaylight/vpnservice/itm/impl/ItmUtils.java @@ -24,6 +24,14 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces. import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceKey; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana._if.type.rev140508.Tunnel; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.*; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.op.rev150701.DpnEndpoints; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.op.rev150701.DpnEndpointsBuilder; +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.dpn.endpoints.DPNTEPsInfoBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.op.rev150701.dpn.endpoints.DPNTEPsInfoKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.op.rev150701.dpn.endpoints.dpn.teps.info.TunnelEndPoints; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.op.rev150701.dpn.endpoints.dpn.teps.info.TunnelEndPointsBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.op.rev150701.dpn.endpoints.dpn.teps.info.TunnelEndPointsKey; import org.opendaylight.vpnservice.itm.globals.ITMConstants; import org.opendaylight.vpnservice.mdsalutil.MDSALUtil; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress; @@ -31,15 +39,6 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types. import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.InterfaceType; 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.flow.types.rev131026.instruction.list.Instruction; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.itm.op.rev150701.Tunnels; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.itm.op.rev150701.TunnelsBuilder; -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.op.rev150701.tunnels.DPNTEPsInfoBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.itm.op.rev150701.tunnels.DPNTEPsInfoKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.itm.op.rev150701.tunnels.dpn.teps.info.TunnelEndPoints; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.itm.op.rev150701.tunnels.dpn.teps.info.TunnelEndPointsBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.itm.op.rev150701.tunnels.dpn.teps.info.TunnelEndPointsKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.itm.op.rev150701.tunnels_state.StateTunnelListKey; //import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice._interface.service.rev150602._interface.service.info.ServiceInfo; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; @@ -129,7 +128,7 @@ public class ItmUtils { public static InstanceIdentifier getDPNTEPInstance(BigInteger dpIdKey) { InstanceIdentifier.InstanceIdentifierBuilder dpnTepInfoBuilder = - InstanceIdentifier.builder(Tunnels.class).child(DPNTEPsInfo.class, new DPNTEPsInfoKey(dpIdKey)); + InstanceIdentifier.builder(DpnEndpoints.class).child(DPNTEPsInfo.class, new DPNTEPsInfoKey(dpIdKey)); InstanceIdentifier dpnInfo = dpnTepInfoBuilder.build(); return dpnInfo; } @@ -140,15 +139,15 @@ public class ItmUtils { } public static TunnelEndPoints createTunnelEndPoints(BigInteger dpnId, IpAddress ipAddress, String portName, int vlanId, - IpPrefix prefix, IpAddress gwAddress, String zoneName, String tunnel_type) { + IpPrefix prefix, IpAddress gwAddress, String zoneName, Class tunnel_type) { // when Interface Mgr provides support to take in Dpn Id return new TunnelEndPointsBuilder().setKey(new TunnelEndPointsKey(ipAddress, portName, vlanId)) .setSubnetMask(prefix).setGwIpAddress(gwAddress).setTransportZone(zoneName) .setInterfaceName(ItmUtils.getInterfaceName(dpnId, portName, vlanId)).setTunnelType(tunnel_type).build(); } - public static Tunnels createTunnel(List dpnTepInfo) { - return new TunnelsBuilder().setDPNTEPsInfo(dpnTepInfo).build(); + public static DpnEndpoints createDpnEndpoints(List dpnTepInfo) { + return new DpnEndpointsBuilder().setDPNTEPsInfo(dpnTepInfo).build(); } public static InstanceIdentifier buildId(String interfaceName) { @@ -174,11 +173,11 @@ public class ItmUtils { List dpnTEPs= null ; // Read the EndPoint Info from the operational database - InstanceIdentifierBuilder tnlBuilder = InstanceIdentifier.builder( Tunnels.class) ; - InstanceIdentifier tnls = tnlBuilder.build() ; - Optional tunnels = ItmUtils.read(LogicalDatastoreType.CONFIGURATION, tnls, dataBroker); - if( tunnels.isPresent()) { - Tunnels tn= tunnels.get() ; + InstanceIdentifierBuilder depBuilder = InstanceIdentifier.builder( DpnEndpoints.class) ; + InstanceIdentifier deps = depBuilder.build() ; + Optional dpnEps = ItmUtils.read(LogicalDatastoreType.CONFIGURATION, deps, dataBroker); + if( dpnEps.isPresent()) { + DpnEndpoints tn= dpnEps.get() ; dpnTEPs = tn.getDPNTEPsInfo() ; LOG.debug( "Read from CONFIGURATION datastore - No. of Dpns " , dpnTEPs.size() ); }else diff --git a/itm/itm-impl/src/main/java/org/opendaylight/vpnservice/itm/listeners/TransportZoneListener.java b/itm/itm-impl/src/main/java/org/opendaylight/vpnservice/itm/listeners/TransportZoneListener.java index 2878d850..3af1659a 100644 --- a/itm/itm-impl/src/main/java/org/opendaylight/vpnservice/itm/listeners/TransportZoneListener.java +++ b/itm/itm-impl/src/main/java/org/opendaylight/vpnservice/itm/listeners/TransportZoneListener.java @@ -24,13 +24,14 @@ import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException; import org.opendaylight.controller.md.sal.binding.api.DataBroker; 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.inet.types.rev100924.IpPrefix; -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.op.rev150701.tunnels.dpn.teps.info.TunnelEndPoints; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.itm.rev150701.TransportZones; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.itm.rev150701.TransportZonesBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.itm.rev150701.transport.zones.TransportZone; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.itm.rev150701.transport.zones.transport.zone.Subnets; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.itm.rev150701.transport.zones.transport.zone.subnets.Vteps; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.TunnelTypeBase; +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.dpn.endpoints.dpn.teps.info.TunnelEndPoints; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.rev150701.TransportZones; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.rev150701.TransportZonesBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.rev150701.transport.zones.TransportZone; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.rev150701.transport.zones.transport.zone.Subnets; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.rev150701.transport.zones.transport.zone.subnets.Vteps; import org.opendaylight.vpnservice.datastoreutils.AsyncDataTreeChangeListenerBase; import org.opendaylight.vpnservice.datastoreutils.DataStoreJobCoordinator; import org.opendaylight.vpnservice.itm.impl.ITMManager; @@ -136,7 +137,7 @@ public class TransportZoneListener extends AsyncDataTreeChangeListenerBase transportZoneList = transportZones.getTransportZone(); // for(TransportZone transportZone : transportZoneList) { String zone_name = transportZone.getZoneName(); - String tunnel_type = transportZone.getTunnelType(); + Class tunnel_type = transportZone.getTunnelType(); LOG.trace("Transport Zone_name: {}", zone_name); List subnetsList = transportZone.getSubnets(); if(subnetsList!=null){ 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()); + + } } diff --git a/itm/itm-impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/itm/impl/rev141210/ItmModule.java b/itm/itm-impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/vpnservice/itm/impl/rev141210/ItmModule.java similarity index 78% rename from itm/itm-impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/itm/impl/rev141210/ItmModule.java rename to itm/itm-impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/vpnservice/itm/impl/rev141210/ItmModule.java index 1c0a52a7..9ec91f52 100644 --- a/itm/itm-impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/itm/impl/rev141210/ItmModule.java +++ b/itm/itm-impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/vpnservice/itm/impl/rev141210/ItmModule.java @@ -1,12 +1,12 @@ -package org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.itm.impl.rev141210; +package org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.impl.rev141210; import org.opendaylight.vpnservice.itm.impl.ItmProvider; -public class ItmModule extends org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.itm.impl.rev141210.AbstractItmModule { +public class ItmModule extends org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.impl.rev141210.AbstractItmModule { public ItmModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) { super(identifier, dependencyResolver); } - public ItmModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver, org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.itm.impl.rev141210.ItmModule oldModule, java.lang.AutoCloseable oldInstance) { + public ItmModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver, org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.impl.rev141210.ItmModule oldModule, java.lang.AutoCloseable oldInstance) { super(identifier, dependencyResolver, oldModule, oldInstance); } @@ -21,6 +21,7 @@ public class ItmModule extends org.opendaylight.yang.gen.v1.urn.opendaylight.par provider.setMdsalApiManager(getMdsalutilDependency()); provider.setNotificationPublishService(getNotificationPublishServiceDependency()); provider.setNotificationService(getNotificationServiceDependency()); + provider.setRpcProviderRegistry(getRpcregistryDependency()); getBrokerDependency().registerProvider(provider); return provider; } diff --git a/itm/itm-impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/itm/impl/rev141210/ItmModuleFactory.java b/itm/itm-impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/vpnservice/itm/impl/rev141210/ItmModuleFactory.java similarity index 59% rename from itm/itm-impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/itm/impl/rev141210/ItmModuleFactory.java rename to itm/itm-impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/vpnservice/itm/impl/rev141210/ItmModuleFactory.java index cb3805e7..8311e9b8 100644 --- a/itm/itm-impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/itm/impl/rev141210/ItmModuleFactory.java +++ b/itm/itm-impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/vpnservice/itm/impl/rev141210/ItmModuleFactory.java @@ -3,11 +3,11 @@ * * Generated from: yang module name: itm-impl yang module local name: itm * Generated by: org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator -* Generated at: Fri Nov 27 15:43:12 IST 2015 +* Generated at: Mon Jan 04 14:02:13 IST 2016 * * Do not modify this file unless it is present under src/main directory */ -package org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.itm.impl.rev141210; -public class ItmModuleFactory extends org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.itm.impl.rev141210.AbstractItmModuleFactory { +package org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.impl.rev141210; +public class ItmModuleFactory extends org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.impl.rev141210.AbstractItmModuleFactory { } diff --git a/itm/itm-impl/src/main/yang/itm-impl.yang b/itm/itm-impl/src/main/yang/itm-impl.yang index 896e5d1a..99355420 100644 --- a/itm/itm-impl/src/main/yang/itm-impl.yang +++ b/itm/itm-impl/src/main/yang/itm-impl.yang @@ -1,6 +1,6 @@ module itm-impl { yang-version 1; - namespace "urn:opendaylight:params:xml:ns:yang:itm:impl"; + namespace "urn:opendaylight:vpnservice:itm:impl"; prefix "itm-impl"; import config { prefix config; revision-date 2013-04-05; } diff --git a/itm/itm-impl/src/test/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/itm/impl/rev141210/ItmModuleFactoryTest.java b/itm/itm-impl/src/test/java/org/opendaylight/yang/gen/v1/urn/opendaylight/itm/impl/rev141210/ItmModuleFactoryTest.java similarity index 85% rename from itm/itm-impl/src/test/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/itm/impl/rev141210/ItmModuleFactoryTest.java rename to itm/itm-impl/src/test/java/org/opendaylight/yang/gen/v1/urn/opendaylight/itm/impl/rev141210/ItmModuleFactoryTest.java index 5412e807..628c37da 100644 --- a/itm/itm-impl/src/test/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/itm/impl/rev141210/ItmModuleFactoryTest.java +++ b/itm/itm-impl/src/test/java/org/opendaylight/yang/gen/v1/urn/opendaylight/itm/impl/rev141210/ItmModuleFactoryTest.java @@ -5,7 +5,7 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.itm.impl.rev141210; +package org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.impl.rev141210; import org.junit.Test; diff --git a/itm/itm-impl/src/test/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/itm/impl/rev141210/ItmModuleTest.java b/itm/itm-impl/src/test/java/org/opendaylight/yang/gen/v1/urn/opendaylight/itm/impl/rev141210/ItmModuleTest.java similarity index 92% rename from itm/itm-impl/src/test/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/itm/impl/rev141210/ItmModuleTest.java rename to itm/itm-impl/src/test/java/org/opendaylight/yang/gen/v1/urn/opendaylight/itm/impl/rev141210/ItmModuleTest.java index be7420fc..e96efd6b 100644 --- a/itm/itm-impl/src/test/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/itm/impl/rev141210/ItmModuleTest.java +++ b/itm/itm-impl/src/test/java/org/opendaylight/yang/gen/v1/urn/opendaylight/itm/impl/rev141210/ItmModuleTest.java @@ -5,7 +5,7 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.itm.impl.rev141210; +package org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.impl.rev141210; import org.junit.Test; import org.opendaylight.controller.config.api.DependencyResolver; @@ -13,6 +13,7 @@ import org.opendaylight.controller.config.api.JmxAttribute; import org.opendaylight.controller.config.api.ModuleIdentifier; import org.opendaylight.controller.sal.binding.api.BindingAwareBroker; import org.opendaylight.vpnservice.itm.impl.ItmProvider; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.impl.rev141210.ItmModule; import javax.management.ObjectName; diff --git a/itm/pom.xml b/itm/pom.xml index 07e50df6..1a6fb277 100644 --- a/itm/pom.xml +++ b/itm/pom.xml @@ -16,7 +16,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL org.opendaylight.vpnservice itm-aggregator - 0.2.0-SNAPSHOT + {vpnservices.version} itm pom 4.0.0 diff --git a/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnInterfaceManager.java b/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnInterfaceManager.java index b82d6873..3c936718 100644 --- a/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnInterfaceManager.java +++ b/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnInterfaceManager.java @@ -8,12 +8,12 @@ package org.opendaylight.vpnservice; import org.opendaylight.vpnservice.utilities.InterfaceUtils; + import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.JdkFutureAdapters; import org.opendaylight.controller.md.sal.binding.api.*; - import org.opendaylight.vpnservice.mdsalutil.*; 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.yang.types.rev130715.PhysAddress; @@ -26,7 +26,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instru import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.arputil.rev151126.OdlArputilService; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.arputil.rev151126.SendArpResponseInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.arputil.rev151126.SendArpResponseInputBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.itm.rpcs.rev151217.ItmRpcService; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.servicebinding.rev151015.service.bindings.services.info.BoundServices; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev150330.FibEntries; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev150330.fibentries.VrfTables; @@ -49,6 +48,7 @@ import com.google.common.base.Optional; import org.opendaylight.bgpmanager.api.IBgpManager; import org.opendaylight.fibmanager.api.IFibManager; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rpcs.rev151003.OdlInterfaceRpcService; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.rpcs.rev151217.ItmRpcService; import org.opendaylight.vpnservice.mdsalutil.interfaces.IMdsalApiManager; import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; diff --git a/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnserviceProvider.java b/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnserviceProvider.java index 159646c0..3dd66445 100644 --- a/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnserviceProvider.java +++ b/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnserviceProvider.java @@ -18,7 +18,7 @@ import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderCo import org.opendaylight.controller.sal.binding.api.BindingAwareProvider; import org.opendaylight.fibmanager.api.IFibManager; import org.opendaylight.vpnmanager.api.IVpnManager; -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.rpcs.rev151217.ItmRpcService; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rpcs.rev151003.OdlInterfaceRpcService; import org.opendaylight.vpnservice.mdsalutil.interfaces.IMdsalApiManager; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.arputil.rev151126.OdlArputilService; diff --git a/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/utilities/InterfaceUtils.java b/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/utilities/InterfaceUtils.java index 2d1e2b70..bd0f22a3 100644 --- a/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/utilities/InterfaceUtils.java +++ b/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/utilities/InterfaceUtils.java @@ -18,10 +18,6 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces. 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.opendaylight.flow.types.rev131026.instruction.list.Instruction; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.itm.op.rev150701.Tunnels; -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.op.rev150701.tunnels.DPNTEPsInfoKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.itm.op.rev150701.tunnels.dpn.teps.info.TunnelEndPoints; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.servicebinding.rev151015.ServiceBindings; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.servicebinding.rev151015.ServiceTypeFlowBased; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.servicebinding.rev151015.StypeOpenflow; @@ -35,6 +31,10 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rpc import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rpcs.rev151003.GetDpidFromInterfaceInputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rpcs.rev151003.GetDpidFromInterfaceOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rpcs.rev151003.OdlInterfaceRpcService; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.op.rev150701.DpnEndpoints; +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.dpn.endpoints.DPNTEPsInfoKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.op.rev150701.dpn.endpoints.dpn.teps.info.TunnelEndPoints; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.common.RpcResult; import org.slf4j.Logger; @@ -73,7 +73,7 @@ public class InterfaceUtils { public static String getEndpointIpAddressForDPN(DataBroker broker, BigInteger dpnId) { String nextHopIp = null; InstanceIdentifier tunnelInfoId = - InstanceIdentifier.builder(Tunnels.class).child(DPNTEPsInfo.class, new DPNTEPsInfoKey(dpnId)).build(); + InstanceIdentifier.builder(DpnEndpoints.class).child(DPNTEPsInfo.class, new DPNTEPsInfoKey(dpnId)).build(); Optional tunnelInfo = VpnUtil.read(broker, LogicalDatastoreType.CONFIGURATION, tunnelInfoId); if (tunnelInfo.isPresent()) { List nexthopIpList = tunnelInfo.get().getTunnelEndPoints();