Bug 5354 - getPortNumberFromNode is not correctly calculating the port number from... 71/37071/1
authorSam Hague <shague@redhat.com>
Mon, 15 Feb 2016 17:46:52 +0000 (12:46 -0500)
committerSam Hague <shague@redhat.com>
Mon, 4 Apr 2016 13:37:15 +0000 (09:37 -0400)
Signed-off-by: Sam Hague <shague@redhat.com>
Change-Id: If1844e95560b0c2dee853b19e9e472b8fcab2915

openstack/net-virt-sfc/impl/src/main/config/default-config.xml
openstack/net-virt-sfc/impl/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/sfc/ISfcClassifierService.java
openstack/net-virt-sfc/impl/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/sfc/NetvirtSfcProvider.java
openstack/net-virt-sfc/impl/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/sfc/workaround/NetvirtSfcWorkaroundOF13Provider.java
openstack/net-virt-sfc/impl/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/sfc/workaround/services/SfcClassifierService.java
openstack/net-virt-sfc/impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/netvirt/sfc/rev141210/NetvirtSfcModule.java
openstack/net-virt-sfc/impl/src/main/yang/netvirt-sfc.yang
openstack/net-virt-sfc/it/src/test/java/org/opendaylight/ovsdb/openstack/netvirt/sfc/it/NetvirtSfcIT.java
openstack/net-virt-sfc/it/src/test/java/org/opendaylight/ovsdb/openstack/netvirt/sfc/it/utils/ServiceFunctionForwarderUtils.java
openstack/net-virt-sfc/it/src/test/java/org/opendaylight/ovsdb/openstack/netvirt/sfc/it/utils/ServiceFunctionUtils.java

index a794e579218c8e05d2352cad7e5c369af812b445..be75e03ac81f2e6cfc0fce9e81bc3aafab546504 100644 (file)
@@ -22,6 +22,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
           <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:netvirt:sfc">prefix:netvirt-sfc</type>
           <name>netvirt-sfc-default</name>
           <of13provider>workaround</of13provider>
+          <addsfflows>false</addsfflows>
           <broker>
             <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-broker-osgi-registry</type>
             <name>binding-osgi-broker</name>
index ce92080d6a29d847b1177df861c0b94737e93e03..74ae8997ce1dd19b5006661ddf92bde38a188cb3 100644 (file)
@@ -28,10 +28,10 @@ public interface ISfcClassifierService {
     void programEgressClassifierBypass(long dataPathId, long vxGpeOfPort, long nsp, short nsi,
                                        long sfOfPort, int tunnelId, String rspName, boolean write);
 
-    void program_sfEgress(long dataPathId, int dstPort, boolean write);
+    void program_sfEgress(long dataPathId, int dstPort, String rspName, boolean write);
 
     void program_sfIngress(long dataPathId, int dstPort, long sfOfPort,
-                           String ipAddress, String sfDplName, boolean write);
+                           String ipAddress, String sfDplName, String rspName, boolean write);
 
     void programStaticArpEntry(long dataPathId, long ofPort, String macAddressStr,
                                String ipAddress, String rspName, boolean write);
