From f30638fcc162d85f21f33cef401b4fb5da05caaf Mon Sep 17 00:00:00 2001 From: Manisha Malla Date: Thu, 10 Mar 2016 14:23:27 +0530 Subject: [PATCH] Extra route fixes Change-Id: I601c21ed50b3775efd1705992a2ee907b6b4ed5e Signed-off-by: Manisha Malla --- .../vpnservice/fibmanager/FibManager.java | 20 ++++++++++++------- .../vpnservice/fibmanager/FibUtil.java | 6 ++++++ .../vpnservice/VpnInterfaceManager.java | 19 +++++++++++++----- .../opendaylight/vpnservice/VpnManager.java | 2 +- 4 files changed, 34 insertions(+), 13 deletions(-) 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 47133680..128444c6 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 @@ -281,7 +281,7 @@ public class FibManager extends AbstractDataChangeListener implements //Is this fib route an extra route? If yes, get the nexthop which would be an adjacency in the vpn Extraroute extra_route = getVpnToExtraroute(rd, vrfEntry.getDestPrefix()); if (extra_route != null) { - localNextHopInfo = nextHopManager.getVpnNexthop(vpnId, extra_route.getNexthopIp()); + localNextHopInfo = nextHopManager.getVpnNexthop(vpnId, extra_route.getNexthopIp() + "/32"); localNextHopIP = extra_route.getNexthopIp() + "/32"; isExtraRoute = true; } @@ -444,13 +444,19 @@ public class FibManager extends AbstractDataChangeListener implements - vpn interface op DS */ Prefixes prefixInfo = getPrefixToInterface(vpnId, vrfEntry.getDestPrefix()); - boolean extra_route = false; + Extraroute extraRoute = null; if (prefixInfo == null) { - prefixInfo = getPrefixToInterface(vpnId, vrfEntry.getNextHopAddress() + "/32"); - extra_route = true; + extraRoute = getVpnToExtraroute(rd, vrfEntry.getDestPrefix()); + if(extraRoute != null) { + prefixInfo = getPrefixToInterface(vpnId, extraRoute.getNexthopIp() + "/32"); + //clean up the vpn to extra route entry in DS + FibUtil.delete(broker, LogicalDatastoreType.OPERATIONAL, FibUtil.getVpnToExtrarouteIdentifier(rd, vrfEntry.getDestPrefix())); + } } - if (prefixInfo == null) + if (prefixInfo == null) { + LOG.debug("Cleanup VPN Data Failed as unable to find prefix Info for " + vrfEntry.getDestPrefix()); return; //Don't have any info for this prefix (shouldn't happen); need to return + } String ifName = prefixInfo.getVpnInterfaceName(); Optional optAdjacencies = FibUtil.read(broker, LogicalDatastoreType.OPERATIONAL, FibUtil.getAdjListPath(ifName)); int numAdj = 0; @@ -728,8 +734,8 @@ public class FibManager extends AbstractDataChangeListener implements adjacency = nextHopManager.getRemoteNextHopPointer(localDpnId, remoteDpnId, vpnId, - vrfEntry.getDestPrefix(), - (staticRoute == true) ? extra_route.getNexthopIp() : vrfEntry.getNextHopAddress()); + (staticRoute == true) ? extra_route.getNexthopIp() + "/32" : vrfEntry.getDestPrefix(), + vrfEntry.getNextHopAddress()); } catch (NullPointerException e) { LOG.trace("", e); } diff --git a/fibmanager/fibmanager-impl/src/main/java/org/opendaylight/vpnservice/fibmanager/FibUtil.java b/fibmanager/fibmanager-impl/src/main/java/org/opendaylight/vpnservice/fibmanager/FibUtil.java index 273d6481..1c134440 100644 --- a/fibmanager/fibmanager-impl/src/main/java/org/opendaylight/vpnservice/fibmanager/FibUtil.java +++ b/fibmanager/fibmanager-impl/src/main/java/org/opendaylight/vpnservice/fibmanager/FibUtil.java @@ -94,6 +94,12 @@ public class FibUtil { .child(org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.vpn.instance.op.data.vpn.instance.op.data.entry.VpnToDpnList.class, new org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.vpn.instance.op.data.vpn.instance.op.data.entry.VpnToDpnListKey(dpnId)).build(); } + static InstanceIdentifier getVpnToExtrarouteIdentifier(String vrfId, String ipPrefix) { + return InstanceIdentifier.builder(org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.VpnToExtraroute.class) + .child(org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.vpn.to.extraroute.Vpn.class, new org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.vpn.to.extraroute.VpnKey(vrfId)).child(org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.vpn.to.extraroute.vpn.Extraroute.class, + new org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.vpn.to.extraroute.vpn.ExtrarouteKey(ipPrefix)).build(); + } + static final FutureCallback DEFAULT_CALLBACK = new FutureCallback() { public void onSuccess(Void result) { 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 2443cb8a..b33fea8d 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 @@ -287,6 +287,15 @@ public class VpnInterfaceManager extends AbstractDataChangeListener No more adjacencies from it. diff --git a/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnManager.java b/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnManager.java index 1a454018..7c9a4039 100644 --- a/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnManager.java +++ b/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnManager.java @@ -114,7 +114,7 @@ public class VpnManager extends AbstractDataChangeListener implemen } private void waitForOpDataRemoval(String id) { - //wait till DCN for removal of all DPNs in VPN arrivaes + //wait till DCN for update on VPN Instance Op Data signals that vpn interfaces linked to this vpn instance is zero Runnable notifyTask = new VpnNotifyTask(); synchronized (id.intern()) { vpnOpMap.put(id, notifyTask); -- 2.36.6