From: Abhinav Gupta Date: Wed, 13 May 2015 14:27:10 +0000 (+0530) Subject: Changes to NextHopManager X-Git-Tag: release/lithium~27 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=vpnservice.git;a=commitdiff_plain;h=f712d08c9d4d33d7c3f8373a5796d617c523f2b8 Changes to NextHopManager 1. Added removelocalnexthop/removeremotenexthop code 2. Added rpc for removelocalnexthop 3. Pop MPLS action added in createlocalnexthop Change-Id: I02bed960c01d25c96a4a19c2ae6cbb01201451c7 Signed-off-by: Abhinav Gupta --- diff --git a/nexthopmgr/nexthopmgr-api/src/main/yang/l3nexthop.yang b/nexthopmgr/nexthopmgr-api/src/main/yang/l3nexthop.yang index 8fdc6902..3090e702 100644 --- a/nexthopmgr/nexthopmgr-api/src/main/yang/l3nexthop.yang +++ b/nexthopmgr/nexthopmgr-api/src/main/yang/l3nexthop.yang @@ -43,4 +43,14 @@ module l3nexthop { leaf localDestination {type boolean;} } } + + rpc removeLocalNextHop { + description "remove a local next hop"; + input { + leaf dpnId {type uint32;} + leaf vpnId { type uint32;} /* optional */ + leaf ipPrefix {type string;} + leaf nexthopIp {type string;} + } + } } \ No newline at end of file diff --git a/nexthopmgr/nexthopmgr-impl/src/main/java/org/opendaylight/vpnservice/nexthopmgr/NexthopManager.java b/nexthopmgr/nexthopmgr-impl/src/main/java/org/opendaylight/vpnservice/nexthopmgr/NexthopManager.java index ab5b2772..a8f411c7 100644 --- a/nexthopmgr/nexthopmgr-impl/src/main/java/org/opendaylight/vpnservice/nexthopmgr/NexthopManager.java +++ b/nexthopmgr/nexthopmgr-impl/src/main/java/org/opendaylight/vpnservice/nexthopmgr/NexthopManager.java @@ -166,6 +166,7 @@ public class NexthopManager implements L3nexthopService, AutoCloseable { // MAC re-write if (macAddress != null) { listActionInfo.add(0, new ActionInfo(ActionType.set_field_eth_dest, new String[]{macAddress})); + listActionInfo.add(new ActionInfo(ActionType.pop_mpls, new String[]{})); } else { //FIXME: Log message here. } @@ -336,17 +337,16 @@ public class NexthopManager implements L3nexthopService, AutoCloseable { } - public void removeLocalNextHop(String vpnName, String ipAddress) { - - long vpnId = getVpnId(vpnName); + public void removeLocalNextHop(Long dpId, Long vpnId, String ipAddress) { VpnNexthop nh = getVpnNexthop(vpnId, ipAddress); if (nh != null) { // how to inform and remove dependent FIB entries?? // we need to do it before the group is removed - + GroupEntity groupEntity = MDSALUtil.buildGroupEntity( + dpId, nh.getEgressPointer(), ipAddress, GroupTypes.GroupIndirect, null); // remove Group ... - + mdsalManager.removeGroup(groupEntity); //update MD-SAL DS removeVpnNexthopFromDS(vpnId, ipAddress); } else { @@ -363,6 +363,10 @@ public class NexthopManager implements L3nexthopService, AutoCloseable { // we need to do it before the group is removed // remove Group ... + GroupEntity groupEntity = MDSALUtil.buildGroupEntity( + dpnId, nh.getEgressPointer(), ipAddress, GroupTypes.GroupIndirect, null); + // remove Group ... + mdsalManager.removeGroup(groupEntity); //update MD-SAL DS removeTunnelNexthopFromDS(dpnId, ipAddress); } else { @@ -424,4 +428,20 @@ public class NexthopManager implements L3nexthopService, AutoCloseable { Futures.addCallback(tx.submit(), DEFAULT_CALLBACK); } + @Override + public Future> removeLocalNextHop(RemoveLocalNextHopInput input) { + VpnNexthop vpnNextHop = getVpnNexthop(input.getVpnId(), input.getIpPrefix()); + RpcResultBuilder rpcResultBuilder; + LOG.debug("vpnnexthop is: {}", vpnNextHop); + try { + removeLocalNextHop(input.getDpnId(),input.getVpnId(), input.getIpPrefix()); + rpcResultBuilder = RpcResultBuilder.success(); + } + catch(Exception e){ + LOG.error("Removal of local next hop for vpnNextHop {} failed {}" ,vpnNextHop, e); + rpcResultBuilder = RpcResultBuilder.failed(); + } + return Futures.immediateFuture(rpcResultBuilder.build()); + } + } diff --git a/nexthopmgr/nexthopmgr-impl/src/main/java/org/opendaylight/vpnservice/nexthopmgr/VpnInterfaceChangeListener.java b/nexthopmgr/nexthopmgr-impl/src/main/java/org/opendaylight/vpnservice/nexthopmgr/VpnInterfaceChangeListener.java index 1245a12a..08ccadcf 100644 --- a/nexthopmgr/nexthopmgr-impl/src/main/java/org/opendaylight/vpnservice/nexthopmgr/VpnInterfaceChangeListener.java +++ b/nexthopmgr/nexthopmgr-impl/src/main/java/org/opendaylight/vpnservice/nexthopmgr/VpnInterfaceChangeListener.java @@ -87,15 +87,7 @@ public class VpnInterfaceChangeListener extends AbstractDataChangeListener identifier, Adjacencies adjs) { - InstanceIdentifier vpnIfId = identifier.firstIdentifierOf(VpnInterface.class); - Optional vpnIf = read(LogicalDatastoreType.CONFIGURATION, vpnIfId); - VpnInterface vpnIfData = vpnIf.get(); - - List adjList = adjs.getAdjacency(); - for (Adjacency adjacency : adjList) { - nexthopManager.removeLocalNextHop(vpnIfData.getVpnInstanceName(), adjacency.getIpAddress()); - } - + // nexthop group will be removed after fib entry deletion } @Override