index 973596671d5aa61901624504ddeec98613a51b29..bc20f4bbc00c31a38d97e1eb940996f316ce4673 100644 (file)
@@ -31,6 +31,7 @@ public class NetvirtSfcProvider implements BindingAwareProvider, AutoCloseable {
     private NetvirtSfcAclListener aclListener;
     private NetvirtSfcClassifierListener classifierListener;
     private RspListener rspListener;
+    private Boolean addSfFlows;
 
     public void setOf13Provider(String of13Provider) {
         LOG.info("of13Provider is: {}", of13Provider);
@@ -64,7 +65,7 @@ public class NetvirtSfcProvider implements BindingAwareProvider, AutoCloseable {
         if (of13Provider.equals("standalone")) {
             provider = new NetvirtSfcStandaloneOF13Provider(dataBroker);
         } else {
-            provider = new NetvirtSfcWorkaroundOF13Provider(dataBroker, mdsalUtils, sfcUtils);
+            provider = new NetvirtSfcWorkaroundOF13Provider(dataBroker, mdsalUtils, sfcUtils, addSfFlows);
         }
         aclListener = new NetvirtSfcAclListener(provider, dataBroker);
         classifierListener = new NetvirtSfcClassifierListener(provider, dataBroker);
@@ -115,4 +116,9 @@ public class NetvirtSfcProvider implements BindingAwareProvider, AutoCloseable {
                 new String[] {AbstractServiceInstance.class.getName(),interfaceClassName},
                 properties, impl);
     }
+
+    public void setAddSfFlows(Boolean addSfFlows) {
+        LOG.info("setAddSfFlows: addSfFlows is {}", addSfFlows);
+        this.addSfFlows = addSfFlows;
+    }
 }
index 937494a85ea30544f57747df9d1ad1dba1d34304..3648f3bb33536ca446708574c9f207f854aea5f6 100644 (file)
@@ -63,8 +63,10 @@ public class NetvirtSfcWorkaroundOF13Provider implements INetvirtSfcOF13Provider
     private DataBroker dataBroker;
     private static final String VXGPE = "vxgpe";
     public static final String TUNNEL_ENDPOINT_KEY = "local_ip";
+    private Boolean addSfFlows;
 
-    public NetvirtSfcWorkaroundOF13Provider(final DataBroker dataBroker, MdsalUtils mdsalUtils, SfcUtils sfcUtils) {
+    public NetvirtSfcWorkaroundOF13Provider(final DataBroker dataBroker, MdsalUtils mdsalUtils,
+                                            SfcUtils sfcUtils, Boolean addSfFlows) {
         Preconditions.checkNotNull(dataBroker, "Input dataBroker cannot be NULL!");
         Preconditions.checkNotNull(mdsalUtils, "Input mdsalUtils cannot be NULL!");
         Preconditions.checkNotNull(sfcUtils, "Input sfcUtils cannot be NULL!");
@@ -72,6 +74,7 @@ public class NetvirtSfcWorkaroundOF13Provider implements INetvirtSfcOF13Provider
         this.dataBroker = dataBroker;
         this.mdsalUtils = mdsalUtils;
         this.sfcUtils = sfcUtils;
+        this.addSfFlows = addSfFlows;
     }
 
     public void setSfcClassifierService(ISfcClassifierService sfcClassifierService) {
@@ -251,16 +254,19 @@ public class NetvirtSfcWorkaroundOF13Provider implements INetvirtSfcOF13Provider
                 Ip ip = sfcUtils.getSfIp(serviceFunction);
                 nshHeader.setNshTunIpDst(ip.getIp().getIpv4Address());
                 nshHeader.setNshTunUdpPort(ip.getPort());
+                sfcClassifierService.programIngressClassifier(dataPathId, ruleName, matches,
+                        rsp.getPathId(), rsp.getStartingIndex(),
+                        nshHeader, 0, rsp.getName().getValue(), true);
             } else {
                 LOG.info("handleSff: sff and bridge are not the same: {} - {}, sending to first sff",
                         bridgeNode.getNodeId().getValue(), serviceFunctionForwarder.getName().getValue());
                 Ip ip = sfcUtils.getSffIp(serviceFunctionForwarder);
                 nshHeader.setNshTunIpDst(ip.getIp().getIpv4Address());
                 nshHeader.setNshTunUdpPort(ip.getPort());
+                sfcClassifierService.programIngressClassifier(dataPathId, ruleName, matches,
+                        rsp.getPathId(), rsp.getStartingIndex(),
+                        nshHeader, vxGpeOfPort, rsp.getName().getValue(), true);
             }
-            sfcClassifierService.programIngressClassifier(dataPathId, ruleName, matches,
-                    rsp.getPathId(), rsp.getStartingIndex(),
-                    nshHeader, vxGpeOfPort, rsp.getName().getValue(), true);
         } else if (hop == lastHop) {
             LOG.info("handleSff: last hop processing {} - {}",
                     bridgeNode.getNodeId().getValue(), serviceFunctionForwarder.getName().getValue());
@@ -298,8 +304,11 @@ public class NetvirtSfcWorkaroundOF13Provider implements INetvirtSfcOF13Provider
             }
             //should be sffdplport, but they should all be the same 6633/4790
             // TODO: Coexistence: SFC flows should take this using new sf dpl augmentation
-            //sfcClassifierService.program_sfEgress(dataPathId, sfIpPort, true);
-            //sfcClassifierService.program_sfIngress(dataPathId, sfIpPort, sfOfPort, sfIpAddr, sfDplName, true);
+            if (addSfFlows == true) {
+                sfcClassifierService.program_sfEgress(dataPathId, sfIpPort, rsp.getName().getValue(), true);
+                sfcClassifierService.program_sfIngress(dataPathId, sfIpPort, sfOfPort, sfIpAddr, sfDplName,
+                        rsp.getName().getValue(), true);
+            }
             sfcClassifierService.programStaticArpEntry(dataPathId, 0L, sfMac, sfIpAddr,
                     rsp.getName().getValue(), true);
         } else {
index c7f5d32e957b0f8550b3cab2faae81d4331cc8f0..9c13be759ddaa9e48c426b53d7c789ee367ab5aa 100644 (file)
@@ -149,10 +149,17 @@ public class SfcClassifierService extends AbstractServiceInstance implements Con
 
             getNshAction(nshHeader, actionList);
 
-            ab.setAction(ActionUtils.outputAction(FlowUtils.getNodeConnectorId(dataPathId, vxGpeOfPort)));
-            ab.setOrder(actionList.size());
-            ab.setKey(new ActionKey(actionList.size()));
-            actionList.add(ab.build());
+            if (vxGpeOfPort != 0) {
+                ab.setAction(ActionUtils.outputAction(FlowUtils.getNodeConnectorId(dataPathId, vxGpeOfPort)));
+                ab.setOrder(actionList.size());
+                ab.setKey(new ActionKey(actionList.size()));
+                actionList.add(ab.build());
+            } else {
+                ab.setAction(ActionUtils.nxResubmitAction(null, Service.CLASSIFIER.getTable()));
+                ab.setOrder(actionList.size());
+                ab.setKey(new ActionKey(actionList.size()));
+                actionList.add(ab.build());
+            }
 
             ApplyActionsBuilder aab = new ApplyActionsBuilder();
             aab.setAction(actionList);
@@ -328,7 +335,7 @@ public class SfcClassifierService extends AbstractServiceInstance implements Con
 
     // packet from sf to sff that need to go out local
     @Override
-    public void program_sfEgress(long dataPathId, int dstPort, boolean write) {
+    public void program_sfEgress(long dataPathId, int dstPort, String rspName, boolean write) {
         NodeBuilder nodeBuilder = FlowUtils.createNodeBuilder(dataPathId);
         FlowBuilder flowBuilder = new FlowBuilder();
         String flowName = FlowNames.getSfEgress(dstPort);
@@ -352,16 +359,16 @@ public class SfcClassifierService extends AbstractServiceInstance implements Con
 
             isb.setInstruction(instructions);
             flowBuilder.setInstructions(isb.build());
-            writeFlow(flowBuilder, nodeBuilder);
+            writeFlow(flowBuilder, nodeBuilder, rspName, FlowID.FLOW_SFEGRESS);
         } else {
-            removeFlow(flowBuilder, nodeBuilder);
+            removeFlow(flowBuilder, nodeBuilder, rspName, FlowID.FLOW_SFEGRESS);
         }
     }
 
     // looped back sff to sf packets
     @Override
     public void program_sfIngress(long dataPathId, int dstPort, long sfOfPort,
-                                  String ipAddress, String sfDplName, boolean write) {
+                                  String ipAddress, String sfDplName, String rspName, boolean write) {
         NodeBuilder nodeBuilder = FlowUtils.createNodeBuilder(dataPathId);
         FlowBuilder flowBuilder = new FlowBuilder();
         String flowName = FlowNames.getSfIngress(dstPort, ipAddress);
@@ -386,9 +393,9 @@ public class SfcClassifierService extends AbstractServiceInstance implements Con
 
             isb.setInstruction(instructions);
             flowBuilder.setInstructions(isb.build());
-            writeFlow(flowBuilder, nodeBuilder);
+            writeFlow(flowBuilder, nodeBuilder, rspName, FlowID.FLOW_SFINGRESS);
         } else {
-            removeFlow(flowBuilder, nodeBuilder);
+            removeFlow(flowBuilder, nodeBuilder, rspName, FlowID.FLOW_SFINGRESS);
         }
     }
 
