Terminaing service table fix in fibmanager 36/32436/2
authorDeepthi V V <deepthi.v.v@ericsson.com>
Tue, 12 Jan 2016 16:30:48 +0000 (22:00 +0530)
committerDeepthi V V <deepthi.v.v@ericsson.com>
Wed, 13 Jan 2016 05:03:03 +0000 (10:33 +0530)
Change-Id: If4f2b2d06534b9243fd9b30ddba43e97a283596e
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
mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/ActionType.java
mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/MetaDataUtil.java

index d3d584201d7d97fb3026d06c495143fbd5b03883..1db29e16814cc0856e6ab73a862db83b3a0361b0 100644 (file)
@@ -51,7 +51,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.vpn.instanc
 import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.vpn.instance.op.data.VpnInstanceOpDataEntryKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.vpn.instance.op.data.vpn.instance.op.data.entry.VpnToDpnList;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.overlay.rev150105.TunnelTypeVxlan;
-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;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev150330.FibEntries;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev150330.fibentries.VrfTables;
@@ -86,6 +85,7 @@ public class FibManager extends AbstractDataChangeListener<VrfEntry> implements
 
   private static final short L3_FIB_TABLE = 21;
   private static final short L3_LFIB_TABLE = 20;
+  public static final short INTERNAL_TUNNEL_TABLE = 23;
   private static final short L3_PROTOCOL_TABLE = 36;
   private static final short L3_INTERFACE_TABLE = 80;
   public static final short LPORT_DISPATCHER_TABLE = 30;
@@ -94,6 +94,7 @@ public class FibManager extends AbstractDataChangeListener<VrfEntry> implements
   private static final int DEFAULT_FIB_FLOW_PRIORITY = 10;
   private static final BigInteger METADATA_MASK_CLEAR = new BigInteger("000000FFFFFFFFFF", 16);
   private static final BigInteger CLEAR_METADATA = BigInteger.valueOf(0);
+  public static final BigInteger COOKIE_TUNNEL = new BigInteger("9000000", 16);
 
 
   private static final FutureCallback<Void> DEFAULT_CALLBACK =
