use of org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.rev140701.service.function.forwarders.ServiceFunctionForwarder in project netvirt by opendaylight.
the class NeutronPortChainListener method processPortChain.
private void processPortChain(PortChain newPortChain) {
// List of Port Pair Group attached to the Port Chain
List<PortPairGroup> portPairGroupList = new ArrayList<>();
// Port Pair Group and associated Port Pair
Map<Uuid, List<PortPair>> groupPortPairsList = new HashMap<>();
List<ServiceFunction> portChainServiceFunctionList = new ArrayList<>();
// Read chain related port pair group from neutron data store
for (Uuid ppgUuid : newPortChain.getPortPairGroups()) {
PortPairGroup ppg = neutronMdsalHelper.getNeutronPortPairGroup(ppgUuid);
if (ppg != null) {
List<PortPair> portPairList = new ArrayList<>();
portPairGroupList.add(ppg);
for (Uuid ppUuid : ppg.getPortPairs()) {
PortPair pp = neutronMdsalHelper.getNeutronPortPair(ppUuid);
if (pp == null) {
LOG.error("Port pair {} does not exist in the neutron data store", ppUuid);
return;
}
portPairList.add(pp);
}
groupPortPairsList.put(ppgUuid, portPairList);
}
}
// For each port pair group
for (PortPairGroup ppg : portPairGroupList) {
List<PortPair> portPairList = groupPortPairsList.get(ppg.getUuid());
// Generate all the SF and write it to SFC data store
for (PortPair portPair : portPairList) {
// Build the service function for the given port pair.
ServiceFunction serviceFunction = PortPairTranslator.buildServiceFunction(portPair, ppg);
portChainServiceFunctionList.add(serviceFunction);
// Write the Service Function to SFC data store.
LOG.info("Add Service Function {} for Port Pair {}", serviceFunction, portPair);
sfcMdsalHelper.addServiceFunction(serviceFunction);
}
// Build the SFF Builder from port pair group
ServiceFunctionForwarder serviceFunctionForwarder;
serviceFunctionForwarder = PortPairGroupTranslator.buildServiceFunctionForwarder(ppg, portPairList);
// Send SFF create request
LOG.info("Update Service Function Forwarder with {} for Port Pair Group {}", serviceFunctionForwarder, ppg);
sfcMdsalHelper.updateServiceFunctionForwarder(serviceFunctionForwarder);
}
// Build Service Function Chain Builder
ServiceFunctionChain sfc = PortChainTranslator.buildServiceFunctionChain(newPortChain, portChainServiceFunctionList);
// Write SFC to data store
if (sfc == null) {
LOG.warn("Service Function Chain building failed for Port Chain {}", newPortChain);
return;
}
LOG.info("Add service function chain {}", sfc);
sfcMdsalHelper.addServiceFunctionChain(sfc);
// Build Service Function Path Builder
ServiceFunctionPath sfp = PortChainTranslator.buildServiceFunctionPath(sfc);
// Write SFP to data store
LOG.info("Add service function path {}", sfp);
sfcMdsalHelper.addServiceFunctionPath(sfp);
// The RSP will automatically be created from the SFP added above.
// Add ACLs from flow classifiers
processFlowClassifiers(newPortChain, newPortChain.getFlowClassifiers(), sfp.getName().getValue());
}
use of org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.rev140701.service.function.forwarders.ServiceFunctionForwarder 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