use of org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sfc.rev140701.service.function.chain.grouping.ServiceFunctionChain in project netvirt by opendaylight.
the class PortChainTranslator method buildServiceFunctionPath.
public static ServiceFunctionPath buildServiceFunctionPath(ServiceFunctionChain sfc) {
Preconditions.checkNotNull(sfc, "Service Function Chain must not be null");
ServiceFunctionPathBuilder sfpBuilder = new ServiceFunctionPathBuilder();
// Set the name
sfpBuilder.setName(new SfpName(SFP_NAME_PREFIX + sfc.getName().getValue()));
sfpBuilder.setSymmetric(sfc.isSymmetric());
// Set related SFC name
sfpBuilder.setServiceChainName(sfc.getName());
return sfpBuilder.build();
}
use of org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sfc.rev140701.service.function.chain.grouping.ServiceFunctionChain 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.sfc.rev140701.service.function.chain.grouping.ServiceFunctionChain in project netvirt by opendaylight.
the class PortChainTranslator method buildServiceFunctionChain.
public static ServiceFunctionChain buildServiceFunctionChain(PortChain portChain, List<ServiceFunction> sfList) {
ServiceFunctionChainBuilder sfcBuilder = new ServiceFunctionChainBuilder();
sfcBuilder.setName(new SfcName(portChain.getName()));
sfcBuilder.setKey(new ServiceFunctionChainKey(sfcBuilder.getName()));
// By default set it to false. If user specify it in chain parameters, it
// will be overridden.
sfcBuilder.setSymmetric(false);
// Set service functions
List<SfcServiceFunction> sfcSfList = new ArrayList<>();
for (ServiceFunction sf : sfList) {
SfcServiceFunctionBuilder sfcSfBuilder = new SfcServiceFunctionBuilder();
sfcSfBuilder.setName(sf.getName().getValue());
sfcSfBuilder.setType(sf.getType());
sfcSfBuilder.setKey(new SfcServiceFunctionKey(sfcSfBuilder.getName()));
// NOTE: no explicit order is set.
sfcSfList.add(sfcSfBuilder.build());
}
List<ChainParameters> cpList = portChain.getChainParameters();
if (cpList != null && !cpList.isEmpty()) {
for (ChainParameters cp : cpList) {
if (cp.getChainParameter().equals(SYMMETRIC_PARAM)) {
// Override the symmetric default value.
sfcBuilder.setSymmetric(Boolean.valueOf(cp.getChainParameterValue()));
break;
}
}
}
sfcBuilder.setSfcServiceFunction(sfcSfList);
return sfcBuilder.build();
}
Aggregations