@@ -509,7 +516,7 @@ public class SfcClassifierService extends AbstractServiceInstance implements Con
     }
 
     private static FlowID flowSet[] = {FlowID.FLOW_INGRESSCLASS, FlowID.FLOW_EGRESSCLASS,
-            FlowID.FLOW_EGRESSCLASSBYPASS, FlowID.FLOW_SFARP};
+            FlowID.FLOW_EGRESSCLASSBYPASS, FlowID.FLOW_SFARP, FlowID.FLOW_SFINGRESS, FlowID.FLOW_SFEGRESS};
 
     @Override
     public void clearFlows(DataBroker dataBroker, String rspName) {
index 34dfd96c547b3cbc0cd9c91212b70b39500754a9..0253f93b3f586b334bf1a819cc78dbc3beba8d78 100644 (file)
@@ -38,6 +38,7 @@ public class NetvirtSfcModule extends AbstractNetvirtSfcModule {
         LOG.info("Netvirt SFC module initialization.");
         NetvirtSfcProvider sfcProvider = new NetvirtSfcProvider(bundleContext);
         sfcProvider.setOf13Provider(getOf13provider());
+        sfcProvider.setAddSfFlows(getAddsfflows());
         getBrokerDependency().registerProvider(sfcProvider);
         return sfcProvider;
     }
index 2f5d016da2cb08e2412da489d337465083113c1a..6f70144f27ca9d96941962088d5dfeb14d0ca588 100644 (file)
@@ -34,6 +34,10 @@ module netvirt-sfc {
             leaf of13provider {
                 type string;
             }
+
+            leaf addsfflows {
+                type boolean;
+            }
         }
     }
 }
