import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.rsp.rev140701.rendered.service.paths.RenderedServicePathKey;
import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.rsp.rev140701.rendered.service.paths.rendered.service.path.RenderedServicePathHop;
import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sf.rev140701.ServiceFunctions;
+import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sf.rev140701.service.function.entry.SfDataPlaneLocator;
import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sf.rev140701.service.functions.ServiceFunction;
import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sf.rev140701.service.functions.ServiceFunctionKey;
import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.rev140701.service.function.forwarders.ServiceFunctionForwarder;
import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sfp.rev140701.ServiceFunctionPaths;
import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sfp.rev140701.service.function.paths.ServiceFunctionPath;
import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sl.rev140701.data.plane.locator.locator.type.Ip;
+import org.opendaylight.yang.gen.v1.urn.ericsson.params.xml.ns.yang.sfc.sf.ovs.rev160107.SfDplOvsAugmentation;
+import org.opendaylight.yang.gen.v1.urn.ericsson.params.xml.ns.yang.sfc.sf.ovs.rev160107.connected.port.OvsPort;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev150317.AccessLists;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev150317.access.lists.Acl;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev150317.access.lists.acl.AccessListEntries;
return sfDplName;
}
+ public String getSfDplPortId(ServiceFunction serviceFunction) {
+ String sfDplName = null;
+ if (serviceFunction != null &&
+ serviceFunction.getSfDataPlaneLocator() != null &&
+ serviceFunction.getSfDataPlaneLocator().get(0) != null &&
+ serviceFunction.getSfDataPlaneLocator().get(0).getAugmentation(SfDplOvsAugmentation.class) != null ) {
+
+ SfDplOvsAugmentation sfDplOvsAugmentation =
+ serviceFunction.getSfDataPlaneLocator().get(0).getAugmentation(SfDplOvsAugmentation.class);
+ if (sfDplOvsAugmentation.getOvsPort() != null) {
+ sfDplName = sfDplOvsAugmentation.getOvsPort().getPortId();
+ } else {
+ LOG.warn("getSfDplPortId: OvsPort is null");
+ }
+ } else {
+ LOG.warn("getSfDplPortId: ServiceFunction is null");
+ }
+
+ return sfDplName;
+ }
+
public Ip getSffIp(ServiceFunctionForwarder serviceFunctionForwarder) {
if (serviceFunctionForwarder != null &&
serviceFunctionForwarder.getSffDataPlaneLocator() != null &&
LOG.info("handleSff: last hop processing {} - {}",
bridgeNode.getNodeId().getValue(), serviceFunctionForwarder.getName().getValue());
short lastServiceindex = (short)((lastHop.getServiceIndex()).intValue() - 1);
- String sfDplName = sfcUtils.getSfDplName(serviceFunction);
- long sfOfPort = getSfPort(bridgeNode, sfDplName);
+ String sfDplPortName = sfcUtils.getSfDplPortId(serviceFunction);
+ long sfOfPort = getSfPort(bridgeNode, sfDplPortName);
// TODO: Coexistence: SFC flows should take this using new egressTable REST
sfcClassifierService.programEgressClassifier(dataPathId, vxGpeOfPort, rsp.getPathId(),
lastServiceindex, sfOfPort, 0, rsp.getName().getValue(), true);
Ip ip = sfcUtils.getSfIp(serviceFunction);
String sfIpAddr = String.valueOf(ip.getIp().getValue());
int sfIpPort = ip.getPort().getValue(); //GPE_PORT
- String sfDplName = sfcUtils.getSfDplName(serviceFunction);
- long sfOfPort = getSfPort(bridgeNode, sfDplName);
- String sfMac = getMacFromExternalIds(bridgeNode, sfDplName);
+ String sfDplPortName = sfcUtils.getSfDplPortId(serviceFunction);
+ long sfOfPort = getSfPort(bridgeNode, sfDplPortName);
+ String sfMac = getMacFromExternalIds(bridgeNode, sfDplPortName);
if (sfMac == null) {
- LOG.warn("handleSff: could not find mac for {} on {}", sfDplName, bridgeNode);
+ LOG.warn("handleSff: could not find mac for {} on {}", sfDplPortName, bridgeNode);
return;
}
//should be sffdplport, but they should all be the same 6633/4790
// TODO: Coexistence: SFC flows should take this using new sf dpl augmentation
if (addSfFlows == true) {
sfcClassifierService.program_sfEgress(dataPathId, sfIpPort, rsp.getName().getValue(), true);
- sfcClassifierService.program_sfIngress(dataPathId, sfIpPort, sfOfPort, sfIpAddr, sfDplName,
+ sfcClassifierService.program_sfIngress(dataPathId, sfIpPort, sfOfPort, sfIpAddr, sfDplPortName,
rsp.getName().getValue(), true);
}
sfcClassifierService.programStaticArpEntry(dataPathId, 0L, sfMac, sfIpAddr,
}
private boolean isSfOnBridge(Node bridgeNode, ServiceFunction serviceFunction) {
- String sfDplName = sfcUtils.getSfDplName(serviceFunction);
- long sfOfPort = getSfPort(bridgeNode, sfDplName);
+ String sfDplPortName = sfcUtils.getSfDplPortId(serviceFunction);
+ long sfOfPort = getSfPort(bridgeNode, sfDplPortName);
LOG.info("isSfOnBridge: {}: {}, sfOfPort: {}", bridgeNode.getNodeId().getValue(), sfOfPort != 0L, sfOfPort);
return sfOfPort != 0L;
}
private static final String SF2IP = "10.2.1.2";
private static final String SF1DPLNAME = "sf1";
private static final String SF2DPLNAME = "sf2";
+ private static final String SF1DPLPORTNAME = "tap-123456789ab";
// Use 192.168.50.70 when running against vagrant vm for workaround testing, eg. netvirtsfc-env.
// Use 192.168.1.129 (or whatever address is dhcp'ed) for tacker-vm.
// "192.168.50.70"; "127.0.0.1"; "192.168.1.129";
String sf1Ip = SF1IP;
String sff1Name = SFF1NAME;
String sf1DplName = SF1DPLNAME;
+ String sf1DplportName = SF1DPLPORTNAME;
int port = GPEUDPPORT;
ServiceFunctionBuilder serviceFunctionBuilder =
- serviceFunctionUtils.serviceFunctionBuilder(sf1Ip, port, sf1DplName, sff1Name, sf1Name);
+ serviceFunctionUtils.serviceFunctionBuilder(sf1Ip, port, sf1DplName, sf1DplportName,
+ sff1Name, sf1Name);
List<ServiceFunction> serviceFunctionList = serviceFunctionUtils.list(
new ArrayList<ServiceFunction>(), serviceFunctionBuilder);
Map<String, String> externalIds = Maps.newHashMap();
externalIds.put("attached-mac", "f6:00:00:0f:00:01");
- southboundUtils.addTerminationPoint(nodeInfo.bridgeNode, SF1DPLNAME, "internal", null, externalIds);
+ southboundUtils.addTerminationPoint(nodeInfo.bridgeNode, SF1DPLPORTNAME, "internal", null, externalIds);
externalIds.clear();
externalIds.put("attached-mac", "f6:00:00:0c:00:01");
southboundUtils.addTerminationPoint(nodeInfo.bridgeNode, "vm1", "internal");
southboundUtils.addTerminationPoint(nodeInfo.bridgeNode, "vm2", "internal");
InstanceIdentifier<TerminationPoint> tpIid =
- southboundUtils.createTerminationPointInstanceIdentifier(nodeInfo.bridgeNode, SFFDPL1NAME);
+ southboundUtils.createTerminationPointInstanceIdentifier(nodeInfo.bridgeNode, SF1DPLPORTNAME);
final NotifyingDataChangeListener portOperationalListener =
new NotifyingDataChangeListener(LogicalDatastoreType.OPERATIONAL, tpIid, waitList);
portOperationalListener.registerDataChangeListener(dataBroker);
//verifyFlow(nodeInfo.datapathId, flowId, Service.CLASSIFIER.getTable());
LOG.info("check for flows!!!!!!!!!!!!!");
- Thread.sleep(30000);
+ //Thread.sleep(30000);
InstanceIdentifier<Flow> flowIid = createFlowIid(nodeInfo.datapathId, flowId,
pipelineOrchestrator.getTable(Service.CLASSIFIER));
public class ServiceFunctionUtils extends AbstractUtils {
public SfDataPlaneLocatorBuilder sfDataPlaneLocatorBuilder(SfDataPlaneLocatorBuilder sfDataPlaneLocatorBuilder,
- String ip, int port, String dplName, String sffName) {
+ String ip, int port, String dplName,
+ String sf1DplPortName, String sffName) {
SfDplOvsAugmentationBuilder sfDplOvsAugmentationBuilder = new SfDplOvsAugmentationBuilder();
- OvsPortBuilder ovsPortBuilder = new OvsPortBuilder().setPortId(dplName);
+ OvsPortBuilder ovsPortBuilder = new OvsPortBuilder().setPortId(sf1DplPortName);
sfDplOvsAugmentationBuilder.setOvsPort(ovsPortBuilder.build());
return sfDataPlaneLocatorBuilder
}
public ServiceFunctionBuilder serviceFunctionBuilder(String sfIp, int port, String sf1DplName,
+ String sf1DplPortName,
String sffname, String sfName) {
SfDataPlaneLocatorBuilder sfDataPlaneLocator =
- sfDataPlaneLocatorBuilder(new SfDataPlaneLocatorBuilder(), sfIp, port, sf1DplName, sffname);
+ sfDataPlaneLocatorBuilder(new SfDataPlaneLocatorBuilder(), sfIp, port, sf1DplName,
+ sf1DplPortName, sffname);
List<SfDataPlaneLocator> sfDataPlaneLocatorList =
list(new ArrayList<SfDataPlaneLocator>(), sfDataPlaneLocator);
return serviceFunctionBuilder(