* @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);
/**
* 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);
/**
* 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);
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;
leaf scf-tag {
description "SCF tag associated to Elan Pseudo Logical Port Tag";
- type uint16;
+ type uint32;
}
}
}
}
@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);
}
}
@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);
* 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:
}
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);
+ }
}
}
}
* @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.
* @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)
* @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
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;
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;
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);
+ }
}
}
}
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);
@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
* @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(
* @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 );
* @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);
*
* @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));
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
* @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);
* @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;
}
}
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));
* @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);
}
* @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 }));
* @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()) {
* @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) {
* @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>();
- 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));
}
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;
* 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);
* @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);
// 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
// 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
*/
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);
}
}