Fixes 71/32571/1
authorDeepthi V V <deepthi.v.v@ericsson.com>
Thu, 14 Jan 2016 11:27:00 +0000 (16:57 +0530)
committerDeepthi V V <deepthi.v.v@ericsson.com>
Thu, 14 Jan 2016 12:19:03 +0000 (17:49 +0530)
-remove terminating service table entry should have match with tunnel id =
label
-unbind service to interface only on config delete

Change-Id: Id51a3ffc80c42f9019c5ad1d0f12609877d4bdcf
Signed-off-by: Deepthi V V <deepthi.v.v@ericsson.com>
fibmanager/fibmanager-impl/src/main/java/org/opendaylight/vpnservice/fibmanager/FibManager.java
fibmanager/fibmanager-impl/src/main/java/org/opendaylight/vpnservice/fibmanager/NexthopManager.java
vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/InterfaceStateChangeListener.java
vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnInterfaceManager.java

index 7adde2c47d7fb3d6dae78c6b9ba79bd96f774747..0135f1d10b2f3e7231add2b840497a7de0205b67 100644 (file)
@@ -283,9 +283,7 @@ public class FibManager extends AbstractDataChangeListener<VrfEntry> implements
     LOG.info("remove terminatingServiceActions called with DpnId = {} and label = {}", dpId , label);
     List<MatchInfo> mkMatches = new ArrayList<MatchInfo>();
     // Matching metadata
