From 15e44d5b9ad65ece6e59c00fc272ae499c4f7d8c Mon Sep 17 00:00:00 2001 From: Deepthi V V Date: Wed, 13 Jan 2016 10:55:54 +0530 Subject: [PATCH] ITM changes - namespace change in config xml. - Tunnel interface name is truncated on node connector up event. Fix tunnel interface name. Change-Id: I1dbd65f6b8447c6a965c56a49405bda6e0557ee0 Signed-off-by: Deepthi V V --- .../vpnservice/itm/globals/ITMConstants.java | 7 +++ itm/itm-impl/pom.xml | 15 +++++++ .../src/main/config/default-config.xml | 8 ++-- .../ItmExternalTunnelAddWorker.java | 11 +++-- .../ItmExternalTunnelDeleteWorker.java | 6 ++- .../ItmInternalTunnelAddWorker.java | 27 ++++++----- .../ItmInternalTunnelDeleteWorker.java | 15 ++++--- .../itm/confighelpers/ItmTepAddWorker.java | 7 ++- .../itm/confighelpers/ItmTepRemoveWorker.java | 7 ++- .../vpnservice/itm/impl/ItmProvider.java | 28 ++++++++++-- .../vpnservice/itm/impl/ItmUtils.java | 45 ++++++++++++++++++- .../itm/listeners/TransportZoneListener.java | 9 ++-- .../itm/rpc/ItmManagerRpcService.java | 14 ++++-- 13 files changed, 156 insertions(+), 43 deletions(-) diff --git a/itm/itm-api/src/main/java/org/opendaylight/vpnservice/itm/globals/ITMConstants.java b/itm/itm-api/src/main/java/org/opendaylight/vpnservice/itm/globals/ITMConstants.java index 11c62041..cff7efe5 100644 --- a/itm/itm-api/src/main/java/org/opendaylight/vpnservice/itm/globals/ITMConstants.java +++ b/itm/itm-api/src/main/java/org/opendaylight/vpnservice/itm/globals/ITMConstants.java @@ -11,6 +11,13 @@ import java.math.BigInteger; public class ITMConstants{ + public static final short INTERNAL_TUNNEL_TABLE = 22; public static final BigInteger COOKIE_ITM = new BigInteger("9000000", 16); + + public static final String ITM_IDPOOL_NAME = "Itmservices"; + public static final long ITM_IDPOOL_START = 1L; + public static final String ITM_IDPOOL_SIZE = "100000"; + + } diff --git a/itm/itm-impl/pom.xml b/itm/itm-impl/pom.xml index 0e6fc4ff..ffbd3c99 100644 --- a/itm/itm-impl/pom.xml +++ b/itm/itm-impl/pom.xml @@ -23,6 +23,11 @@ itm-api ${vpnservices.version} + + org.opendaylight.vpnservice + idmanager-api + ${vpnservices.version} + org.opendaylight.vpnservice interfacemgr-api @@ -61,5 +66,15 @@ commons-net commons-net + + org.opendaylight.vpnservice + idmanager-api + 0.2.0-SNAPSHOT + + + org.opendaylight.vpnservice + idmanager-api + 0.2.0-SNAPSHOT + diff --git a/itm/itm-impl/src/main/config/default-config.xml b/itm/itm-impl/src/main/config/default-config.xml index cb063605..302d1f6e 100644 --- a/itm/itm-impl/src/main/config/default-config.xml +++ b/itm/itm-impl/src/main/config/default-config.xml @@ -9,8 +9,8 @@ and is available at http://www.eclipse.org/legal/epl-v10.html --> - urn:opendaylight:params:xml:ns:yang:itm?module=itm&revision=2015-07-01 - urn:opendaylight:params:xml:ns:yang:itm:impl?module=itm-impl&revision=2014-12-10 + urn:opendaylight:vpnservice:itm?module=itm&revision=2015-07-01 + urn:opendaylight:vpnservice:itm:impl?module=itm-impl&revision=2014-12-10 urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding?module=opendaylight-md-sal-binding&revision=2013-10-28 urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl?module=opendaylight-sal-binding-broker-impl&revision=2013-10-28 urn:opendaylight:params:xml:ns:yang:mdsalutil:api?module=odl-mdsalutil&revision=2015-04-10 @@ -21,7 +21,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html - prefix:itm + prefix:itm itm-default binding:binding-broker-osgi-registry @@ -51,7 +51,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html - prefix:itm + prefix:itm itm /modules/module[type='itm'][name='itm-default'] 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 2dcbfcc2..c44e96a2 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,6 +17,7 @@ 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.vpnservice.idmanager.rev150403.IdManagerService; 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; @@ -48,7 +49,8 @@ public class ItmExternalTunnelAddWorker { }; }; - public static List> buildTunnelsToExternalEndPoint(DataBroker dataBroker,List cfgDpnList, IpAddress extIp, Class tunType) { + public static List> buildTunnelsToExternalEndPoint(DataBroker dataBroker, IdManagerService idManagerService, + List cfgDpnList, IpAddress extIp, Class tunType) { List> futures = new ArrayList<>(); WriteTransaction t = dataBroker.newWriteOnlyTransaction(); if( null != cfgDpnList) { @@ -56,7 +58,7 @@ public class ItmExternalTunnelAddWorker { // CHECK -- Assumption -- Only one End Point / Dpn for GRE/Vxlan Tunnels TunnelEndPoints firstEndPt = teps.getTunnelEndPoints().get(0) ; String interfaceName = firstEndPt.getInterfaceName() ; - String trunkInterfaceName = ItmUtils.getTrunkInterfaceName(interfaceName, firstEndPt.getIpAddress().getIpv4Address().getValue(), extIp.getIpv4Address().getValue()) ; + String trunkInterfaceName = ItmUtils.getTrunkInterfaceName(idManagerService, interfaceName, firstEndPt.getIpAddress().getIpv4Address().getValue(), extIp.getIpv4Address().getValue()) ; char[] subnetMaskArray = firstEndPt.getSubnetMask().getValue() ; String subnetMaskStr = String.valueOf(subnetMaskArray) ; SubnetUtils utils = new SubnetUtils(subnetMaskStr); @@ -86,7 +88,8 @@ public class ItmExternalTunnelAddWorker { return futures ; } - public static List> buildTunnelsFromDpnToExternalEndPoint(DataBroker dataBroker, List dpnId, IpAddress extIp, Class tunType) { + public static List> buildTunnelsFromDpnToExternalEndPoint(DataBroker dataBroker, IdManagerService idManagerService, + List dpnId, IpAddress extIp, Class tunType) { List> futures = new ArrayList<>(); List cfgDpnList = new ArrayList() ; List meshedDpnList = ItmUtils.getTunnelMeshInfo(dataBroker) ; @@ -98,7 +101,7 @@ public class ItmExternalTunnelAddWorker { } } } - futures = buildTunnelsToExternalEndPoint( dataBroker, cfgDpnList, extIp, tunType) ; + futures = buildTunnelsToExternalEndPoint( dataBroker, idManagerService, 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 50a036c0..b976155d 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,6 +16,7 @@ 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.vpnservice.idmanager.rev150403.IdManagerService; 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; @@ -27,7 +28,8 @@ import com.google.common.util.concurrent.ListenableFuture; public class ItmExternalTunnelDeleteWorker { private static final Logger logger = LoggerFactory.getLogger(ItmExternalTunnelDeleteWorker.class ) ; - public static List> deleteTunnels(DataBroker dataBroker, List dpnTepsList,IpAddress extIp ) { + public static List> deleteTunnels(DataBroker dataBroker, IdManagerService idManagerService, + List dpnTepsList, IpAddress extIp ) { logger.trace( " Delete Tunnels towards DC Gateway with Ip {}", extIp ) ; List> futures = new ArrayList<>(); WriteTransaction t = dataBroker.newWriteOnlyTransaction(); @@ -39,7 +41,7 @@ public class ItmExternalTunnelDeleteWorker { for( DPNTEPsInfo teps : dpnTepsList) { TunnelEndPoints firstEndPt = teps.getTunnelEndPoints().get(0) ; String interfaceName = firstEndPt.getInterfaceName() ; - String trunkInterfaceName = ItmUtils.getTrunkInterfaceName(interfaceName, firstEndPt.getIpAddress().getIpv4Address().getValue(), extIp.getIpv4Address().getValue()) ; + String trunkInterfaceName = ItmUtils.getTrunkInterfaceName(idManagerService, interfaceName, firstEndPt.getIpAddress().getIpv4Address().getValue(), extIp.getIpv4Address().getValue()) ; InstanceIdentifier trunkIdentifier = ItmUtils.buildId(trunkInterfaceName); t.delete(LogicalDatastoreType.CONFIGURATION, trunkIdentifier); } 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 8e62b9c9..faa2c6bf 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 @@ -20,6 +20,7 @@ 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.vpnservice.idmanager.rev150403.IdManagerService; 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; @@ -54,7 +55,8 @@ public class ItmInternalTunnelAddWorker { }; - public static List> build_all_tunnels(DataBroker dataBroker, List cfgdDpnList, List meshedDpnList) { + public static List> build_all_tunnels(DataBroker dataBroker, IdManagerService idManagerService, + List cfgdDpnList, List meshedDpnList) { logger.trace( "Building tunnels with DPN List {} " , cfgdDpnList ); List> futures = new ArrayList<>(); WriteTransaction t = dataBroker.newWriteOnlyTransaction(); @@ -65,7 +67,7 @@ public class ItmInternalTunnelAddWorker { for( DPNTEPsInfo dpn : cfgdDpnList) { //#####if dpn is not in meshedDpnList - build_tunnel_from(dpn, meshedDpnList, dataBroker, t, futures); + build_tunnel_from(dpn, meshedDpnList, dataBroker, idManagerService, t, futures); if(null == meshedDpnList) { meshedDpnList = new ArrayList() ; } @@ -86,7 +88,7 @@ public class ItmInternalTunnelAddWorker { t.merge(LogicalDatastoreType.CONFIGURATION, dep, tnlBuilder, true); } - private static void build_tunnel_from( DPNTEPsInfo srcDpn,List meshedDpnList, DataBroker dataBroker, WriteTransaction t, List> futures) { + private static void build_tunnel_from( DPNTEPsInfo srcDpn,List meshedDpnList, DataBroker dataBroker, IdManagerService idManagerService, WriteTransaction t, List> futures) { logger.trace( "Building tunnels from DPN {} " , srcDpn ); if( null == meshedDpnList || 0 == meshedDpnList.size()) { @@ -95,12 +97,13 @@ public class ItmInternalTunnelAddWorker { } for( DPNTEPsInfo dstDpn: meshedDpnList) { if ( ! srcDpn.equals(dstDpn) ) - wireUpWithinTransportZone(srcDpn, dstDpn, dataBroker, t, futures) ; + wireUpWithinTransportZone(srcDpn, dstDpn, dataBroker, idManagerService, t, futures) ; } } - private static void wireUpWithinTransportZone( DPNTEPsInfo srcDpn, DPNTEPsInfo dstDpn, DataBroker dataBroker, WriteTransaction t, List> futures) { + private static void wireUpWithinTransportZone( DPNTEPsInfo srcDpn, DPNTEPsInfo dstDpn, DataBroker dataBroker, + IdManagerService idManagerService, WriteTransaction t, List> futures) { logger.trace( "Wiring up within Transport Zone for Dpns {}, {} " , srcDpn, dstDpn ); List srcEndPts = srcDpn.getTunnelEndPoints(); List dstEndPts = dstDpn.getTunnelEndPoints(); @@ -111,7 +114,7 @@ public class ItmInternalTunnelAddWorker { if (!srcDpn.getDPNID().equals(dstDpn.getDPNID())) { if( (srcte.getTransportZone().equals(dstte.getTransportZone()))) { // wire them up - wireUpBidirectionalTunnel( srcte, dstte, srcDpn.getDPNID(), dstDpn.getDPNID(), dataBroker, t, futures ); + wireUpBidirectionalTunnel( srcte, dstte, srcDpn.getDPNID(), dstDpn.getDPNID(), dataBroker, idManagerService, t, futures ); // CHECK THIS -- Assumption -- One end point per Dpn per transport zone break ; } @@ -121,30 +124,30 @@ public class ItmInternalTunnelAddWorker { } private static void wireUpBidirectionalTunnel( TunnelEndPoints srcte, TunnelEndPoints dstte, BigInteger srcDpnId, BigInteger dstDpnId, - DataBroker dataBroker, WriteTransaction t, List> futures) { + DataBroker dataBroker, IdManagerService idManagerService, WriteTransaction t, List> futures) { // Setup the flow for LLDP monitoring -- PUNT TO CONTROLLER // setUpOrRemoveTerminatingServiceTable(srcDpnId, true); // setUpOrRemoveTerminatingServiceTable(dstDpnId, true); // Create the forward direction tunnel - if(!wireUp( srcte, dstte, srcDpnId, dstDpnId, dataBroker, t, futures )) + if(!wireUp( srcte, dstte, srcDpnId, dstDpnId, dataBroker, idManagerService, t, futures )) logger.error("Could not build tunnel between end points {}, {} " , srcte, dstte ); // CHECK IF FORWARD IS NOT BUILT , REVERSE CAN BE BUILT // Create the tunnel for the reverse direction - if(! wireUp( dstte, srcte, dstDpnId, srcDpnId, dataBroker, t, futures )) + if(! wireUp( dstte, srcte, dstDpnId, srcDpnId, dataBroker, idManagerService, t, futures )) logger.error("Could not build tunnel between end points {}, {} " , dstte, srcte); } - private static boolean wireUp( TunnelEndPoints srcte, TunnelEndPoints dstte, BigInteger srcDpnId, BigInteger dstDpnId , - DataBroker dataBroker, WriteTransaction t, List> futures) { + private static boolean wireUp(TunnelEndPoints srcte, TunnelEndPoints dstte, BigInteger srcDpnId, BigInteger dstDpnId , + DataBroker dataBroker, IdManagerService idManagerService, WriteTransaction t, List> futures) { // 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(); String ifDescription = srcte.getTunnelType().getName(); // Form the trunk Interface Name - String trunkInterfaceName = ItmUtils.getTrunkInterfaceName(interfaceName,srcte.getIpAddress().getIpv4Address().getValue(), dstte.getIpAddress().getIpv4Address().getValue()) ; + String trunkInterfaceName = ItmUtils.getTrunkInterfaceName(idManagerService, interfaceName,srcte.getIpAddress().getIpv4Address().getValue(), dstte.getIpAddress().getIpv4Address().getValue()) ; IpAddress gwyIpAddress = ( srcte.getSubnetMask().equals(dstte.getSubnetMask()) ) ? null : srcte.getGwIpAddress() ; logger.debug( " Creating Trunk Interface with parameters trunk I/f Name - {}, parent I/f name - {}, source IP - {}, destination IP - {} gateway IP - {}",trunkInterfaceName, interfaceName, srcte.getIpAddress(), dstte.getIpAddress(), gwyIpAddress ) ; Interface iface = ItmUtils.buildTunnelInterface(srcDpnId, trunkInterfaceName, String.format( "%s %s",ifDescription, "Trunk Interface"), true, tunType, srcte.getIpAddress(), dstte.getIpAddress(), gwyIpAddress) ; 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 a6d3d47f..cb0b23f1 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,6 +17,7 @@ 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.vpnservice.idmanager.rev150403.IdManagerService; 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; @@ -30,7 +31,8 @@ import com.google.common.util.concurrent.ListenableFuture; public class ItmInternalTunnelDeleteWorker { private static final Logger logger = LoggerFactory.getLogger(ItmInternalTunnelDeleteWorker.class) ; - public static List> deleteTunnels(DataBroker dataBroker, List dpnTepsList, List meshedDpnList) + public static List> deleteTunnels(DataBroker dataBroker, IdManagerService idManagerService, + List dpnTepsList, List meshedDpnList) { List> futures = new ArrayList<>(); WriteTransaction t = dataBroker.newWriteOnlyTransaction(); @@ -58,7 +60,7 @@ public class ItmInternalTunnelDeleteWorker { if (dstTep.getTransportZone().equals(srcTZone)) { // remove all trunk interfaces logger.trace("Invoking removeTrunkInterface between source TEP {} , Destination TEP {} " ,srcTep , dstTep); - removeTrunkInterface(dataBroker, srcTep, dstTep, srcDpn.getDPNID(), dstDpn.getDPNID(), t, futures); + removeTrunkInterface(dataBroker, idManagerService, srcTep, dstTep, srcDpn.getDPNID(), dstDpn.getDPNID(), t, futures); } } } @@ -108,10 +110,11 @@ public class ItmInternalTunnelDeleteWorker { return futures ; } - private static void removeTrunkInterface(DataBroker dataBroker, TunnelEndPoints srcTep, TunnelEndPoints dstTep, BigInteger srcDpnId, BigInteger dstDpnId, - WriteTransaction t, List> futures) { + private static void removeTrunkInterface(DataBroker dataBroker, IdManagerService idManagerService, + TunnelEndPoints srcTep, TunnelEndPoints dstTep, BigInteger srcDpnId, BigInteger dstDpnId, + WriteTransaction t, List> futures) { String trunkfwdIfName = - ItmUtils.getTrunkInterfaceName(srcTep.getInterfaceName(), srcTep.getIpAddress() + ItmUtils.getTrunkInterfaceName(idManagerService, srcTep.getInterfaceName(), srcTep.getIpAddress() .getIpv4Address().getValue(), dstTep.getIpAddress().getIpv4Address() .getValue()); logger.trace("Removing forward Trunk Interface " + trunkfwdIfName); @@ -119,7 +122,7 @@ public class ItmInternalTunnelDeleteWorker { logger.debug( " Removing Trunk Interface Name - {} , Id - {} from Config DS {}, {} ", trunkfwdIfName, trunkIdentifier ) ; t.delete(LogicalDatastoreType.CONFIGURATION, trunkIdentifier); String trunkRevIfName = - ItmUtils.getTrunkInterfaceName(dstTep.getInterfaceName(), dstTep.getIpAddress() + ItmUtils.getTrunkInterfaceName(idManagerService, dstTep.getInterfaceName(), dstTep.getIpAddress() .getIpv4Address().getValue(), srcTep.getIpAddress().getIpv4Address() .getValue()); logger.trace("Removing Reverse Trunk Interface " + trunkRevIfName); 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 e6dc9987..92c17e06 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,6 +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.vpnservice.idmanager.rev150403.IdManagerService; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.op.rev150701.dpn.endpoints.DPNTEPsInfo; import org.slf4j.LoggerFactory; import org.slf4j.Logger; @@ -22,12 +23,14 @@ import org.slf4j.Logger; public class ItmTepAddWorker implements Callable>> { private static final Logger logger = LoggerFactory.getLogger(ItmTepAddWorker.class ) ; private DataBroker dataBroker; + private IdManagerService idManagerService; private List meshedDpnList; private List cfgdDpnList ; - public ItmTepAddWorker( List cfgdDpnList, DataBroker broker) { + public ItmTepAddWorker( List cfgdDpnList, DataBroker broker, IdManagerService idManagerService) { this.cfgdDpnList = cfgdDpnList ; this.dataBroker = broker ; + this.idManagerService = idManagerService; logger.trace("ItmTepAddWorker initialized with DpnList {}",cfgdDpnList ); } @@ -36,7 +39,7 @@ public class ItmTepAddWorker implements Callable>> { List> futures = new ArrayList<>() ; this.meshedDpnList = ItmUtils.getTunnelMeshInfo(dataBroker) ; logger.debug("Invoking Internal Tunnel build method with Configured DpnList {} ; Meshed DpnList {} ",cfgdDpnList, meshedDpnList ); - futures.addAll( ItmInternalTunnelAddWorker.build_all_tunnels(dataBroker, cfgdDpnList, meshedDpnList) ) ; + futures.addAll( ItmInternalTunnelAddWorker.build_all_tunnels(dataBroker, idManagerService, cfgdDpnList, meshedDpnList) ) ; // IF EXTERNAL TUNNELS NEEDS TO BE BUILT, DO IT HERE. IT COULD BE TO DC GATEWAY OR TOR SWITCH //futures.addAll(ItmExternalTunnelAddWorker.buildTunnelsToExternalEndPoint(dataBroker,meshedDpnList, extIp) ; return futures ; 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 66ca7502..6c4cb008 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,6 +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.vpnservice.idmanager.rev150403.IdManagerService; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.op.rev150701.dpn.endpoints.DPNTEPsInfo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -24,10 +25,12 @@ public class ItmTepRemoveWorker implements Callable> private DataBroker dataBroker; private List delDpnList ; private List meshedDpnList ; + private IdManagerService idManagerService; - public ItmTepRemoveWorker( List delDpnList, DataBroker broker) { + public ItmTepRemoveWorker( List delDpnList, DataBroker broker, IdManagerService idManagerService) { this.delDpnList = delDpnList ; this.dataBroker = broker ; + this.idManagerService = idManagerService; logger.trace("ItmTepRemoveWorker initialized with DpnList {}",delDpnList ); } @@ -35,7 +38,7 @@ public class ItmTepRemoveWorker implements Callable> public List> call() throws Exception { List> futures = new ArrayList<>() ; this.meshedDpnList = ItmUtils.getTunnelMeshInfo(dataBroker) ; - futures.addAll( ItmInternalTunnelDeleteWorker.deleteTunnels(dataBroker, delDpnList, meshedDpnList)); + futures.addAll( ItmInternalTunnelDeleteWorker.deleteTunnels(dataBroker, idManagerService, delDpnList, meshedDpnList)); logger.debug("Invoking Internal Tunnel delete method with DpnList to be deleted {} ; Meshed DpnList {} ",delDpnList, meshedDpnList ); // IF EXTERNAL TUNNELS NEEDS TO BE DELETED, DO IT HERE, IT COULD BE TO DC GATEWAY OR TOR SWITCH return futures ; 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 b805a629..1a4c0296 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 @@ -9,6 +9,7 @@ package org.opendaylight.vpnservice.itm.impl; import java.math.BigInteger; import java.util.List; +import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import org.opendaylight.controller.md.sal.binding.api.DataBroker; @@ -21,9 +22,13 @@ 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.globals.ITMConstants; 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.vpnservice.idmanager.rev150403.CreateIdPoolInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.CreateIdPoolInputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.IdManagerService; 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; @@ -40,6 +45,7 @@ public class ItmProvider implements BindingAwareProvider, AutoCloseable, IITMPro private DataBroker dataBroker; private NotificationPublishService notificationPublishService; private ItmManagerRpcService itmRpcService ; + private IdManagerService idManager; private NotificationService notificationService; private TransportZoneListener tzChangeListener; private RpcProviderRegistry rpcProviderRegistry; @@ -57,10 +63,11 @@ public class ItmProvider implements BindingAwareProvider, AutoCloseable, IITMPro LOG.info("ItmProvider Session Initiated"); try { dataBroker = session.getSALService(DataBroker.class); + idManager = getRpcProviderRegistry().getRpcService(IdManagerService.class); itmManager = new ITMManager(dataBroker); - tzChangeListener = new TransportZoneListener(dataBroker) ; - itmRpcService = new ItmManagerRpcService(dataBroker); + tzChangeListener = new TransportZoneListener(dataBroker, idManager) ; + itmRpcService = new ItmManagerRpcService(dataBroker, idManager); final BindingAwareBroker.RpcRegistration rpcRegistration = getRpcProviderRegistry().addRpcImplementation(ItmRpcService.class, itmRpcService); itmRpcService.setMdsalManager(mdsalManager); itmManager.setMdsalManager(mdsalManager); @@ -68,6 +75,7 @@ public class ItmProvider implements BindingAwareProvider, AutoCloseable, IITMPro itmManager.setMdsalManager(mdsalManager); tzChangeListener.setItmManager(itmManager); tzChangeListener.registerListener(LogicalDatastoreType.CONFIGURATION, dataBroker); + createIdPool(); } catch (Exception e) { LOG.error("Error initializing services", e); } @@ -100,5 +108,19 @@ public class ItmProvider implements BindingAwareProvider, AutoCloseable, IITMPro LOG.info("ItmProvider Closed"); } - + private void createIdPool() { + CreateIdPoolInput createPool = new CreateIdPoolInputBuilder() + .setPoolName(ITMConstants.ITM_IDPOOL_NAME) + .setLow(ITMConstants.ITM_IDPOOL_START) + .setHigh(new BigInteger(ITMConstants.ITM_IDPOOL_SIZE).longValue()) + .build(); + try { + Future> result = idManager.createIdPool(createPool); + if ((result != null) && (result.get().isSuccessful())) { + LOG.debug("Created IdPool for ITM Service"); + } + } catch (InterruptedException | ExecutionException e) { + LOG.error("Failed to create idPool for ITM Service",e); + } + } } 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 f156715a..74d143c4 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 @@ -12,6 +12,8 @@ import java.net.InetAddress; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; import org.apache.commons.lang3.StringUtils; import org.apache.commons.net.util.SubnetUtils; @@ -23,6 +25,12 @@ import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceBuilder; 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.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; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.IdManagerService; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.ReleaseIdInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.ReleaseIdInputBuilder; 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; @@ -44,6 +52,7 @@ 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.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.Interfaces; +import org.opendaylight.yangtools.yang.common.RpcResult; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -58,6 +67,7 @@ public class ItmUtils { public static final String DUMMY_IP_ADDRESS = "0.0.0.0"; public static final String TUNNEL_TYPE_VXLAN = "VXLAN"; public static final String TUNNEL_TYPE_GRE = "GRE"; + public static final String TUNNEL = "TUNNEL"; private static final Logger LOG = LoggerFactory.getLogger(ItmUtils.class); @@ -117,8 +127,9 @@ public class ItmUtils { return dpnId; } - public static String getTrunkInterfaceName(String parentInterfaceName, String localHostName, String remoteHostName) { + public static String getTrunkInterfaceName(IdManagerService idManager, String parentInterfaceName, String localHostName, String remoteHostName) { String trunkInterfaceName = String.format("%s:%s:%s", parentInterfaceName, localHostName, remoteHostName); + trunkInterfaceName = String.format("%s:%s", TUNNEL, getUniqueId(idManager, trunkInterfaceName)); return trunkInterfaceName; } @@ -184,4 +195,36 @@ public class ItmUtils { LOG.debug( "No Dpn information in CONFIGURATION datastore " ); return dpnTEPs ; } + + public static int getUniqueId(IdManagerService idManager, String idKey) { + AllocateIdInput getIdInput = new AllocateIdInputBuilder() + .setPoolName(ITMConstants.ITM_IDPOOL_NAME) + .setIdKey(idKey).build(); + + try { + Future> result = idManager.allocateId(getIdInput); + RpcResult rpcResult = result.get(); + if(rpcResult.isSuccessful()) { + return rpcResult.getResult().getIdValue().intValue(); + } else { + LOG.warn("RPC Call to Get Unique Id returned with Errors {}", rpcResult.getErrors()); + } + } catch (InterruptedException | ExecutionException e) { + LOG.warn("Exception when getting Unique Id",e); + } + return 0; + } + + public static void releaseId(IdManagerService idManager, String idKey) { + ReleaseIdInput idInput = new ReleaseIdInputBuilder().setPoolName(ITMConstants.ITM_IDPOOL_NAME).setIdKey(idKey).build(); + try { + Future> result = idManager.releaseId(idInput); + RpcResult rpcResult = result.get(); + if(!rpcResult.isSuccessful()) { + LOG.warn("RPC Call to Get Unique Id returned with Errors {}", rpcResult.getErrors()); + } + } catch (InterruptedException | ExecutionException e) { + LOG.warn("Exception when getting Unique Id for key {}", idKey, e); + } + } } 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 3af1659a..e60d3ee0 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,6 +24,7 @@ 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.vpnservice.idmanager.rev150403.IdManagerService; 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; @@ -50,11 +51,13 @@ import org.slf4j.LoggerFactory; public class TransportZoneListener extends AsyncDataTreeChangeListenerBase implements AutoCloseable{ private static final Logger LOG = LoggerFactory.getLogger(TransportZoneListener.class); private DataBroker dataBroker; + private IdManagerService idManagerService; private ITMManager itmManager; - public TransportZoneListener(final DataBroker dataBroker) { + public TransportZoneListener(final DataBroker dataBroker, final IdManagerService idManagerService) { super(TransportZone.class, TransportZoneListener.class); this.dataBroker = dataBroker; + this.idManagerService = idManagerService; initializeTZNode(dataBroker); } @@ -103,7 +106,7 @@ public class TransportZoneListener extends AsyncDataTreeChangeListenerBase> getTunnelInterfaceName(GetTunnelInterfaceNameInput input) { RpcResultBuilder resultBld = null; @@ -125,7 +131,7 @@ public class ItmManagerRpcService implements ItmRpcService { BuildExternalTunnelFromDpnsInput input) { //Ignore the Futures for now final SettableFuture> result = SettableFuture.create(); - List> extTunnelResultList = ItmExternalTunnelAddWorker.buildTunnelsFromDpnToExternalEndPoint(dataBroker, input.getDpnId(), input.getDestinationIp(), input.getTunnelType()); + List> extTunnelResultList = ItmExternalTunnelAddWorker.buildTunnelsFromDpnToExternalEndPoint(dataBroker, idManagerService, input.getDpnId(), input.getDestinationIp(), input.getTunnelType()); for (ListenableFuture extTunnelResult : extTunnelResultList) { Futures.addCallback(extTunnelResult, new FutureCallback(){ -- 2.36.6