X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=itm%2Fitm-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fvpnservice%2Fitm%2Fconfighelpers%2FItmInternalTunnelAddWorker.java;h=9f2196434d279b5a08c28aeb9bc94c8ec5f081b1;hb=ad664a0c796d1b29f0f337a4ce0a26ce9b3c2238;hp=faa2c6bf1efac0c6e6dc3b8d4ced67e0551d9957;hpb=15e44d5b9ad65ece6e59c00fc272ae499c4f7d8c;p=vpnservice.git 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 faa2c6bf..9f219643 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 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 Ericsson India Global Services Pvt Ltd. and others. All rights reserved. + * Copyright (c) 2015, 2016 Ericsson India Global Services Pvt Ltd. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, @@ -15,12 +15,15 @@ import java.util.concurrent.Callable; import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.ListenableFuture; +import org.opendaylight.vpnservice.mdsalutil.MDSALUtil; +import org.opendaylight.vpnservice.itm.globals.ITMConstants; import org.opendaylight.vpnservice.itm.impl.ItmUtils; 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.vpnservice.mdsalutil.interfaces.IMdsalApiManager; 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; @@ -33,9 +36,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.op.rev150701 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.yang.gen.v1.urn.opendaylight.vpnservice.itm.op.rev150701.tunnel.list.InternalTunnel; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.op.rev150701.tunnel.list.InternalTunnelKey; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; import org.slf4j.Logger; @@ -55,19 +57,19 @@ public class ItmInternalTunnelAddWorker { }; - public static List> build_all_tunnels(DataBroker dataBroker, IdManagerService idManagerService, + public static List> build_all_tunnels(DataBroker dataBroker, IdManagerService idManagerService,IMdsalApiManager mdsalManager, List cfgdDpnList, List meshedDpnList) { logger.trace( "Building tunnels with DPN List {} " , cfgdDpnList ); List> futures = new ArrayList<>(); WriteTransaction t = dataBroker.newWriteOnlyTransaction(); if( null == cfgdDpnList || cfgdDpnList.isEmpty()) { logger.error(" Build Tunnels was invoked with empty list"); - return null; + return futures; } for( DPNTEPsInfo dpn : cfgdDpnList) { //#####if dpn is not in meshedDpnList - build_tunnel_from(dpn, meshedDpnList, dataBroker, idManagerService, t, futures); + build_tunnel_from(dpn, meshedDpnList, dataBroker, idManagerService, mdsalManager, t, futures); if(null == meshedDpnList) { meshedDpnList = new ArrayList() ; } @@ -88,7 +90,7 @@ public class ItmInternalTunnelAddWorker { t.merge(LogicalDatastoreType.CONFIGURATION, dep, tnlBuilder, true); } - private static void build_tunnel_from( DPNTEPsInfo srcDpn,List meshedDpnList, DataBroker dataBroker, IdManagerService idManagerService, WriteTransaction t, List> futures) { + private static void build_tunnel_from( DPNTEPsInfo srcDpn,List meshedDpnList, DataBroker dataBroker, IdManagerService idManagerService, IMdsalApiManager mdsalManager, WriteTransaction t, List> futures) { logger.trace( "Building tunnels from DPN {} " , srcDpn ); if( null == meshedDpnList || 0 == meshedDpnList.size()) { @@ -97,13 +99,13 @@ public class ItmInternalTunnelAddWorker { } for( DPNTEPsInfo dstDpn: meshedDpnList) { if ( ! srcDpn.equals(dstDpn) ) - wireUpWithinTransportZone(srcDpn, dstDpn, dataBroker, idManagerService, t, futures) ; + wireUpWithinTransportZone(srcDpn, dstDpn, dataBroker, idManagerService, mdsalManager, t, futures) ; } } private static void wireUpWithinTransportZone( DPNTEPsInfo srcDpn, DPNTEPsInfo dstDpn, DataBroker dataBroker, - IdManagerService idManagerService, WriteTransaction t, List> futures) { + IdManagerService idManagerService, IMdsalApiManager mdsalManager,WriteTransaction t, List> futures) { logger.trace( "Wiring up within Transport Zone for Dpns {}, {} " , srcDpn, dstDpn ); List srcEndPts = srcDpn.getTunnelEndPoints(); List dstEndPts = dstDpn.getTunnelEndPoints(); @@ -114,7 +116,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, idManagerService, t, futures ); + wireUpBidirectionalTunnel( srcte, dstte, srcDpn.getDPNID(), dstDpn.getDPNID(), dataBroker, idManagerService, mdsalManager, t, futures ); // CHECK THIS -- Assumption -- One end point per Dpn per transport zone break ; } @@ -124,10 +126,10 @@ public class ItmInternalTunnelAddWorker { } private static void wireUpBidirectionalTunnel( TunnelEndPoints srcte, TunnelEndPoints dstte, BigInteger srcDpnId, BigInteger dstDpnId, - DataBroker dataBroker, IdManagerService idManagerService, WriteTransaction t, List> futures) { + DataBroker dataBroker, IdManagerService idManagerService, IMdsalApiManager mdsalManager, WriteTransaction t, List> futures) { // Setup the flow for LLDP monitoring -- PUNT TO CONTROLLER - // setUpOrRemoveTerminatingServiceTable(srcDpnId, true); - // setUpOrRemoveTerminatingServiceTable(dstDpnId, true); + ItmUtils.setUpOrRemoveTerminatingServiceTable(srcDpnId, mdsalManager, true); + ItmUtils.setUpOrRemoveTerminatingServiceTable(dstDpnId, mdsalManager, true); // Create the forward direction tunnel if(!wireUp( srcte, dstte, srcDpnId, dstDpnId, dataBroker, idManagerService, t, futures )) @@ -145,27 +147,34 @@ public class ItmInternalTunnelAddWorker { 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(); + String tunTypeStr = srcte.getTunnelType().getName(); // Form the trunk Interface Name - String trunkInterfaceName = ItmUtils.getTrunkInterfaceName(idManagerService, interfaceName,srcte.getIpAddress().getIpv4Address().getValue(), dstte.getIpAddress().getIpv4Address().getValue()) ; - IpAddress gwyIpAddress = ( srcte.getSubnetMask().equals(dstte.getSubnetMask()) ) ? null : srcte.getGwIpAddress() ; + String trunkInterfaceName = ItmUtils.getTrunkInterfaceName( idManagerService, interfaceName, + srcte.getIpAddress().getIpv4Address().getValue(), + dstte.getIpAddress().getIpv4Address().getValue(), + tunTypeStr) ; + IpAddress gatewayIpObj = new IpAddress("0.0.0.0".toCharArray()); + IpAddress gwyIpAddress = ( srcte.getSubnetMask().equals(dstte.getSubnetMask()) ) ? gatewayIpObj : 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) ; + Boolean monitorEnabled = ItmUtils.readMonitoringStateFromDS(dataBroker); + Integer monitorInterval = ItmUtils.readMonitorIntervalfromDS(dataBroker); + if(monitorInterval == null) + monitorInterval = ITMConstants.DEFAULT_MONITOR_INTERVAL; + Interface iface = ItmUtils.buildTunnelInterface(srcDpnId, trunkInterfaceName, String.format( "%s %s",ItmUtils.convertTunnelTypetoString(srcte.getTunnelType()), "Trunk Interface"), true, tunType, srcte.getIpAddress(), dstte.getIpAddress(), gwyIpAddress, srcte.getVLANID(), true, monitorEnabled, monitorInterval*1000); logger.debug( " Trunk Interface builder - {} ", iface ) ; InstanceIdentifier trunkIdentifier = ItmUtils.buildId(trunkInterfaceName); logger.debug( " Trunk Interface Identifier - {} ", trunkIdentifier ) ; logger.trace( " Writing Trunk Interface to Config DS {}, {} ", trunkIdentifier, iface ) ; t.merge(LogicalDatastoreType.CONFIGURATION, trunkIdentifier, iface, true); + ItmUtils.itmCache.addInterface(iface); // also update itm-state ds? - InstanceIdentifier path = InstanceIdentifier.create( + 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); + .child(InternalTunnel.class, new InternalTunnelKey( dstDpnId, srcDpnId, tunType)); + InternalTunnel tnl = ItmUtils.buildInternalTunnel(srcDpnId, dstDpnId, tunType, trunkInterfaceName); + //ItmUtils.asyncUpdate(LogicalDatastoreType.CONFIGURATION, path, tnl, dataBroker, DEFAULT_CALLBACK); + t.merge(LogicalDatastoreType.CONFIGURATION,path, tnl, true) ; + ItmUtils.itmCache.addInternalTunnel(tnl); return true; } - }