index 07d40734f225073c668395d19dcfe01aabc52593..ddb79d95706f66e0001f7994f13fa0b9bb6077e7 100644 (file)
@@ -117,6 +117,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netvirt.
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netvirt.sfc.classifier.rev150105.classifiers.classifier.sffs.SffBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netvirt.sfc.rev150105.Sfc;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netvirt.sfc.rev150105.SfcBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeRef;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ControllerEntry;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ConnectionInfo;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
@@ -521,6 +523,10 @@ public class NetvirtSfcIT extends AbstractMdsalTestBase {
     }
 
     private ServiceFunctionForwardersBuilder serviceFunctionForwardersBuilder() {
+        return serviceFunctionForwardersBuilder(null);
+    }
+
+    private ServiceFunctionForwardersBuilder serviceFunctionForwardersBuilder(OvsdbNodeRef ovsdbNodeRef) {
         String sf1Name = SF1NAME;
         String sf1Ip = SF1IP;
         String sf1DplName = SF1DPLNAME;
@@ -533,7 +539,8 @@ public class NetvirtSfcIT extends AbstractMdsalTestBase {
 
         ServiceFunctionForwarderBuilder serviceFunctionForwarderBuilder =
                 serviceFunctionForwarderUtils.serviceFunctionForwarderBuilder(
-                        sff1Name, sff1Ip, port, sffDpl1Name, sf1Ip, sn1Name, bridge1Name, sf1Name, sf1DplName);
+                        sff1Name, sff1Ip, port, sffDpl1Name, sf1Ip, sn1Name, bridge1Name, sf1Name, sf1DplName,
+                        ovsdbNodeRef);
         List<ServiceFunctionForwarder>  serviceFunctionForwarderList = serviceFunctionForwarderUtils.list(
                 new ArrayList<ServiceFunctionForwarder>(), serviceFunctionForwarderBuilder);
 
@@ -684,8 +691,14 @@ public class NetvirtSfcIT extends AbstractMdsalTestBase {
                 new NotifyingDataChangeListener(LogicalDatastoreType.OPERATIONAL, rspIid, waitList);
         rspOperationalListener.registerDataChangeListener(dataBroker);
 
+        OvsdbBridgeAugmentation bridgeAugmentation = southbound.extractBridgeAugmentation(nodeInfo.bridgeNode);
+        OvsdbNodeRef ovsdbNodeRef = null;
+        if (bridgeAugmentation != null) {
+            ovsdbNodeRef = bridgeAugmentation.getManagedBy();
+        }
+
         testModelPut(serviceFunctionsBuilder(), ServiceFunctions.class);
-        testModelPut(serviceFunctionForwardersBuilder(), ServiceFunctionForwarders.class);
+        testModelPut(serviceFunctionForwardersBuilder(ovsdbNodeRef), ServiceFunctionForwarders.class);
         testModelPut(serviceFunctionChainsBuilder(), ServiceFunctionChains.class);
         testModelPut(serviceFunctionPathsBuilder(), ServiceFunctionPaths.class);
 
@@ -716,6 +729,11 @@ public class NetvirtSfcIT extends AbstractMdsalTestBase {
         verifyFlow(nodeInfo.datapathId, flowId, Service.CLASSIFIER);
         flowId = FlowNames.getArpResponder(SF1IP);
         verifyFlow(nodeInfo.datapathId, flowId, Service.ARP_RESPONDER);
+        // Only verify these flows if NetVirt adds them and not SFC
+        //flowId = FlowNames.getSfEgress(GPEUDPPORT);
+        //verifyFlow(nodeInfo.datapathId, flowId, Service.SFC_CLASSIFIER);
+        //flowId = FlowNames.getSfIngress(GPEUDPPORT, SF1IP);
+        //verifyFlow(nodeInfo.datapathId, flowId, Service.CLASSIFIER.getTable());
 
         LOG.info("check for flows!!!!!!!!!!!!!");
         Thread.sleep(30000);
index 3aab4f555a9b9211dbbd7a2e3799eb51ded8e8a4..e6ef712f40e29bc4e980da5ee816762747522459 100644 (file)
@@ -20,7 +20,10 @@ import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.ovs.rev
 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.ovs.rev140701.SffOvsBridgeAugmentationBuilder;
 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.ovs.rev140701.SffOvsLocatorOptionsAugmentation;
 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.ovs.rev140701.SffOvsLocatorOptionsAugmentationBuilder;
+import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.ovs.rev140701.SffOvsNodeAugmentation;
+import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.ovs.rev140701.SffOvsNodeAugmentationBuilder;
 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.ovs.rev140701.bridge.OvsBridgeBuilder;
+import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.ovs.rev140701.node.OvsNodeBuilder;
 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.ovs.rev140701.options.OvsOptionsBuilder;
 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.rev140701.ServiceFunctionForwardersBuilder;
 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.rev140701.service.function.forwarders.ServiceFunctionForwarder;
@@ -31,6 +34,9 @@ import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.rev1407
 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.rev140701.service.function.forwarders.service.function.forwarder.SffDataPlaneLocatorBuilder;
 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.rev140701.service.function.forwarders.service.function.forwarder.service.function.dictionary.SffSfDataPlaneLocatorBuilder;
 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.rev140701.service.function.forwarders.service.function.forwarder.sff.data.plane.locator.DataPlaneLocatorBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeRef;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 
 public class ServiceFunctionForwarderUtils extends AbstractUtils {
     public OvsOptionsBuilder ovsOptionsBuilder(OvsOptionsBuilder ovsOptionsBuilder, int port) {
@@ -87,16 +93,23 @@ public class ServiceFunctionForwarderUtils extends AbstractUtils {
             ServiceFunctionForwarderBuilder serviceFunctionForwarderBuilder,
             String sffName, String serviceNodeName, String bridgeName,
             List<SffDataPlaneLocator> sffDataPlaneLocatorList,
-            List<ServiceFunctionDictionary> serviceFunctionDictionaryList) {
+            List<ServiceFunctionDictionary> serviceFunctionDictionaryList,
+            OvsdbNodeRef ovsdbNodeRef) {
 
         SffOvsBridgeAugmentationBuilder sffOvsBridgeAugmentationBuilder = new SffOvsBridgeAugmentationBuilder();
         sffOvsBridgeAugmentationBuilder.setOvsBridge(ovsBridgeBuilder(new OvsBridgeBuilder(), bridgeName).build());
 
+        SffOvsNodeAugmentationBuilder sffOvsNodeAugmentationBuilder = new SffOvsNodeAugmentationBuilder();
+        OvsNodeBuilder ovsNodeBuilder = new OvsNodeBuilder();
+        ovsNodeBuilder.setNodeId(ovsdbNodeRef);
+        sffOvsNodeAugmentationBuilder.setOvsNode(ovsNodeBuilder.build());
+
         return serviceFunctionForwarderBuilder
                 .setName(new SffName(sffName))
                 .setServiceNode(new SnName(serviceNodeName))
                 .setServiceFunctionDictionary(serviceFunctionDictionaryList)
                 .setSffDataPlaneLocator(sffDataPlaneLocatorList)
+                .addAugmentation(SffOvsNodeAugmentation.class, sffOvsNodeAugmentationBuilder.build())
                 .addAugmentation(SffOvsBridgeAugmentation.class, sffOvsBridgeAugmentationBuilder.build());
     }
 
@@ -108,7 +121,8 @@ public class ServiceFunctionForwarderUtils extends AbstractUtils {
 
     public ServiceFunctionForwarderBuilder serviceFunctionForwarderBuilder(
             String sffName, String sffIp, int port, String sffDplName,
-            String sfIp, String snName, String bridgeName, String sfName, String sfDplName) {
+            String sfIp, String snName, String bridgeName, String sfName, String sfDplName,
+            OvsdbNodeRef ovsdbNodeRef) {
 
         DataPlaneLocatorBuilder dataPlaneLocatorBuilder =
                 dataPlaneLocatorBuilder(new DataPlaneLocatorBuilder(), sffIp, port);
@@ -128,7 +142,7 @@ public class ServiceFunctionForwarderUtils extends AbstractUtils {
         ServiceFunctionForwarderBuilder serviceFunctionForwarderBuilder =
                 serviceFunctionForwarderBuilder(
                         new ServiceFunctionForwarderBuilder(), sffName, snName, bridgeName,
-                        sffDataPlaneLocatorList, serviceFunctionDictionaryList);
+                        sffDataPlaneLocatorList, serviceFunctionDictionaryList, ovsdbNodeRef);
         return serviceFunctionForwarderBuilder;
     }
 }
index 98583e3aa8df6824791b6d9a0a7ac0a601055077..438836fca4c09eed21c8889ef3afba6d51f44330 100644 (file)
@@ -21,16 +21,24 @@ import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sf.rev14070
 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.ServiceFunctionBuilder;
 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sl.rev140701.VxlanGpe;
+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.SfDplOvsAugmentationBuilder;
+import org.opendaylight.yang.gen.v1.urn.ericsson.params.xml.ns.yang.sfc.sf.ovs.rev160107.connected.port.OvsPortBuilder;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
 
 public class ServiceFunctionUtils extends AbstractUtils {
     public SfDataPlaneLocatorBuilder sfDataPlaneLocatorBuilder(SfDataPlaneLocatorBuilder sfDataPlaneLocatorBuilder,
                                                                String ip, int port, String dplName, String sffName) {
+        SfDplOvsAugmentationBuilder sfDplOvsAugmentationBuilder = new SfDplOvsAugmentationBuilder();
+        OvsPortBuilder ovsPortBuilder = new OvsPortBuilder().setPortId(dplName);
+        sfDplOvsAugmentationBuilder.setOvsPort(ovsPortBuilder.build());
+
         return sfDataPlaneLocatorBuilder
+                .addAugmentation(SfDplOvsAugmentation.class, sfDplOvsAugmentationBuilder.build())
                 .setLocatorType(ipBuilder(ip, port).build())
-                .setName(new SfDataPlaneLocatorName(dplName))
+                .setName(SfDataPlaneLocatorName.getDefaultInstance(dplName))
                 .setTransport(VxlanGpe.class)
-                .setServiceFunctionForwarder(new SffName(sffName));
+                .setServiceFunctionForwarder(SffName.getDefaultInstance(sffName));
     }
 
     public ServiceFunctionBuilder serviceFunctionBuilder(ServiceFunctionBuilder serviceFunctionBuilder,