From 78638a6543c647ffff30d36e52604f5b7b5e785b Mon Sep 17 00:00:00 2001 From: Sasidharan Sambasivam Date: Thu, 14 May 2015 16:38:08 +0530 Subject: [PATCH] support to get fib service in vpn manager Change-Id: I4198abf8edee93999a073e0364cdffa840662dba Signed-off-by: Sasidharan Sambasivam --- .../fibmanager/FibManagerProvider.java | 1 + vpnmanager/vpnmanager-api/pom.xml | 5 +++ .../vpnmanager/api/IVpnManager.java | 3 ++ .../opendaylight/vpnservice/VpnConstants.java | 1 + .../vpnservice/VpnInterfaceManager.java | 44 ++++++++++++------- .../vpnservice/VpnserviceProvider.java | 13 ++++++ 6 files changed, 52 insertions(+), 15 deletions(-) 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 bb16187c..15ea7db3 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 @@ -55,6 +55,7 @@ public class FibManagerProvider implements BindingAwareProvider, IFibManager, Au public void setVpnmanager(IVpnManager vpnmanager) { this.vpnmanager = vpnmanager; + vpnmanager.setFibService(this); } @Override diff --git a/vpnmanager/vpnmanager-api/pom.xml b/vpnmanager/vpnmanager-api/pom.xml index 1f9f1584..89679c13 100644 --- a/vpnmanager/vpnmanager-api/pom.xml +++ b/vpnmanager/vpnmanager-api/pom.xml @@ -61,6 +61,11 @@ and is available at http://www.eclipse.org/legal/epl-v10.html model-bgp ${model.bgp.version} + + org.opendaylight.vpnservice + fibmanager-api + ${vpnservices.version} + org.opendaylight.controller config-api diff --git a/vpnmanager/vpnmanager-api/src/main/java/org/opendaylight/vpnmanager/api/IVpnManager.java b/vpnmanager/vpnmanager-api/src/main/java/org/opendaylight/vpnmanager/api/IVpnManager.java index 3748ec13..56e7c7e4 100644 --- a/vpnmanager/vpnmanager-api/src/main/java/org/opendaylight/vpnmanager/api/IVpnManager.java +++ b/vpnmanager/vpnmanager-api/src/main/java/org/opendaylight/vpnmanager/api/IVpnManager.java @@ -2,6 +2,9 @@ package org.opendaylight.vpnmanager.api; import java.util.Collection; +import org.opendaylight.fibmanager.api.IFibManager; + public interface IVpnManager { Collection getDpnsForVpn(long vpnId); + void setFibService(IFibManager fibManager); } diff --git a/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnConstants.java b/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnConstants.java index 69c190ff..beb17f35 100644 --- a/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnConstants.java +++ b/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnConstants.java @@ -7,4 +7,5 @@ public class VpnConstants { public static final short LPORT_INGRESS_TABLE = 0; public static final short FIB_TABLE = 21; public static final short DEFAULT_FLOW_PRIORITY = 10; + public static final long INVALID_ID = -1; } 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 4dce70d2..fa81708e 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 @@ -26,6 +26,7 @@ import com.google.common.util.concurrent.FutureCallback; import org.opendaylight.bgpmanager.api.IBgpManager; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.DataChangeListener; +import org.opendaylight.fibmanager.api.IFibManager; import org.opendaylight.vpnservice.interfacemgr.interfaces.IInterfaceManager; import org.opendaylight.vpnservice.mdsalutil.FlowEntity; import org.opendaylight.vpnservice.mdsalutil.InstructionInfo; @@ -73,6 +74,7 @@ public class VpnInterfaceManager extends AbstractDataChangeListener listenerRegistration; private final DataBroker broker; private final IBgpManager bgpManager; + private IFibManager fibManager; private IMdsalApiManager mdsalManager; private IInterfaceManager interfaceManager; private IdManagerService idManager; @@ -113,6 +115,10 @@ public class VpnInterfaceManager extends AbstractDataChangeListener port = read(LogicalDatastoreType.CONFIGURATION, id); if (port.isPresent()) { Interface interf = port.get(); - bindServiceOnInterface(interf, getVpnId(vpnInterface.getVpnInstanceName())); + bindServiceOnInterface(interf, vpnInterface.getVpnInstanceName()); updateNextHops(identifier, vpnInterface); } } @@ -222,8 +228,8 @@ public class VpnInterfaceManager extends AbstractDataChangeListener id = InstanceIdentifier.builder(VpnInstances.class) .child(VpnInstance.class, new VpnInstanceKey(vpnName)).augmentation(VpnInstance1.class).build(); Optional vpnInstance = read(LogicalDatastoreType.OPERATIONAL, id); - //TODO: Default vpnid should be a constant. - long vpnId = -1; + + long vpnId = VpnConstants.INVALID_ID; if(vpnInstance.isPresent()) { vpnId = vpnInstance.get().getVpnId(); } @@ -243,14 +249,14 @@ public class VpnInterfaceManager extends AbstractDataChangeListener dpnIds = vpnToDpnsDb.get(vpnId); if(dpnIds == null) { dpnIds = new HashSet<>(); } if(dpnIds.add(dpnId)) { vpnToDpnsDb.put(vpnId, dpnIds); - //TODO: Send an Event that new DPN added... + fibManager.populateFibOnNewDpn(dpnId, vpnId, rd); } Collection intfNames = dpnToInterfaceDb.get(dpnId); @@ -261,13 +267,14 @@ public class VpnInterfaceManager extends AbstractDataChangeListener intfNames = dpnToInterfaceDb.get(dpnId); if(intfNames == null) { return; } intfNames.remove(inftName); dpnToInterfaceDb.put(dpnId, intfNames); + //TODO: Delay 'DPN' removal so that other services can cleanup the entries for this dpn if(intfNames.isEmpty()) { Collection dpnIds = vpnToDpnsDb.get(vpnId); if(dpnIds == null) { @@ -275,18 +282,21 @@ public class VpnInterfaceManager extends AbstractDataChangeListener interfaceId = VpnUtil.getVpnInterfaceIdentifier(interfaceName); + delete(LogicalDatastoreType.OPERATIONAL, identifier); } else { LOG.warn("No nexthops were available to handle remove event {}", interfaceName); } @@ -380,8 +392,8 @@ public class VpnInterfaceManager extends AbstractDataChangeListener interfaceId = VpnUtil.getVpnInterfaceIdentifier(intfName); - delete(LogicalDatastoreType.OPERATIONAL, interfaceId); +// InstanceIdentifier interfaceId = VpnUtil.getVpnInterfaceIdentifier(intfName); +// delete(LogicalDatastoreType.OPERATIONAL, interfaceId); } private void delete(LogicalDatastoreType datastoreType, InstanceIdentifier path) { @@ -390,15 +402,17 @@ public class VpnInterfaceManager extends AbstractDataChangeListener getDpnsForVpn(long vpnId) { return vpnInterfaceManager.getDpnsForVpn(vpnId); } + + @Override + public void setFibService(IFibManager fibManager) { + LOG.debug("Fib service reference is initialized in VPN Manager"); + this.fibManager = fibManager; + vpnInterfaceManager.setFibManager(fibManager); + } } -- 2.36.6