Modification cloud-servicechain-state.yang key 61/46561/2
authorJulian Reyes Romero <julian.reyes.romero@ericsson.com>
Wed, 13 Jul 2016 14:57:39 +0000 (16:57 +0200)
committerSam Hague <shague@redhat.com>
Wed, 5 Oct 2016 18:07:27 +0000 (18:07 +0000)
Due to elan-service-chain-state is an augmentation of
elan-instance, elan-instance-name can be removed from
elan-to-pseudo-port-data list key. The new key will be
composed with elanLportTag and scfTag.

ScfTag is now defined as an unsigned 32-bit number

Change-Id: I153910b5e8a105818fc3a2a3480399efd4b78086
Signed-off-by: Marcos López Samaniego <marcos.lopez.samaniego@ericsson.com>
Signed-off-by: Sam Hague <shague@redhat.com>
15 files changed:
vpnservice/cloud-servicechain/cloud-servicechain-api/src/main/java/org/opendaylight/netvirt/cloudservicechain/api/ICloudServiceChain.java [changed mode: 0644->0755]
vpnservice/cloud-servicechain/cloud-servicechain-api/src/main/yang/cloud-servicechain-state.yang [changed mode: 0644->0755]
vpnservice/cloud-servicechain/cloud-servicechain-impl/src/main/java/org/opendaylight/netvirt/cloudservicechain/CloudServiceChainProvider.java
vpnservice/cloud-servicechain/cloud-servicechain-impl/src/main/java/org/opendaylight/netvirt/cloudservicechain/ElanServiceChainHandler.java
vpnservice/cloud-servicechain/cloud-servicechain-impl/src/main/java/org/opendaylight/netvirt/cloudservicechain/VPNServiceChainHandler.java
vpnservice/cloud-servicechain/cloud-servicechain-impl/src/main/java/org/opendaylight/netvirt/cloudservicechain/listeners/ElanDpnInterfacesListener.java [changed mode: 0644->0755]
vpnservice/cloud-servicechain/cloud-servicechain-impl/src/main/java/org/opendaylight/netvirt/cloudservicechain/listeners/VpnPseudoPortListener.java [changed mode: 0644->0755]
vpnservice/cloud-servicechain/cloud-servicechain-impl/src/main/java/org/opendaylight/netvirt/cloudservicechain/utils/ElanServiceChainUtils.java
vpnservice/cloud-servicechain/cloud-servicechain-impl/src/main/java/org/opendaylight/netvirt/cloudservicechain/utils/VpnPseudoPortCache.java [changed mode: 0644->0755]
vpnservice/cloud-servicechain/cloud-servicechain-impl/src/main/java/org/opendaylight/netvirt/cloudservicechain/utils/VpnServiceChainUtils.java [changed mode: 0644->0755]
vpnservice/cloud-servicechain/cloud-servicechain-impl/src/test/java/org/opendaylight/netvirt/cloudservicechain/VPNServiceChainHandlerTest.java [changed mode: 0644->0755]
vpnservice/elanmanager/elanmanager-impl/src/main/java/org/opendaylight/netvirt/elan/utils/ElanUtils.java [changed mode: 0644->0755]
vpnservice/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/netvirt/vpnmanager/intervpnlink/InterVpnLinkListener.java
vpnservice/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/netvirt/vpnmanager/intervpnlink/InterVpnLinkNodeAddTask.java [changed mode: 0644->0755]
vpnservice/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/netvirt/vpnmanager/intervpnlink/InterVpnLinkUtil.java [changed mode: 0644->0755]

