use of org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.rev140701.service.function.forwarders.service.function.forwarder.service.function.dictionary.SffSfDataPlaneLocator in project netvirt by opendaylight.
the class SfcProvider method getHopSfInterface.
private Optional<String> getHopSfInterface(RenderedServicePathHop hop, boolean useForwardDpl) {
LOG.trace("getHopSfInterface of hop {}", hop);
SfName sfName = hop.getServiceFunctionName();
if (sfName == null) {
LOG.warn("getHopSfInterface hop has no SF");
return Optional.empty();
}
SffName sffName = hop.getServiceFunctionForwarder();
if (sffName == null) {
LOG.warn("getHopSfInterface hop has no SFF");
return Optional.empty();
}
Optional<ServiceFunctionForwarder> sff = getServiceFunctionForwarder(sffName);
if (!sff.isPresent()) {
LOG.warn("getHopSfInterface SFF [{}] does not exist", sffName.getValue());
return Optional.empty();
}
// Find the SFF-SF data plane locator for the SF pair
SffSfDataPlaneLocator sffSfDataPlaneLocator = sff.map(ServiceFunctionForwarder::getServiceFunctionDictionary).orElse(Collections.emptyList()).stream().filter(serviceFunctionDictionary -> serviceFunctionDictionary.getName().equals(sfName)).findAny().map(ServiceFunctionDictionary::getSffSfDataPlaneLocator).orElse(null);
if (sffSfDataPlaneLocator == null) {
LOG.warn("getHopSfInterface SFF [{}] has not dictionary for SF [{}]", sffName.getValue(), sffName.getValue());
return Optional.empty();
}
// Get the forward or reverse locator name as appropriate if any,
// otherwise default to non directional locator
SffDataPlaneLocatorName sffDataPlaneLocatorName = null;
if (useForwardDpl) {
sffDataPlaneLocatorName = sffSfDataPlaneLocator.getSffForwardDplName();
} else {
sffDataPlaneLocatorName = sffSfDataPlaneLocator.getSffReverseDplName();
}
if (sffDataPlaneLocatorName == null) {
sffDataPlaneLocatorName = sffSfDataPlaneLocator.getSffDplName();
}
// Get the interface name value of the locator with such name
SffDataPlaneLocatorName locatorName = sffDataPlaneLocatorName;
Optional<String> interfaceName = sff.map(ServiceFunctionForwarderBase::getSffDataPlaneLocator).orElse(Collections.emptyList()).stream().filter(sffDataPlaneLocator -> sffDataPlaneLocator.getName().equals(locatorName)).findAny().map(SffDataPlaneLocator::getDataPlaneLocator).filter(dataPlaneLocator -> dataPlaneLocator.getLocatorType() instanceof LogicalInterface).map(dataPlaneLocator -> (LogicalInterfaceLocator) dataPlaneLocator.getLocatorType()).map(LogicalInterfaceLocator::getInterfaceName);
return interfaceName;
}
use of org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.rev140701.service.function.forwarders.service.function.forwarder.service.function.dictionary.SffSfDataPlaneLocator in project netvirt by opendaylight.
the class PortPairGroupTranslator method removePortPairFromServiceFunctionForwarder.
public static ServiceFunctionForwarder removePortPairFromServiceFunctionForwarder(ServiceFunctionForwarder serviceFunctionForwarder, PortPair deletedPortPair) {
Preconditions.checkNotNull(deletedPortPair, "Port pair must not be null");
String portPairName = deletedPortPair.getName();
ServiceFunctionForwarderBuilder sffBuilder = new ServiceFunctionForwarderBuilder(serviceFunctionForwarder);
List<ServiceFunctionDictionary> serviceFunctionDictionaryList = sffBuilder.getServiceFunctionDictionary();
if (serviceFunctionDictionaryList == null) {
LOG.debug("SF dictionary is empty");
return serviceFunctionForwarder;
}
ServiceFunctionDictionary serviceFunctionDictionary = serviceFunctionDictionaryList.stream().filter(sfDictionary -> sfDictionary.getName().getValue().equals(portPairName)).findFirst().orElse(null);
if (serviceFunctionDictionary == null) {
LOG.debug("SFF dictionary entry for port pair {} not found", portPairName);
return serviceFunctionForwarder;
}
SffSfDataPlaneLocator sffSfDataPlaneLocator = serviceFunctionDictionary.getSffSfDataPlaneLocator();
if (sffSfDataPlaneLocator != null) {
List<SffDataPlaneLocatorName> locators = Arrays.asList(sffSfDataPlaneLocator.getSffDplName(), sffSfDataPlaneLocator.getSffForwardDplName(), sffSfDataPlaneLocator.getSffReverseDplName());
List<SffDataPlaneLocator> sffDplList = sffBuilder.getSffDataPlaneLocator();
if (sffDplList != null) {
sffDplList.stream().filter(sffDataPlaneLocator -> locators.contains(sffDataPlaneLocator.getName())).map(sffDplList::remove);
}
}
serviceFunctionDictionaryList.remove(serviceFunctionDictionary);
return sffBuilder.build();
}
Aggregations