import org.opendaylight.ovsdb.utils.mdsal.utils.MdsalUtils;
import org.opendaylight.sfc.provider.api.SfcProviderAclAPI;
import org.opendaylight.sfc.provider.api.SfcProviderRenderedPathAPI;
+import org.opendaylight.sfc.provider.api.SfcProviderServiceForwarderAPI;
import org.opendaylight.sfc.provider.api.SfcProviderServiceFunctionAPI;
import org.opendaylight.sfc.provider.api.SfcProviderServicePathAPI;
import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.common.rev151017.RspName;
import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.common.rev151017.SfName;
+import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.common.rev151017.SffName;
import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.rsp.rev140701.RenderedServicePaths;
import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.rsp.rev140701.rendered.service.path.first.hop.info.RenderedServicePathFirstHop;
import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.rsp.rev140701.rendered.service.paths.RenderedServicePath;
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.sff.rev140701.service.function.forwarders.service.function.forwarder.SffDataPlaneLocator;
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;
}
public Ip getSffIp(ServiceFunctionForwarder serviceFunctionForwarder) {
- if (serviceFunctionForwarder == null) {
- LOG.info("getSfIp: ServicefunctionForwarder is null");
+ if (serviceFunctionForwarder != null &&
+ serviceFunctionForwarder.getSffDataPlaneLocator() != null &&
+ serviceFunctionForwarder.getSffDataPlaneLocator().get(0) != null &&
+ serviceFunctionForwarder.getSffDataPlaneLocator().get(0).getDataPlaneLocator() != null) {
+ return (Ip)serviceFunctionForwarder.getSffDataPlaneLocator().get(0)
+ .getDataPlaneLocator().getLocatorType();
+ } else {
+ LOG.info("getSffIp: ServiceFunctionForwarder is null");
return null;
}
+ }
- return (Ip)serviceFunctionForwarder.getSffDataPlaneLocator().get(0).getDataPlaneLocator().getLocatorType();
+ public Ip getSffIp(SffName sffName) {
+ ServiceFunctionForwarder serviceFunctionForwarder =
+ SfcProviderServiceForwarderAPI.readServiceFunctionForwarder(sffName);
+ return getSffIp(serviceFunctionForwarder);
}
public RenderedServicePathHop getFirstHop(RenderedServicePath rsp) {
NshUtils nshHeader = new NshUtils();
nshHeader.setNshNsp(rsp.getPathId());
nshHeader.setNshNsi(firstHop.getServiceIndex());
+ Ip sffIp = sfcUtils.getSffIp(lastHop.getServiceFunctionForwarder());
+ nshHeader.setNshMetaC1(NshUtils.convertIpAddressToLong(sffIp.getIp().getIpv4Address()));
if (isSffOnBridge(bridgeNode, serviceFunctionForwarder)) {
LOG.info("handleSff: sff and bridge are the same: {} - {}, skipping first sff",
bridgeNode.getNodeId().getValue(), serviceFunctionForwarder.getName().getValue());