@@ -266,8 +267,7 @@ public class FibManager extends AbstractDataChangeListener<VrfEntry> implements
   }
 
   public void createTerminatingServiceActions( BigInteger destDpId, int label, List<ActionInfo> actionsInfos) {
-    // FIXME
-/*      List<MatchInfo> mkMatches = new ArrayList<MatchInfo>();
+      List<MatchInfo> mkMatches = new ArrayList<MatchInfo>();
 
       LOG.info("create terminatingServiceAction on DpnId = {} and serviceId = {} and actions = {}", destDpId , label,actionsInfos);
 
@@ -279,18 +279,28 @@ public class FibManager extends AbstractDataChangeListener<VrfEntry> implements
       List<InstructionInfo> mkInstructions = new ArrayList<InstructionInfo>();
       mkInstructions.add(new InstructionInfo(InstructionType.write_actions, actionsInfos));
 
-      FlowEntity terminatingServiceTableFlowEntity = MDSALUtil.buildFlowEntity(destDpId,ITMConstants.TERMINATING_SERVICE_TABLE,
-                      getFlowRef(destDpId, ITMConstants.TERMINATING_SERVICE_TABLE,label), 5, String.format("%s:%d","TST Flow Entry ",label),
-                      0, 0, ITMConstants.COOKIE_ITM.add(BigInteger.valueOf(label)),mkMatches, mkInstructions);
+      FlowEntity terminatingServiceTableFlowEntity = MDSALUtil.buildFlowEntity(destDpId, INTERNAL_TUNNEL_TABLE,
+                      getFlowRef(destDpId, INTERNAL_TUNNEL_TABLE,label), 5, String.format("%s:%d","TST Flow Entry ",label),
+                      0, 0, COOKIE_TUNNEL.add(BigInteger.valueOf(label)),mkMatches, mkInstructions);
 
-      mdsalManager.installFlow(terminatingServiceTableFlowEntity);*/
+      mdsalManager.installFlow(terminatingServiceTableFlowEntity);
  }
 
   private void removeTunnelTableEntry(BigInteger dpId, long label) {
-      // FIXME
-      // itmManager.removeTerminatingServiceAction(dpId, (int)label);
-
-      // LOG.debug("Terminating service Entry for dpID {} : label : {} removed successfully {}",dpId, label);
+    FlowEntity flowEntity;
+    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 }));
+    flowEntity = MDSALUtil.buildFlowEntity(dpId,
+                                           INTERNAL_TUNNEL_TABLE,
+                                           getFlowRef(dpId, INTERNAL_TUNNEL_TABLE, (int)label),
+                                           5, String.format("%s:%d","TST Flow Entry ",label), 0, 0,
+                                           COOKIE_TUNNEL.add(BigInteger.valueOf(label)), mkMatches, null);
+    mdsalManager.removeFlow(flowEntity);
+    LOG.debug("Terminating service Entry for dpID {} : label : {} removed successfully {}",dpId, label);
   }
 
   public BigInteger deleteLocalFibEntry(Long vpnId, String rd, VrfEntry vrfEntry) {
@@ -378,7 +388,7 @@ public class FibManager extends AbstractDataChangeListener<VrfEntry> implements
         }
         LOG.debug("adding set tunnel id action for label {}", label);
         actionInfos.add(new ActionInfo(ActionType.set_field_tunnel_id, new BigInteger[] {
-                       tunnelId, MetaDataUtil.METADA_MASK_VALID_TUNNEL_ID_BIT_AND_TUNNEL_ID }));
+                       tunnelId}));
     }
 /*
     List<ActionInfo> actionInfos = resolveAdjacency(localDpnId, remoteDpnId, vpnId, vrfEntry);
index b8a01d134027d9dee755887cf91243a97b13cfe8..7866cd2437ed20d4a9e20958065fb3463792fa4a 100644 (file)
@@ -218,8 +218,6 @@ public class NexthopManager implements AutoCloseable {
     }
 
     protected String getTunnelInterfaceName(BigInteger srcDpId, BigInteger dstDpId) {
-        // FIXME: Enable during itm integration
-        
         try {
             Future<RpcResult<GetTunnelInterfaceNameOutput>> result = itmManager.getTunnelInterfaceName(new GetTunnelInterfaceNameInputBuilder()
                                                                                  .setSourceDpid(srcDpId)
@@ -238,8 +236,6 @@ public class NexthopManager implements AutoCloseable {
     }
 
     protected String getExternalTunnelInterfaceName(BigInteger srcDpId, IpAddress dstIp) {
-        // FIXME: Enable during itm integration
-        
         try {
             Future<RpcResult<GetExternalTunnelInterfaceNameOutput>> result = itmManager.getExternalTunnelInterfaceName(new GetExternalTunnelInterfaceNameInputBuilder()
                                                                                  .setSourceDpid(srcDpId)
index b5f1fc80845cfe825f4823cb9379043162a7d2cf..847284f52bd030aeb4f760d62d6a1e79e2be3a3c 100644 (file)
@@ -213,11 +213,23 @@ public enum ActionType {
         @Override
         public Action buildAction(ActionInfo actionInfo) {
             BigInteger [] actionValues = actionInfo.getBigActionValues();
-            return new ActionBuilder().setAction(
+            if (actionValues.length == 2) {
+                return new ActionBuilder().setAction(
+                    new SetFieldCaseBuilder().setSetField(
+                        new SetFieldBuilder()
+                            .setTunnel(new TunnelBuilder().setTunnelId(actionValues[0])
+                                           .setTunnelMask(actionValues[1]).build()).build())
+                        .build())
+                    .setKey(new ActionKey(actionInfo.getActionKey())).build();
+            } else {
+                return new ActionBuilder().setAction(
                     new SetFieldCaseBuilder().setSetField(
-                            new SetFieldBuilder().setTunnel(new TunnelBuilder().setTunnelId(actionValues[0])
-                                    .setTunnelMask(actionValues[1]).build()).build()).build())
-                                    .setKey(new ActionKey(actionInfo.getActionKey())).build();
+                        new SetFieldBuilder()
+                            .setTunnel(new TunnelBuilder().setTunnelId(actionValues[0])
+                                           .build()).build())
+                        .build())
+                    .setKey(new ActionKey(actionInfo.getActionKey())).build();
+            }
 
         }
 
index deb8c7573fd7b457b6f8177987179b839aff4774..568ad4f457483ccb5486ef2ba93fc1e0c756df32 100644 (file)
@@ -17,6 +17,7 @@ public class MetaDataUtil {
     public static final BigInteger METADATA_MASK_LPORT_WRITE = new BigInteger("00FFFF0000000000", 16);
     public static final BigInteger METADA_MASK_VALID_TUNNEL_ID_BIT_AND_TUNNEL_ID = new BigInteger("08000000FFFFFF00", 16);
     public static final BigInteger METADATA_MASK_LABEL_ITM = new BigInteger("40FFFFFF000000FF", 16);
+    public static final BigInteger METADA_MASK_TUNNEL_ID = new BigInteger("00000000FFFFFF00", 16);
 
     public static BigInteger getMetaDataForLPortDispatcher(int lportTag, short serviceIndex) {
         return getServiceIndexMetaData(serviceIndex).or(getLportTagMetaData(lportTag));