-    mkMatches.add(new MatchInfo(MatchFieldType.tunnel_id, new BigInteger[] {
-        MetaDataUtil.getTunnelIdWithValidVniBitAndVniSet((int)label),
-        MetaDataUtil.METADA_MASK_TUNNEL_ID }));
+    mkMatches.add(new MatchInfo(MatchFieldType.tunnel_id, new BigInteger[] {BigInteger.valueOf(label)}));
     flowEntity = MDSALUtil.buildFlowEntity(dpId,
                                            NwConstants.INTERNAL_TUNNEL_TABLE,
                                            getFlowRef(dpId, NwConstants.INTERNAL_TUNNEL_TABLE, (int)label),
@@ -641,7 +639,6 @@ public class FibManager extends AbstractDataChangeListener<VrfEntry> implements
     public void processNodeAdd(BigInteger dpnId) {
         LOG.debug("Received notification to install TableMiss entries for dpn {} ", dpnId);
         makeTableMissFlow(dpnId, NwConstants.ADD_FLOW);
-        makeProtocolTableFlow(dpnId, NwConstants.ADD_FLOW);
         makeL3IntfTblMissFlow(dpnId, NwConstants.ADD_FLOW);
     }
 
index 7866cd2437ed20d4a9e20958065fb3463792fa4a..83c6feb93a176d51d3c757b9496ab8ea9632e893 100644 (file)
@@ -36,6 +36,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.adjacency.l
 import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.adjacency.list.AdjacencyKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.rpcs.rev151217.GetExternalTunnelInterfaceNameInputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.rpcs.rev151217.GetExternalTunnelInterfaceNameOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.rpcs.rev151217.GetInternalOrExternalInterfaceNameInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.rpcs.rev151217.GetInternalOrExternalInterfaceNameOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.rpcs.rev151217.GetTunnelInterfaceNameInputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.rpcs.rev151217.GetTunnelInterfaceNameOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.rpcs.rev151217.ItmRpcService;
@@ -235,19 +237,19 @@ public class NexthopManager implements AutoCloseable {
         return null;
     }
 
-    protected String getExternalTunnelInterfaceName(BigInteger srcDpId, IpAddress dstIp) {
+    protected String getTunnelInterfaceName(BigInteger srcDpId, IpAddress dstIp) {
         try {
-            Future<RpcResult<GetExternalTunnelInterfaceNameOutput>> result = itmManager.getExternalTunnelInterfaceName(new GetExternalTunnelInterfaceNameInputBuilder()
+            Future<RpcResult<GetInternalOrExternalInterfaceNameOutput>> result = itmManager.getInternalOrExternalInterfaceName(new GetInternalOrExternalInterfaceNameInputBuilder()
                                                                                  .setSourceDpid(srcDpId)
                                                                                  .setDestinationIp(dstIp).build());
-            RpcResult<GetExternalTunnelInterfaceNameOutput> rpcResult = result.get();
+            RpcResult<GetInternalOrExternalInterfaceNameOutput> rpcResult = result.get();
             if(!rpcResult.isSuccessful()) {
-                LOG.warn("RPC Call to getExternalTunnelInterfaceId returned with Errors {}", rpcResult.getErrors());
+                LOG.warn("RPC Call to getTunnelInterfaceName returned with Errors {}", rpcResult.getErrors());
             } else {
                 return rpcResult.getResult().getInterfaceName();
             }
         } catch (InterruptedException | ExecutionException e) {
-            LOG.warn("Exception when getting external tunnel interface Id for tunnel between {} and  {}", srcDpId, dstIp, e);
+            LOG.warn("Exception when getting tunnel interface Id for tunnel between {} and  {}", srcDpId, dstIp, e);
         }
         
         return null;
@@ -359,28 +361,10 @@ public class NexthopManager implements AutoCloseable {
         LOG.trace("getRemoteNextHopPointer: input [localDpnId {} remoteDpnId {}, vpnId {}, prefixIp {}, nextHopIp {} ]",
                   localDpnId, remoteDpnId, vpnId, prefixIp, nextHopIp);
 
-        // check if the incoming VM is within the same DC. If so, retrieve the local tunnel group pointer.
-        // Else retrieve the tunnel to DC gateway group pointer.
-
-        if (localDpnId == null  || BigInteger.ZERO.equals(localDpnId)) {
-            VpnNexthop vpnNexthop = getVpnNexthop(vpnId, prefixIp);
-            //If the vrf entry is a static/extra route, the nexthop of the entry would be a adjacency in the vpn
-            if(vpnNexthop == null) {
-                vpnNexthop = getVpnNexthop(vpnId, nextHopIp + "/32");
-            }
-            localDpnId = (vpnNexthop == null) ? null : vpnNexthop.getDpnId();
-        }
         LOG.trace("getRemoteNextHopPointer: Calling ITM with localDpnId {} ", localDpnId);
         try{
             // here use the config for tunnel type param
-            if(localDpnId != null){
-                //internal tunnel
-                tunnelIfName =  getTunnelInterfaceName(remoteDpnId, localDpnId);
-            } else {
-                //external tunnel
-                tunnelIfName = getExternalTunnelInterfaceName(remoteDpnId,
-                                                                   IpAddressBuilder.getDefaultInstance(nextHopIp));
-            }
+            tunnelIfName = getTunnelInterfaceName(remoteDpnId, IpAddressBuilder.getDefaultInstance(nextHopIp));
         }catch(Exception ex){
             LOG.error("Error while retrieving nexthop pointer for DC Gateway : ", ex.getMessage());
         }
index 12dd1893657b29159a428c19e8c6daec92624fea..599f70380f12b18ab36c76ea206378bed0b5ed61 100644 (file)
@@ -116,7 +116,7 @@ public class InterfaceStateChangeListener extends AbstractDataChangeListener<Int
           }
         } else {
           if (VpnUtil.isVpnInterfaceConfigured(broker, interfaceName)) {
-            vpnInterfaceManager.processVpnInterfaceDown(interfaceName, intrf.getIfIndex());
+            vpnInterfaceManager.processVpnInterfaceDown(interfaceName, intrf.getIfIndex(), true);
           }
         }
       } catch (Exception e) {
index c37666a919aa10b4dfd458ba030bda4fd4b28229..525d30bd0cd1d3e970c139ffbefa99062218e71d 100644 (file)
@@ -423,13 +423,13 @@ public class VpnInterfaceManager extends AbstractDataChangeListener<VpnInterface
             InterfaceUtils.getInterfaceStateFromOperDS(broker, interfaceName);
 
         if (existingVpnInterface.isPresent() && interfaceState != null) {
-            processVpnInterfaceDown(interfaceName, interfaceState.getIfIndex());
+            processVpnInterfaceDown(interfaceName, interfaceState.getIfIndex(), false);
         } else {
             LOG.warn("VPN interface {} was unavailable in operational data store to handle remove event", interfaceName);
         }
     }
 
-    protected synchronized void processVpnInterfaceDown(String interfaceName, int lPortTag) {
+    protected synchronized void processVpnInterfaceDown(String interfaceName, int lPortTag, boolean isInterfaceStateDown) {
         VpnInterface vpnInterface = VpnUtil.getOperationalVpnInterface(broker, interfaceName);
         if(vpnInterface == null) {
             LOG.info("Unable to process delete/down for interface {} as it is not available in operational data store", interfaceName);
@@ -440,7 +440,7 @@ public class VpnInterfaceManager extends AbstractDataChangeListener<VpnInterface
 
         removeAdjacenciesFromVpn(identifier, vpnInterface);
         LOG.info("Unbinding vpn service from interface {} ", interfaceName);
-        unbindService(vpnName, interfaceName, lPortTag);
+        unbindService(vpnName, interfaceName, lPortTag, isInterfaceStateDown);
         updateDpnDbs(vpnName, interfaceName, false);
         VpnUtil.delete(broker, LogicalDatastoreType.OPERATIONAL, identifier, VpnUtil.DEFAULT_CALLBACK);
     }
@@ -477,10 +477,13 @@ public class VpnInterfaceManager extends AbstractDataChangeListener<VpnInterface
     }
 
 
-    private void unbindService(String vpnInstanceName, String vpnInterfaceName, int lPortTag) {
-        VpnUtil.delete(broker, LogicalDatastoreType.CONFIGURATION,
-                       InterfaceUtils.buildServiceId(vpnInterfaceName,VpnConstants.L3VPN_SERVICE_IDENTIFIER),
-                       VpnUtil.DEFAULT_CALLBACK);
+    private void unbindService(String vpnInstanceName, String vpnInterfaceName, int lPortTag, boolean isInterfaceStateDown) {
+        if (!isInterfaceStateDown) {
+            VpnUtil.delete(broker, LogicalDatastoreType.CONFIGURATION,
+                           InterfaceUtils.buildServiceId(vpnInterfaceName,
+                                                         VpnConstants.L3VPN_SERVICE_IDENTIFIER),
+                           VpnUtil.DEFAULT_CALLBACK);
+        }
         long vpnId = VpnUtil.getVpnId(broker, vpnInstanceName);
         makeArpFlow(VpnConstants.L3VPN_SERVICE_IDENTIFIER, lPortTag, vpnInterfaceName,
                     vpnId, ArpReplyOrRequest.REQUEST, NwConstants.DEL_FLOW);