old mode 100644 (file)
new mode 100755 (executable)
index a9722d8..7a0cf3f
@@ -23,7 +23,7 @@ public interface ICloudServiceChain {
      * @param lportTag LportTag of the VPN Pseudo Logical Port
      * @param addOrRemove states if pipeline must be created or removed
      */
-    void programVpnToScfPipeline(String vpnName, short tableId, int scfTag, int lportTag, int addOrRemove);
+    void programVpnToScfPipeline(String vpnName, short tableId, long scfTag, int lportTag, int addOrRemove);
 
 
     /**
@@ -39,7 +39,7 @@ public interface ICloudServiceChain {
      *                           ServiceChains using the VPNPseudoPort as egress port.
      * @param addOrRemove
      */
-    void programScfToVpnPipeline(String vpnName, int scfTag, int servChainTag, long dpnId, int lportTag,
+    void programScfToVpnPipeline(String vpnName, long scfTag, int servChainTag, long dpnId, int lportTag,
                                  boolean isLastServiceChain, int addOrRemove);
 
     /**
@@ -68,7 +68,7 @@ public interface ICloudServiceChain {
      *     ingress port.
      * @param addOrRemove States if the flows must be added or removed
      */
-    void programElanScfPipeline(String elanName, short tableId, int scfTag, int elanLportTag,
+    void programElanScfPipeline(String elanName, short tableId, long scfTag, int elanLportTag,
                                 boolean isLastServiceChain, int addOrRemove);
     // TODO: To be removed when sdnc is changed so that it calls the following API instead:
     void programElanScfPipeline(String elanName, short tableId, int scfTag, int elanLportTag, int addOrRemove);
old mode 100644 (file)
new mode 100755 (executable)
index 13d4929..2a15994
@@ -16,16 +16,11 @@ module cloud-service-chain-state {
 
     grouping elan-to-pseudo-port-data-list {
         list elan-to-pseudo-port-data {
-            key "elan-instance-name";
-            description "Relates elan-logical-port and scfTag with elan-instance-name";
+            key "elan-lport-tag scf-tag";
+            description "Relates elan-logical-port and scfTag";
             max-elements "unbounded";
             min-elements "0";
 
-            leaf elan-instance-name {
-                type string;
-                description "The name of the elan-instance.";
-            }
-
             leaf elan-lport-tag {
                 description "Elan Pseudo Logical Port Tag";
                 type uint32;
@@ -33,7 +28,7 @@ module cloud-service-chain-state {
 
             leaf scf-tag {
                 description "SCF tag associated to Elan Pseudo Logical Port Tag";
-                type uint16;
+                type uint32;
             }
         }
     }
index 2044fa299785ed0bb835af98b6fa30d46c734430..68c7e4f4ccf10416733e903e36a4c5acada8e61d 100755 (executable)
@@ -26,17 +26,17 @@ public class CloudServiceChainProvider implements ICloudServiceChain {
     }
 
     @Override
-    public void programVpnToScfPipeline(String vpnId, short tableId, int scfTag, int lportTag, int addOrRemove) {
+    public void programVpnToScfPipeline(String vpnId, short tableId, long scfTag, int lportTag, int addOrRemove) {
         LOG.info("L3VPN Service chaining :programVpnToScfPipeline [Started] {} {} {} {} {}",
                  vpnId, tableId,scfTag, lportTag, addOrRemove);
         vpnServiceChainHandler.programVpnToScfPipeline(vpnId, tableId, scfTag, lportTag, addOrRemove);
     }
 
     @Override
-    public void programScfToVpnPipeline(String vpnId, int scfTag, int scsTag, long dpnId, int lportTag,
+    public void programScfToVpnPipeline(String vpnId, long scfTag, int scsTag, long dpnId, int lportTag,
                                         boolean isLastServiceChain, int addOrRemove) {
         LOG.info("L3VPN Service chaining :programScfToVpnPipeline [Started] {} {} {} {}", vpnId, scfTag,
-                dpnId, lportTag);
+                 dpnId, lportTag);
         vpnServiceChainHandler.programScfToVpnPipeline(vpnId, scfTag, scsTag, dpnId, lportTag, isLastServiceChain,
                                                        addOrRemove);
     }
@@ -51,7 +51,7 @@ public class CloudServiceChainProvider implements ICloudServiceChain {
     }
 
     @Override
-    public void programElanScfPipeline(String elanName, short tableId, int scfTag, int elanLportTag,
+    public void programElanScfPipeline(String elanName, short tableId, long scfTag, int elanLportTag,
                                        boolean isLastServiceChain, int addOrRemove) {
         LOG.info("ELAN Service chaining :programElanScfPipeline [Started] {} {} {} {} {}",
                  elanName, tableId, scfTag, elanLportTag, addOrRemove);
index aa5e774bf0b954c53b07780773000330894a6a4b..f975dacd18c19222193968e6733d7aa3d49c0074 100755 (executable)
@@ -66,7 +66,7 @@ public class ElanServiceChainHandler {
      *        the ServiceChain
      * @param addOrRemove States if the flows must be created or removed
      */
-    public void programElanScfPipeline(String elanName, short tableId, int scfTag, int elanLportTag, int addOrRemove) {
+    public void programElanScfPipeline(String elanName, short tableId, long scfTag, int elanLportTag, int addOrRemove) {
         logger.info("programElanScfPipeline:  elanName={}   scfTag={}   elanLportTag={}    addOrRemove={}",
                     elanName, scfTag, elanLportTag, addOrRemove);
         // There are 3 rules to be considered:
@@ -116,52 +116,58 @@ public class ElanServiceChainHandler {
     }
 
     public void removeElanPseudoPortFlows(String elanName, int elanLportTag) {
-        Optional<ElanToPseudoPortData> elanToLportTagList = ElanServiceChainUtils.getElanToLportTagList(broker, elanName);
-        if (!elanToLportTagList.isPresent()) {
+        Optional<ElanServiceChainState> elanServiceChainState = ElanServiceChainUtils
+                .getElanServiceChainState(broker, elanName);
+        if (!elanServiceChainState.isPresent()) {
             logger.warn("Could not find ServiceChain state data for Elan {}", elanName);
             return;
         }
         Optional<ElanInstance> elanInstance = ElanServiceChainUtils.getElanInstanceByName(broker, elanName);
         if ( !elanInstance.isPresent() ) {
-            logger.warn("Could not fina ElanInstance for name {}", elanName);
+            logger.warn("Could not find ElanInstance for name {}", elanName);
             return;
         }
-        Integer scfTag = elanToLportTagList.get().getScfTag();
-        Long elanTag = elanInstance.get().getElanTag();
-        Long vni = elanInstance.get().getSegmentationId();
+        List<ElanToPseudoPortData> elanToPseudoPortDataList = elanServiceChainState.get().getElanToPseudoPortData();
 
-        if ( vni == null ) {
-            logger.warn("Elan {} is not related to a VNI. VNI is mandatory for ServiceChaining. Returning", elanName);
-            return;
-        }
+        for (ElanToPseudoPortData elanToPseudoPortData : elanToPseudoPortDataList) {
+            Long scfTag = elanToPseudoPortData.getScfTag();
+            Long elanTag = elanInstance.get().getElanTag();
+            Long vni = elanInstance.get().getSegmentationId();
 
-        List<BigInteger> operativeDPNs = NWUtil.getOperativeDPNs(broker);
-        for ( BigInteger dpnId : operativeDPNs ) {
-            ElanServiceChainUtils.programLPortDispatcherToScf(mdsalManager, dpnId, elanTag.intValue(), elanLportTag,
-                                                              CloudServiceChainConstants.SCF_DOWN_SUB_FILTER_TCP_BASED_TABLE,
-                                                              scfTag, NwConstants.DEL_FLOW);
-            ElanServiceChainUtils.programLPortDispatcherFromScf(mdsalManager, dpnId, elanLportTag, elanTag.intValue(),
-                                                                NwConstants.DEL_FLOW);
-            ElanServiceChainUtils.programExternalTunnelTable(mdsalManager, dpnId, elanLportTag, vni, elanTag.intValue(),
-                                                             NwConstants.DEL_FLOW);
-        }
+            if (vni == null) {
+                logger.warn("Elan {} is not related to a VNI. VNI is mandatory for ServiceChaining. Returning", elanName);
+                return;
+            }
+
+            List<BigInteger> operativeDPNs = NWUtil.getOperativeDPNs(broker);
+            for (BigInteger dpnId : operativeDPNs) {
+                ElanServiceChainUtils.programLPortDispatcherToScf(mdsalManager, dpnId, elanTag.intValue(), elanLportTag,
+                        CloudServiceChainConstants.SCF_DOWN_SUB_FILTER_TCP_BASED_TABLE,
+                        scfTag, NwConstants.DEL_FLOW);
+                ElanServiceChainUtils.programLPortDispatcherFromScf(mdsalManager, dpnId, elanLportTag, elanTag.intValue(),
+                        NwConstants.DEL_FLOW);
+                ElanServiceChainUtils.programExternalTunnelTable(mdsalManager, dpnId, elanLportTag, vni, elanTag.intValue(),
+                        NwConstants.DEL_FLOW);
+            }
 
-        // Lastly, remove the serviceChain-state for the Elan
-        InstanceIdentifier<ElanToPseudoPortData> path =
-            InstanceIdentifier.builder(ElanInstances.class).child(ElanInstance.class,
-                                                                  new ElanInstanceKey(elanName))
-                                                           .augmentation(ElanServiceChainState.class)
-                                                           .child(ElanToPseudoPortData.class,
-                                                                  new ElanToPseudoPortDataKey(elanName))
-                                                           .build();
-        Optional<ElanToPseudoPortData> elanScStateOpc = MDSALUtil.read(broker, LogicalDatastoreType.OPERATIONAL, path);
-        if ( elanScStateOpc.isPresent() ) {
-             ElanToPseudoPortData elanScState = elanScStateOpc.get();
-            if (elanScState.getElanLportTag() != null && elanScState.getElanLportTag().intValue() == elanLportTag) {
-                MDSALUtil.syncDelete(broker, LogicalDatastoreType.OPERATIONAL, path);
-            } else {
-                logger.debug("lportTag mismatch for Elan={}.  state-lPortTag={}   param-lportTag={}",
-                             elanName, elanScState.getElanLportTag(), elanLportTag);
+            // Lastly, remove the serviceChain-state for the Elan
+            InstanceIdentifier<ElanToPseudoPortData> path =
+                    InstanceIdentifier.builder(ElanInstances.class).child(ElanInstance.class,
+                            new ElanInstanceKey(elanName))
+                            .augmentation(ElanServiceChainState.class)
+                            .child(ElanToPseudoPortData.class,
+                                    new ElanToPseudoPortDataKey(new Long(elanLportTag), scfTag))
+                            .build();
+
+            Optional<ElanToPseudoPortData> elanScStateOpc = MDSALUtil.read(broker, LogicalDatastoreType.OPERATIONAL, path);
+            if (elanScStateOpc.isPresent()) {
+                ElanToPseudoPortData elanScState = elanScStateOpc.get();
+                if (elanScState.getElanLportTag() != null && elanScState.getElanLportTag().intValue() == elanLportTag) {
+                    MDSALUtil.syncDelete(broker, LogicalDatastoreType.OPERATIONAL, path);
+                } else {
+                    logger.debug("lportTag mismatch for Elan={}.  state-lPortTag={}   param-lportTag={}",
+                                 elanName, elanScState.getElanLportTag(), elanLportTag);
+                }
             }
         }
     }
index 3422953598c6ebdba0ad65f2a4d1cac7b66f6018..71dd2f9b8dd5236600e61978ef1613c108c4514e 100755 (executable)
@@ -124,7 +124,7 @@ public class VPNServiceChainHandler implements AutoCloseable {
      * @param lportTag VpnPseudo Port lportTag
      * @param addOrRemove States if the VPN2SCF Pipeline must be installed or removed
      */
-    public void programVpnToScfPipeline(String vpnName, short tableId, int scfTag, int lportTag, int addOrRemove) {
+    public void programVpnToScfPipeline(String vpnName, short tableId, long scfTag, int lportTag, int addOrRemove) {
         // This entries must be created in the DPN where the CGNAT is installed. Since it is not possible
         // to know where CGNAT is located, this entries are installed in all the VPN footprint.
 
@@ -175,7 +175,7 @@ public class VPNServiceChainHandler implements AutoCloseable {
      * @param lportTag Lport tag
      * @return the fake VpnPseudoPort interface name
      */
-    private String buildVpnPseudoPortIfName(Long dpId, int scfTag, int scsTag, int lportTag) {
+    private String buildVpnPseudoPortIfName(Long dpId, long scfTag, int scsTag, int lportTag) {
         return new StringBuilder("VpnPseudo.").append(dpId).append(NwConstants.FLOWID_SEPARATOR)
                                               .append(lportTag).append(NwConstants.FLOWID_SEPARATOR)
                                               .append(scfTag).append(NwConstants.FLOWID_SEPARATOR)
@@ -200,8 +200,8 @@ public class VPNServiceChainHandler implements AutoCloseable {
      * @param isLastServiceChain Flag stating if there is no other ServiceChain using this VpnPseudoPort
      * @param addOrRemove States if pipeline must be installed or removed
      */
-    public void programScfToVpnPipeline(String vpnName, int scfTag, int servChainTag, long dpnId, int vpnPseudoLportTag,
-                                        boolean isLastServiceChain, int addOrRemove) {
+    public void programScfToVpnPipeline(String vpnName, long scfTag, int servChainTag, long dpnId,
+                                        int vpnPseudoLportTag, boolean isLastServiceChain, int addOrRemove) {
         // These Flows must be installed in the DPN where the last SF in the ServiceChain is located
         //   + ScForwardingTable (75):  (This one is created and maintained by ScHopManager)
         //       - Match:  scfTag + servChainId + lportTagOfvVSF    Instr: VpnPseudoPortTag + SI=L3VPN + GOTO LPortDisp
old mode 100644 (file)
new mode 100755 (executable)
index 8ee94da..2d45d19
@@ -10,6 +10,7 @@ package org.opendaylight.netvirt.cloudservicechain.listeners;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
 import org.opendaylight.genius.mdsalutil.AbstractDataChangeListener;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.cloud.servicechain.state.rev170511.ElanServiceChainState;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.cloud.servicechain.state.rev170511.elan.to.pseudo.port.data.list.ElanToPseudoPortData;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.elan.instances.ElanInstance;
 import org.opendaylight.yangtools.concepts.ListenerRegistration;
@@ -24,6 +25,8 @@ import org.opendaylight.netvirt.cloudservicechain.utils.ElanServiceChainUtils;
 import org.opendaylight.netvirt.cloudservicechain.CloudServiceChainConstants;
 import org.opendaylight.genius.mdsalutil.NwConstants;
 import java.math.BigInteger;
+import java.util.List;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -67,34 +70,43 @@ public class ElanDpnInterfacesListener extends AbstractDataChangeListener<DpnInt
     protected void add(InstanceIdentifier<DpnInterfaces> identifier, final DpnInterfaces dpnInterfaces) {
         final String elanName = getElanName(identifier);
         BigInteger addDpnId = dpnInterfaces.getDpId();
-        Optional<ElanToPseudoPortData> elanLPortListOpc = ElanServiceChainUtils.getElanToLportTagList(broker, elanName);
-        if (elanLPortListOpc.isPresent()) {
-            int scfTag = elanLPortListOpc.get().getScfTag();
-            Long elanLportTag = elanLPortListOpc.get().getElanLportTag();
-            if ( elanLportTag != null ) {
-                short tableId = NwConstants.SCF_DOWN_SUB_FILTER_TCP_BASED_TABLE;
-                handleUpdate(addDpnId, elanName, tableId, elanLportTag.intValue(), scfTag, NwConstants.ADD_FLOW);
-            } else {
-                logger.debug("Could not find lportTag for elan={}", elanName);
+        Optional<ElanServiceChainState> elanServiceChainState = ElanServiceChainUtils
+                .getElanServiceChainState(broker, elanName);
+        if (elanServiceChainState.isPresent()) {
+            List<ElanToPseudoPortData> elanToPseudoPortDataList = elanServiceChainState.get().getElanToPseudoPortData();
+            for (ElanToPseudoPortData elanToPseudoPortData : elanToPseudoPortDataList) {
+                Long scfTag = elanToPseudoPortData.getScfTag();
+                Long elanLportTag = elanToPseudoPortData.getElanLportTag();
+                if (elanLportTag != null && scfTag != null) {
+                    short tableId = NwConstants.SCF_DOWN_SUB_FILTER_TCP_BASED_TABLE;
+                    handleUpdate(addDpnId, elanName, tableId, elanLportTag.intValue() /*21 bit*/ ,
+                                 scfTag, NwConstants.ADD_FLOW);
+                } else {
+                    logger.debug("Could not find lportTag for elan={}", elanName);
+                }
             }
         }
-
     }
 
     @Override
     protected void remove(InstanceIdentifier<DpnInterfaces> identifier, final DpnInterfaces dpnInterfaces) {
         final String elanName = getElanName(identifier);
         BigInteger removeDpnId = dpnInterfaces.getDpId();
-        Optional<ElanToPseudoPortData> elanLPortListOpc = ElanServiceChainUtils.getElanToLportTagList(broker, elanName);
-        if (elanLPortListOpc.isPresent()) {
-            Integer scfTag = elanLPortListOpc.get().getScfTag();
-            Long elanLportTag = elanLPortListOpc.get().getElanLportTag();
-            if ( scfTag != null && elanLportTag != null ) {
-                handleUpdate(removeDpnId, elanName,  (short) 0 /* tableId, ignored in removals */,
-                             elanLportTag.intValue(), 0 /* scfTag, ignored in removals */, NwConstants.DEL_FLOW);
-            } else {
-                logger.debug("One of scfTag or lPortTag is null for elan={}:  scfTag={}  lportTag={}",
-                             elanName, scfTag, elanLportTag);
+        Optional<ElanServiceChainState> elanServiceChainState = ElanServiceChainUtils
+                .getElanServiceChainState(broker, elanName);
+        if (elanServiceChainState.isPresent()) {
+            List<ElanToPseudoPortData> elanToPseudoPortDataList = elanServiceChainState.get().getElanToPseudoPortData();
+            for (ElanToPseudoPortData elanToPseudoPortData : elanToPseudoPortDataList) {
+                Long scfTag = elanToPseudoPortData.getScfTag();
+                Long elanLportTag = elanToPseudoPortData.getElanLportTag();
+                if (scfTag != null && elanLportTag != null) {
+                    handleUpdate(removeDpnId, elanName, (short) 0 /* tableId, ignored in removals */,
+                                 elanLportTag.intValue() /*21 bit*/ , 0 /* scfTag, ignored in removals */,
+                                 NwConstants.DEL_FLOW);
+                } else {
+                    logger.debug("One of scfTag or lPortTag is null for elan={}:  scfTag={}  lportTag={}",
+                                 elanName, scfTag, elanLportTag);
+                }
             }
         }
     }
@@ -122,7 +134,8 @@ public class ElanDpnInterfacesListener extends AbstractDataChangeListener<DpnInt
         return identifier.firstKeyOf(ElanDpnInterfacesList.class).getElanInstanceName();
     }
 
-    private void handleUpdate(BigInteger dpnId, String elanName,  short tableId, int elanLportTag, int scfTag, int addOrRemove) {
+    private void handleUpdate(BigInteger dpnId, String elanName,  short tableId, int elanLportTag, long scfTag,
+                              int addOrRemove) {
         Optional<ElanInstance> elanInstance = ElanServiceChainUtils.getElanInstanceByName(broker, elanName);
         if ( !elanInstance.isPresent() ) {
             logger.debug("Could not find an Elan Instance with name={}", elanName);
old mode 100644 (file)
new mode 100755 (executable)
index b7463c0..31fa1b6
@@ -57,12 +57,12 @@ public class VpnPseudoPortListener
     @Override
     protected void update(InstanceIdentifier<VpnToPseudoPortTag> identifier, VpnToPseudoPortTag original,
                           VpnToPseudoPortTag update) {
-        VpnPseudoPortCache.addVpnPseudoPortToCache(update.getVrfId(), update.getLportTag());
+        VpnPseudoPortCache.addVpnPseudoPortToCache(update.getVrfId(), update.getLportTag().intValue());
     }
 
     @Override
     protected void add(InstanceIdentifier<VpnToPseudoPortTag> identifier, VpnToPseudoPortTag add) {
-        VpnPseudoPortCache.addVpnPseudoPortToCache(add.getVrfId(), add.getLportTag());
+        VpnPseudoPortCache.addVpnPseudoPortToCache(add.getVrfId(), add.getLportTag().intValue());
     }
 
     @Override
index 7326037cd476713d61610792f2e1ec7aa6eea5a0..338a589625d7367f0c29bd45709f7dd4a819d1cc 100755 (executable)
@@ -95,10 +95,10 @@ public class ElanServiceChainUtils {
      * @param elanTag the Elan Id in the Dataplane
      * @param addOrRemove States if the flow must be added or removed
      */
-    public static void programLPortDispatcherToScf(IMdsalApiManager mdsalManager, BigInteger dpnId, int elanTag,
-            int elanLportTag, short tableId, int scfTag, int addOrRemove) {
+    public static void programLPortDispatcherToScf(IMdsalApiManager mdsalManager, BigInteger dpnId, long elanTag,
+            int elanLportTag, short tableId, long scfTag, int addOrRemove) {
         logger.info("L2-ServiceChaining: programLPortDispatcherToScf dpId={} elanLportTag={} scfTag={} addOrRemove={} ",
-                dpnId, elanLportTag, scfTag, addOrRemove);
+                    dpnId, elanLportTag, scfTag, addOrRemove);
         String flowRef = buildLportDispToScfFlowRef(elanLportTag, scfTag);
         if (addOrRemove == NwConstants.ADD_FLOW) {
             List<MatchInfo> matches = Arrays.asList(
@@ -138,7 +138,7 @@ public class ElanServiceChainUtils {
      * @param addOrRemove States if the flow must be added or removed
      */
     public static void programLPortDispatcherFromScf(IMdsalApiManager mdsalManager, BigInteger dpnId,
-                                                     int elanLportTag, int elanTag, int addOrRemove) {
+                                                     int elanLportTag, long elanTag, int addOrRemove) {
         logger.info("L2-ServiceChaining: programLPortDispatcherFromScf dpId={} elanLportTag={} elanTag={} addOrRemove={} ",
                 dpnId, elanLportTag, elanTag, addOrRemove);
         String flowRef = buildLportDispFromScfFlowRef(elanTag, elanLportTag );
@@ -191,7 +191,7 @@ public class ElanServiceChainUtils {
      * @param addOrRemove States if the flow must be added or removed
      */
     public static void programExternalTunnelTable(IMdsalApiManager mdsalManager, BigInteger dpnId, int elanLportTag,
-            Long vni, int elanTag, int addOrRemove) {
+            long vni, int elanTag, int addOrRemove) {
         logger.info("L2-ServiceChaining: programExternalTunnelTable dpId={} vni={} elanLportTag={} addOrRemove={} ",
                 dpnId, vni, elanLportTag, addOrRemove);
         String flowRef = buildExtTunnelTblToLportDispFlowRef(vni, elanLportTag);
@@ -218,7 +218,7 @@ public class ElanServiceChainUtils {
      *
      * @return the List of Instructions
      */
-    public static List<Instruction> buildSetLportTagAndGotoLportDispInstructions(long lportTag) {
+    public static List<Instruction> buildSetLportTagAndGotoLportDispInstructions(int lportTag) {
         int instructionKey = 0;
         BigInteger metadata = MetaDataUtil.getMetaDataForLPortDispatcher((int) lportTag,
                 ServiceIndex.getIndex(NwConstants.SCF_SERVICE_NAME, NwConstants.SCF_SERVICE_INDEX));
@@ -230,23 +230,23 @@ public class ElanServiceChainUtils {
         return result;
     }
 
-    private static String buildExtTunnelTblToLportDispFlowRef(Long vni, int elanLportTag) {
+    private static String buildExtTunnelTblToLportDispFlowRef(long vni, int elanLportTag) {
         return CloudServiceChainConstants.L2_FLOWID_PREFIX + vni
                 + NwConstants.FLOWID_SEPARATOR + elanLportTag;
     }
 
-    private static String buildLportDispToScfFlowRef(int elanLportTag, int scfTag) {
+    private static String buildLportDispToScfFlowRef(int elanLportTag, long scfTag) {
         return CloudServiceChainConstants.ELAN_TO_SCF_L2_FLOWID_PREFIX + elanLportTag
                 + NwConstants.FLOWID_SEPARATOR + scfTag;
     }
 
-    private static String buildLportDispFromScfFlowRef(int elanTag, int elanLportTag) {
+    private static String buildLportDispFromScfFlowRef(long elanTag, int elanLportTag) {
         return CloudServiceChainConstants.SCF_TO_ELAN_L2_FLOWID_PREFIX + elanTag
                 + NwConstants.FLOWID_SEPARATOR + elanLportTag;
     }
 
     /**
-     * Stores the relation between elanInstanceName and ElanLport and scfTag.
+     * Stores the relation between ElanLport and scfTag.
      *
      * @param broker dataBroker service reference
      * @param elanInstanceName Name of the ELAN. Typically its UUID
@@ -255,17 +255,17 @@ public class ElanServiceChainUtils {
      * @param addOrRemove States if flows must be added or removed
      */
     public static void updateElanToLportTagMap(final DataBroker broker, final String elanInstanceName,
-                                                final int lportTag, final int scfTag, final int addOrRemove) {
-        ElanToPseudoPortDataKey key = new ElanToPseudoPortDataKey(elanInstanceName);
+                                               final int lportTag, final long scfTag, final int addOrRemove) {
+        ElanToPseudoPortDataKey key = new ElanToPseudoPortDataKey(new Long(lportTag), scfTag);
         InstanceIdentifier<ElanToPseudoPortData> path = InstanceIdentifier.builder(ElanInstances.class)
                 .child(ElanInstance.class, new ElanInstanceKey(elanInstanceName))
                 .augmentation(ElanServiceChainState.class)
-                .child(ElanToPseudoPortData.class, new ElanToPseudoPortDataKey(elanInstanceName)).build();
+                .child(ElanToPseudoPortData.class, new ElanToPseudoPortDataKey(key)).build();
 
         if ( addOrRemove == NwConstants.ADD_FLOW ) {
             ElanToPseudoPortData newValue =
-                    new ElanToPseudoPortDataBuilder().setKey(key).setElanInstanceName(elanInstanceName)
-                                                     .setElanLportTag((long) lportTag).setScfTag(scfTag).build();
+                    new ElanToPseudoPortDataBuilder().setKey(key).setElanLportTag(new Long(lportTag))
+                                                     .setScfTag(scfTag).build();
             MDSALUtil.syncWrite(broker, LogicalDatastoreType.CONFIGURATION, path, newValue);
         } else {
             MDSALUtil.syncDelete(broker, LogicalDatastoreType.CONFIGURATION, path);
@@ -280,21 +280,18 @@ public class ElanServiceChainUtils {
      * @return the ElanToPseudoPortData object or Optional.absent() if it
      *     cannot be found
      */
-    public static Optional<ElanToPseudoPortData> getElanToLportTagList(final DataBroker broker, final String elanInstanceName) {
-        ElanToPseudoPortDataKey key = new ElanToPseudoPortDataKey(elanInstanceName);
-        InstanceIdentifier<ElanToPseudoPortData> path = InstanceIdentifier.builder(ElanInstances.class)
+    public static Optional<ElanServiceChainState> getElanServiceChainState(final DataBroker broker, final String elanInstanceName) {
+        InstanceIdentifier<ElanServiceChainState> path = InstanceIdentifier.builder(ElanInstances.class)
                 .child(ElanInstance.class, new ElanInstanceKey(elanInstanceName))
-                .augmentation(ElanServiceChainState.class)
-                .child(ElanToPseudoPortData.class, key).build();
-
-        Optional<ElanToPseudoPortData> elanLPortListOpc =
-                MDSALUtil.read(broker, LogicalDatastoreType.OPERATIONAL, path);
-        if (!elanLPortListOpc.isPresent()) {
-            logger.warn("Could not find and LPort for elan {}", elanInstanceName);
+                .augmentation(ElanServiceChainState.class).build();
+        Optional<ElanServiceChainState> elanServiceChainStateOpc =
+                MDSALUtil.read(broker,LogicalDatastoreType.OPERATIONAL,path);
+        if (!elanServiceChainStateOpc.isPresent()) {
+            logger.warn("Could not find ServiceChainState for elan {}", elanInstanceName);
             return Optional.absent();
         }
 
-        return elanLPortListOpc;
+        return elanServiceChainStateOpc;
 
     }
 }
old mode 100644 (file)
new mode 100755 (executable)
index 411e693..cb2629c
@@ -23,7 +23,7 @@ public class VpnPseudoPortCache {
         CacheUtil.createCache(VPNPSEUDOPORT_CACHE_NAME);
     }
 
-    public static void addVpnPseudoPortToCache(String vrfId, long vpnPseudoLportTag) {
+    public static void addVpnPseudoPortToCache(String vrfId, int vpnPseudoLportTag) {
         ConcurrentHashMap<String, Long> cache =
             (ConcurrentHashMap<String, Long>) CacheUtil.getCache(VPNPSEUDOPORT_CACHE_NAME);
         cache.put(vrfId, Long.valueOf(vpnPseudoLportTag));
old mode 100644 (file)
new mode 100755 (executable)
index 3706109..24c4378
@@ -81,7 +81,7 @@ public class VpnServiceChainUtils {
      * @param scfTag
      * @return
      */
-    public static BigInteger getMetadataSCF(int scfTag) { // TODO: Move to a common place
+    public static BigInteger getMetadataSCF(long scfTag) { // TODO: Move to a common place
         return (new BigInteger("FF", 16).and(BigInteger.valueOf(scfTag))).shiftLeft(32);
     }
 
@@ -296,7 +296,7 @@ public class VpnServiceChainUtils {
      * @param lportTag Pseudo Logical Port tag
      * @return the FlowEntity
      */
-    public static FlowEntity buildLFibVpnPseudoPortFlow(BigInteger dpId, Long label, String nextHop, Integer lportTag) {
+    public static FlowEntity buildLFibVpnPseudoPortFlow(BigInteger dpId, Long label, String nextHop, int lportTag) {
 
         List<MatchInfo> matches = new ArrayList<>();
         matches.add(new MatchInfo(MatchFieldType.eth_type, new long[] { NwConstants.ETHTYPE_MPLS_UC }));
@@ -332,7 +332,7 @@ public class VpnServiceChainUtils {
      * @param lportTag
      */
     public static void programLFibEntriesForSCF(IMdsalApiManager mdsalMgr, BigInteger dpId, List<VrfEntry> vrfEntries,
-                                                Integer lportTag, int addOrRemove) {
+                                                int lportTag, int addOrRemove) {
         for (VrfEntry vrfEntry : vrfEntries) {
             Long label = vrfEntry.getLabel();
             for (String nexthop : vrfEntry.getNextHopAddressList()) {
@@ -361,7 +361,7 @@ public class VpnServiceChainUtils {
      * @param addOrRemove
      */
     public static void programLPortDispatcherFlowForVpnToScf(IMdsalApiManager mdsalManager, BigInteger dpId,
-                                                             Integer lportTag, int scfTag, short gotoTableId,
+                                                             int lportTag, long scfTag, short gotoTableId,
                                                              int addOrRemove) {
         FlowEntity flowEntity = VpnServiceChainUtils.buildLportFlowDispForVpnToScf(dpId, lportTag, scfTag, gotoTableId);
         if (addOrRemove == NwConstants.ADD_FLOW) {
@@ -384,7 +384,7 @@ public class VpnServiceChainUtils {
      * @param gotoTableId
      * @return the FlowEntity
      */
-    public static FlowEntity buildLportFlowDispForVpnToScf(BigInteger dpId, Integer lportTag, int scfTag,
+    public static FlowEntity buildLportFlowDispForVpnToScf(BigInteger dpId, int lportTag, long scfTag,
                                                            short gotoTableId) {
         List<MatchInfo> matches = buildMatchOnLportTagAndSI(lportTag, ServiceIndex.getIndex(NwConstants.SCF_SERVICE_NAME, NwConstants.SCF_SERVICE_INDEX));
         List<InstructionInfo> instructions = new ArrayList<InstructionInfo>();
@@ -569,7 +569,7 @@ public class VpnServiceChainUtils {
 
 
 
-    private static BigInteger getCookieSCHop(int scfInstanceTag) {
+    private static BigInteger getCookieSCHop(long scfInstanceTag) {
         return CloudServiceChainConstants.COOKIE_SCF_BASE.add(new BigInteger("0610000", 16))
                 .add(BigInteger.valueOf(scfInstanceTag));
     }
old mode 100644 (file)
new mode 100755 (executable)
index d348028..760e493
@@ -89,7 +89,7 @@ public class VPNServiceChainHandlerTest {
     final String RD = "1.1.1.1:10";
     final String vpnName = "1";
     final long vpnId = 1;
-    final int scfTag = 1;
+    final long scfTag = 1L;
     final int servChainTag = 100;
     final int dpnId = 1;
     final int lportTag = 1;
old mode 100644 (file)
new mode 100755 (executable)
index 7599108..5451b1c
@@ -1671,7 +1671,7 @@ public class ElanUtils {
      *            the display name
      * @throws ElanException in case of issues creating the flow objects
      */
-    public void installDmacFlowsToInternalRemoteMac(BigInteger localDpId, BigInteger remoteDpId, long lportTag,
+    public void installDmacFlowsToInternalRemoteMac(BigInteger localDpId, BigInteger remoteDpId, int lportTag,
             long elanTag, String macAddress, String displayName) throws ElanException {
         Flow flow = buildDmacFlowForInternalRemoteMac(localDpId, remoteDpId, lportTag, elanTag, macAddress,
                 displayName);
@@ -1873,7 +1873,7 @@ public class ElanUtils {
      * @throws ElanException in case of issues creating the flow objects
      */
     @SuppressWarnings("checkstyle:IllegalCatch")
-    public Flow buildDmacFlowForInternalRemoteMac(BigInteger localDpId, BigInteger remoteDpId, long lportTag,
+    public Flow buildDmacFlowForInternalRemoteMac(BigInteger localDpId, BigInteger remoteDpId, int lportTag,
             long elanTag, String macAddress, String displayName) throws ElanException {
         List<MatchInfo> mkMatches = buildMatchesForElanTagShFlagAndDstMac(elanTag, /* shFlag */ false, macAddress);
 
index 1dd88b7fbe06313c76befde580199a2251acf6b0..e3fb11b63108ab36593d6a1805d068695a030247 100755 (executable)
@@ -165,9 +165,9 @@ public class InterVpnLinkListener extends AsyncDataTreeChangeListenerBase<InterV
 
             // Note that in the DPN of the firstEndpoint we install the lportTag of the secondEndpoint and viceversa
             InterVpnLinkUtil.installLPortDispatcherTableFlow(dataBroker, mdsalManager, add, firstDpnList,
-                                                             secondEndpointVpnUuid, secondVpnLportTag);
+                                                             secondEndpointVpnUuid, secondVpnLportTag.intValue());
             InterVpnLinkUtil.installLPortDispatcherTableFlow(dataBroker, mdsalManager, add, secondDpnList,
-                                                             firstEndpointVpnUuid, firstVpnLportTag);
+                                                             firstEndpointVpnUuid, firstVpnLportTag.intValue());
             // Update the VPN -> DPNs Map.
             // Note: when a set of DPNs is calculated for Vpn1, these DPNs are added to the VpnToDpn map of Vpn2. Why?
             // because we do the handover from Vpn1 to Vpn2 in those DPNs, so in those DPNs we must know how to reach
old mode 100644 (file)
new mode 100755 (executable)
index 3d07e5a..17f2493
@@ -117,10 +117,10 @@ public class InterVpnLinkNodeAddTask implements Callable<List<ListenableFuture<V
             // Note that in the DPN of the firstEndpoint we install the lportTag of the secondEndpoint and viceversa
             InterVpnLinkUtil.installLPortDispatcherTableFlow(broker, mdsalManager, vpnLink.get(), firstDpnList,
                                                     secondEndpointVpnUuid,
-                                                    interVpnLinkState.getSecondEndpointState().getLportTag());
+                                                    interVpnLinkState.getSecondEndpointState().getLportTag().intValue());
             InterVpnLinkUtil.installLPortDispatcherTableFlow(broker, mdsalManager, vpnLink.get(), secondDpnList,
                                                     firstEndpointVpnUuid,
-                                                    interVpnLinkState.getFirstEndpointState().getLportTag());
+                                                    interVpnLinkState.getFirstEndpointState().getLportTag().intValue());
             // Update the VPN -> DPNs Map.
             // Note: when a set of DPNs is calculated for Vpn1, these DPNs are added to the VpnToDpn map of Vpn2. Why?
             // because we do the handover from Vpn1 to Vpn2 in those DPNs, so in those DPNs we must know how to reach
old mode 100644 (file)
new mode 100755 (executable)
index da56c1f..1a74ded
@@ -177,12 +177,12 @@ public class InterVpnLinkUtil {
      */
     public static void installLPortDispatcherTableFlow(DataBroker broker, IMdsalApiManager mdsalManager,
                                                        InterVpnLink interVpnLink, List<BigInteger> dpnList,
-                                                       Uuid vpnUuidOtherEndpoint, Long lPortTagOfOtherEndpoint) {
+                                                       Uuid vpnUuidOtherEndpoint, Integer lPortTagOfOtherEndpoint) {
         long vpnId = VpnUtil.getVpnId(broker, vpnUuidOtherEndpoint.getValue());
         for ( BigInteger dpnId : dpnList ) {
             // insert into LPortDispatcher table
             Flow lPortDispatcherFlow = buildLPortDispatcherFlow(interVpnLink.getName(), vpnId,
-                    lPortTagOfOtherEndpoint.intValue());
+                                                                lPortTagOfOtherEndpoint.intValue());
             mdsalManager.installFlow(dpnId, lPortDispatcherFlow);
         }
     }