use of org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sf.rev140701.service.function.base.SfDataPlaneLocator in project netvirt by opendaylight.
the class PortPairTranslator method buildServiceFunction.
@Nonnull
public static ServiceFunction buildServiceFunction(PortPair portPair, PortPairGroup portPairGroup) {
Preconditions.checkNotNull(portPair, "Port pair must not be null");
Preconditions.checkNotNull(portPairGroup, "Port pair group must not be null");
ServiceFunctionBuilder serviceFunctionBuilder = new ServiceFunctionBuilder();
// Set SF name and tenant-id
serviceFunctionBuilder.setName(new SfName(portPair.getName()));
serviceFunctionBuilder.setTenantId(new TenantId(portPair.getTenantId().getValue()));
// Set SF Type. Setting it to PortPairGroup Type, this will be overridden if user pass
// it through service_function_params
serviceFunctionBuilder.setType(SftTypeName.getDefaultInstance(portPairGroup.getName()));
// If user pass specific param using service_function_parameters, set/override it accordingly
Class transportTypeClass = null;
List<ServiceFunctionParameters> sfParams = portPair.getServiceFunctionParameters();
if (sfParams != null) {
for (ServiceFunctionParameters sfParam : sfParams) {
// There is by default type set to port pair group name, override it if user pass it specific type
if (sfParam.getServiceFunctionParameter().equals(SF_TYPE_PARAM)) {
serviceFunctionBuilder.setType(new SftTypeName(sfParam.getServiceFunctionParameterValue()));
}
if (sfParam.getServiceFunctionParameter().equals(DPL_TRANSPORT_PARAM)) {
transportTypeClass = DPL_TRANSPORT_TYPE.get(sfParam.getServiceFunctionParameterValue());
}
}
}
// Build forward DPL
SfDataPlaneLocatorBuilder sfForwardDplBuilder = new SfDataPlaneLocatorBuilder();
sfForwardDplBuilder.setName(new SfDataPlaneLocatorName(portPair.getName() + DPL_INGRESS_SUFFIX));
sfForwardDplBuilder.setTransport(transportTypeClass == null ? Mac.class : transportTypeClass);
sfForwardDplBuilder.setServiceFunctionForwarder(new SffName(SfcMdsalHelper.NETVIRT_LOGICAL_SFF_NAME));
String forwardPort = portPair.getIngress().getValue();
LogicalInterface forwardInterface = new LogicalInterfaceBuilder().setInterfaceName(forwardPort).build();
sfForwardDplBuilder.setLocatorType(forwardInterface);
// Build reverse DPL
SfDataPlaneLocatorBuilder sfReverseDplBuilder = new SfDataPlaneLocatorBuilder();
sfReverseDplBuilder.setName(new SfDataPlaneLocatorName(portPair.getName() + DPL_EGRESS_SUFFIX));
sfReverseDplBuilder.setTransport(transportTypeClass == null ? Mac.class : transportTypeClass);
sfReverseDplBuilder.setServiceFunctionForwarder(new SffName(SfcMdsalHelper.NETVIRT_LOGICAL_SFF_NAME));
String reversePort = portPair.getEgress().getValue();
LogicalInterface reverseInterface = new LogicalInterfaceBuilder().setInterfaceName(reversePort).build();
sfReverseDplBuilder.setLocatorType(reverseInterface);
// Set all data plane locator
List<SfDataPlaneLocator> sfDataPlaneLocatorList = new ArrayList<>();
sfDataPlaneLocatorList.add(sfForwardDplBuilder.build());
sfDataPlaneLocatorList.add(sfReverseDplBuilder.build());
serviceFunctionBuilder.setSfDataPlaneLocator(sfDataPlaneLocatorList);
return serviceFunctionBuilder.build();
}
Aggregations