From: HemaTG Date: Tue, 26 Jan 2016 09:37:27 +0000 (+0530) Subject: Bug 5092 : Flow incorrectly installed for LLDP mon X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=vpnservice.git;a=commitdiff_plain;h=refs%2Fchanges%2F51%2F34451%2F1 Bug 5092 : Flow incorrectly installed for LLDP mon Description : PUNT to controller flows are installed for DPNs in ITM mesh Release the correct ID recv from ID mgr to form the trunkInterfaceName Change-Id: I0ee82b9c368933ee2867fb9430340d17a0ac830c Signed-off-by: HemaTG (cherry picked from commit a6cd344f93f5bfb06b20d49268a4ae312d222fb2) --- diff --git a/alivenessmonitor/alivenessmonitor-impl/src/main/java/org/opendaylight/vpnservice/alivenessmonitor/internal/AlivenessProtocolHandlerLLDP.java b/alivenessmonitor/alivenessmonitor-impl/src/main/java/org/opendaylight/vpnservice/alivenessmonitor/internal/AlivenessProtocolHandlerLLDP.java index 9ff6a5a1..c1c045a4 100644 --- a/alivenessmonitor/alivenessmonitor-impl/src/main/java/org/opendaylight/vpnservice/alivenessmonitor/internal/AlivenessProtocolHandlerLLDP.java +++ b/alivenessmonitor/alivenessmonitor-impl/src/main/java/org/opendaylight/vpnservice/alivenessmonitor/internal/AlivenessProtocolHandlerLLDP.java @@ -194,10 +194,10 @@ public class AlivenessProtocolHandlerLLDP extends AbstractAlivenessProtocolHandl } List actionInfos = new ArrayList(); - + // Set the LLDP service Id which is 0 if(Tunnel.class.equals(intfType)) { actionInfos.add(new ActionInfo(ActionType.set_field_tunnel_id, new BigInteger[] { - BigInteger.valueOf(0x08000000)})); + BigInteger.valueOf(0)})); } actionInfos.add(new ActionInfo(ActionType.output, new String[] { Long.toString(portNum) })); return actionInfos; diff --git a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/commons/AlivenessMonitorUtils.java b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/commons/AlivenessMonitorUtils.java index 27795c2c..abc3b2c8 100644 --- a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/commons/AlivenessMonitorUtils.java +++ b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/commons/AlivenessMonitorUtils.java @@ -66,7 +66,7 @@ public class AlivenessMonitorUtils { public static void startLLDPMonitoring(AlivenessMonitorService alivenessMonitorService, DataBroker dataBroker, Interface trunkInterface) { //LLDP monitoring for the trunk interface - /*String trunkInterfaceName = trunkInterface.getName(); + String trunkInterfaceName = trunkInterface.getName(); IfTunnel ifTunnel = trunkInterface.getAugmentation(IfTunnel.class); if(ifTunnel.getTunnelInterfaceType().isAssignableFrom(TunnelTypeVxlan.class)) { MonitorStartInput lldpMonitorInput = new MonitorStartInputBuilder().setConfig(new ConfigBuilder() @@ -90,12 +90,12 @@ public class AlivenessMonitorUtils { } catch (InterruptedException | ExecutionException e) { LOG.warn("Exception when starting monitoring", e); } - }*/ + } } public static void stopLLDPMonitoring(AlivenessMonitorService alivenessMonitorService, DataBroker dataBroker, Interface trunkInterface) { - /*IfTunnel ifTunnel = trunkInterface.getAugmentation(IfTunnel.class); + IfTunnel ifTunnel = trunkInterface.getAugmentation(IfTunnel.class); if(!ifTunnel.getTunnelInterfaceType().isAssignableFrom(TunnelTypeVxlan.class)){ return; } @@ -113,7 +113,7 @@ public class AlivenessMonitorUtils { removeMonitorIdFromInterfaceMonitorIdMap(dataBroker, interfaceName, monitorId); return; } - }*/ + } } public static String getInterfaceFromMonitorId(DataBroker broker, Long monitorId) { 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 eddaeb4f..1cb20a09 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 @@ -16,10 +16,5 @@ public class ITMConstants{ public static final String ITM_IDPOOL_NAME = "Itmservices"; public static final long ITM_IDPOOL_START = 1L; public static final String ITM_IDPOOL_SIZE = "100000"; - - public static final short INTERNAL_TUNNEL_TABLE = 22; - - - - public static final short TERMINATING_SERVICE_TABLE = 36; + public static int LLDP_SERVICE_ID = 0; } 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 81f6aaef..5cef68f2 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 @@ -53,8 +53,8 @@ public class ItmExternalTunnelDeleteWorker { ExternalTunnelList.class) .child(ExternalTunnel.class, new ExternalTunnelKey(extIp, teps.getDPNID())); t.delete(LogicalDatastoreType.CONFIGURATION, path); - // Release the Ids for the trunk interface - ItmUtils.releaseId(idManagerService, trunkInterfaceName); + // Release the Ids for the trunk interface Name + ItmUtils.releaseIdForTrunkInterfaceName(idManagerService,interfaceName,firstEndPt.getIpAddress().getIpv4Address().getValue(), extIp.getIpv4Address().getValue() ); } } futures.add(t.submit()) ; 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 bde34d01..c7c5ae72 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 @@ -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; @@ -54,7 +57,7 @@ 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<>(); @@ -66,7 +69,7 @@ public class ItmInternalTunnelAddWorker { 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() ; } @@ -87,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()) { @@ -96,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(); @@ -113,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 ; } @@ -123,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 )) @@ -164,5 +167,4 @@ public class ItmInternalTunnelAddWorker { t.merge(LogicalDatastoreType.CONFIGURATION,path, tnl, true) ; 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 096d81cf..7b4e06df 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 @@ -18,6 +18,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.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.itm.op.rev150701.DpnEndpoints; 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; @@ -34,7 +35,7 @@ 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, IdManagerService idManagerService, + public static List> deleteTunnels(DataBroker dataBroker, IdManagerService idManagerService,IMdsalApiManager mdsalManager, List dpnTepsList, List meshedDpnList) { List> futures = new ArrayList<>(); @@ -86,7 +87,7 @@ public class ItmInternalTunnelDeleteWorker { // remove dpn if no vteps exist on dpn if (dpnRead.getTunnelEndPoints() == null || dpnRead.getTunnelEndPoints().size() == 0) { logger.debug( "Removing Terminating Service Table Flow ") ; - // setUpOrRemoveTerminatingServiceTable(dpnRead.getDPNID(), false); + ItmUtils.setUpOrRemoveTerminatingServiceTable(dpnRead.getDPNID(), mdsalManager,false); logger.trace("DPN Removal from DPNTEPSINFO CONFIG DS " + dpnRead); t.delete(LogicalDatastoreType.CONFIGURATION, dpnPath); InstanceIdentifier tnlContainerPath = @@ -130,8 +131,10 @@ public class ItmInternalTunnelDeleteWorker { TunnelList.class) .child(InternalTunnel.class, new InternalTunnelKey( srcDpnId, dstDpnId)); t.delete(LogicalDatastoreType.CONFIGURATION,path) ; - // Release the Id for the forward trunk - ItmUtils.releaseId(idManagerService, trunkfwdIfName); + // Release the Ids for the forward trunk interface Name + ItmUtils.releaseIdForTrunkInterfaceName(idManagerService,srcTep.getInterfaceName(), srcTep.getIpAddress() + .getIpv4Address().getValue(), dstTep.getIpAddress().getIpv4Address() + .getValue() ); String trunkRevIfName = ItmUtils.getTrunkInterfaceName(idManagerService, dstTep.getInterfaceName(), dstTep.getIpAddress() @@ -148,7 +151,9 @@ public class ItmInternalTunnelDeleteWorker { .child(InternalTunnel.class, new InternalTunnelKey(dstDpnId, srcDpnId)); t.delete(LogicalDatastoreType.CONFIGURATION,path) ; - // Release the Id for the Reverse trunk - ItmUtils.releaseId(idManagerService, trunkRevIfName); + // Release the Ids for the reverse trunk interface Name + ItmUtils.releaseIdForTrunkInterfaceName(idManagerService, dstTep.getInterfaceName(), dstTep.getIpAddress() + .getIpv4Address().getValue(), srcTep.getIpAddress().getIpv4Address() + .getValue()); } } 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 92c17e06..40a5314e 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 @@ -16,6 +16,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.vpnservice.mdsalutil.interfaces.IMdsalApiManager; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.op.rev150701.dpn.endpoints.DPNTEPsInfo; import org.slf4j.LoggerFactory; import org.slf4j.Logger; @@ -26,11 +27,13 @@ public class ItmTepAddWorker implements Callable>> { private IdManagerService idManagerService; private List meshedDpnList; private List cfgdDpnList ; + private IMdsalApiManager mdsalManager; - public ItmTepAddWorker( List cfgdDpnList, DataBroker broker, IdManagerService idManagerService) { + public ItmTepAddWorker( List cfgdDpnList, DataBroker broker, IdManagerService idManagerService, IMdsalApiManager mdsalManager) { this.cfgdDpnList = cfgdDpnList ; this.dataBroker = broker ; this.idManagerService = idManagerService; + this.mdsalManager = mdsalManager; logger.trace("ItmTepAddWorker initialized with DpnList {}",cfgdDpnList ); } @@ -39,7 +42,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, idManagerService, cfgdDpnList, meshedDpnList) ) ; + futures.addAll( ItmInternalTunnelAddWorker.build_all_tunnels(dataBroker, idManagerService,mdsalManager, 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 6c4cb008..dfc6afdf 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 @@ -16,6 +16,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.vpnservice.mdsalutil.interfaces.IMdsalApiManager; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.op.rev150701.dpn.endpoints.DPNTEPsInfo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -26,11 +27,13 @@ public class ItmTepRemoveWorker implements Callable> private List delDpnList ; private List meshedDpnList ; private IdManagerService idManagerService; + private IMdsalApiManager mdsalManager; - public ItmTepRemoveWorker( List delDpnList, DataBroker broker, IdManagerService idManagerService) { + public ItmTepRemoveWorker( List delDpnList, DataBroker broker, IdManagerService idManagerService, IMdsalApiManager mdsalManager) { this.delDpnList = delDpnList ; this.dataBroker = broker ; this.idManagerService = idManagerService; + this.mdsalManager = mdsalManager; logger.trace("ItmTepRemoveWorker initialized with DpnList {}",delDpnList ); } @@ -38,7 +41,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, idManagerService, delDpnList, meshedDpnList)); + futures.addAll( ItmInternalTunnelDeleteWorker.deleteTunnels(dataBroker, idManagerService, mdsalManager, 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 1a4c0296..2c2126e9 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 @@ -73,6 +73,7 @@ public class ItmProvider implements BindingAwareProvider, AutoCloseable, IITMPro itmManager.setMdsalManager(mdsalManager); itmManager.setNotificationPublishService(notificationPublishService); itmManager.setMdsalManager(mdsalManager); + tzChangeListener.setMdsalManager(mdsalManager); tzChangeListener.setItmManager(itmManager); tzChangeListener.registerListener(LogicalDatastoreType.CONFIGURATION, dataBroker); createIdPool(); 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 0750ea47..f597e9f3 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 @@ -46,6 +46,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.op.rev150701 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.InternalTunnelBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.op.rev150701.tunnel.list.InternalTunnelKey; +import org.opendaylight.vpnservice.mdsalutil.interfaces.IMdsalApiManager; 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; @@ -62,6 +63,15 @@ import org.opendaylight.yangtools.yang.common.RpcResult; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.opendaylight.vpnservice.mdsalutil.ActionInfo; +import org.opendaylight.vpnservice.mdsalutil.ActionType; +import org.opendaylight.vpnservice.mdsalutil.FlowEntity; +import org.opendaylight.vpnservice.mdsalutil.InstructionInfo; +import org.opendaylight.vpnservice.mdsalutil.InstructionType; +import org.opendaylight.vpnservice.mdsalutil.MatchFieldType; +import org.opendaylight.vpnservice.mdsalutil.MatchInfo; +import org.opendaylight.vpnservice.mdsalutil.MetaDataUtil; +import org.opendaylight.vpnservice.mdsalutil.NwConstants; import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.common.net.InetAddresses; @@ -139,6 +149,12 @@ public class ItmUtils { return trunkInterfaceName; } + public static void releaseIdForTrunkInterfaceName(IdManagerService idManager, String parentInterfaceName, String localHostName, String remoteHostName) { + String trunkInterfaceName = String.format("%s:%s:%s", parentInterfaceName, localHostName, remoteHostName); + LOG.trace("Releasing Id for trunkInterface - {}", trunkInterfaceName ); + releaseId(idManager, trunkInterfaceName) ; + } + public static InetAddress getInetAddressFromIpAddress(IpAddress ip) { return InetAddresses.forString(ip.getIpv4Address().getValue()); } @@ -260,4 +276,44 @@ public class ItmUtils { } return cfgDpnList; } + + public static void setUpOrRemoveTerminatingServiceTable(BigInteger dpnId, IMdsalApiManager mdsalManager, boolean addFlag) { + String logmsg = ( addFlag == true) ? "Installing" : "Removing"; + LOG.trace( logmsg + " PUNT to Controller flow in DPN {} ", dpnId ); + long dpId; + List listActionInfo = new ArrayList(); + listActionInfo.add(new ActionInfo(ActionType.punt_to_controller, + new String[] {})); + + try { + List mkMatches = new ArrayList(); + + mkMatches.add(new MatchInfo(MatchFieldType.tunnel_id, new BigInteger[] { + BigInteger.valueOf(ITMConstants.LLDP_SERVICE_ID) })); + + List mkInstructions = new ArrayList(); + mkInstructions.add(new InstructionInfo(InstructionType.apply_actions, + listActionInfo)); + + FlowEntity terminatingServiceTableFlowEntity = MDSALUtil + .buildFlowEntity( + dpnId, + NwConstants.INTERNAL_TUNNEL_TABLE, + getFlowRef(NwConstants.INTERNAL_TUNNEL_TABLE, + ITMConstants.LLDP_SERVICE_ID), 5, String.format("%s:%d","ITM Flow Entry ",ITMConstants.LLDP_SERVICE_ID), + 0, 0, ITMConstants.COOKIE_ITM + .add(BigInteger.valueOf(ITMConstants.LLDP_SERVICE_ID)), + mkMatches, mkInstructions); + if(addFlag) + mdsalManager.installFlow(terminatingServiceTableFlowEntity); + else + mdsalManager.removeFlow(terminatingServiceTableFlowEntity); + } catch (Exception e) { + LOG.error("Error while setting up Table 36 for {}", dpnId, e); + } + } + + private static String getFlowRef(long termSvcTable, int svcId) { + return new StringBuffer().append(termSvcTable).append(svcId).toString(); + } } 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 e60d3ee0..f15bd19b 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 @@ -35,6 +35,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.rev150701.tr 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.mdsalutil.interfaces.IMdsalApiManager; import org.opendaylight.vpnservice.itm.impl.ITMManager; import org.opendaylight.vpnservice.itm.impl.ItmUtils; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; @@ -52,6 +53,7 @@ public class TransportZoneListener extends AsyncDataTreeChangeListenerBase path = InstanceIdentifier.create(TransportZones.class); @@ -106,7 +112,7 @@ public class TransportZoneListener extends AsyncDataTreeChangeListenerBase