Use dpl portId 76/37676/1
authorSam Hague <shague@redhat.com>
Thu, 14 Apr 2016 20:51:23 +0000 (16:51 -0400)
committerSam Hague <shague@redhat.com>
Fri, 15 Apr 2016 16:31:12 +0000 (12:31 -0400)
Change-Id: Ib5418ca31a4e6f696c47230016fcb59eed97726d
Signed-off-by: Sam Hague <shague@redhat.com>
openstack/net-virt-sfc/impl/src/main/java/org/opendaylight/netvirt/openstack/netvirt/sfc/SfcUtils.java
openstack/net-virt-sfc/impl/src/main/java/org/opendaylight/netvirt/openstack/netvirt/sfc/workaround/NetvirtSfcWorkaroundOF13Provider.java
openstack/net-virt-sfc/it/src/test/java/org/opendaylight/netvirt/openstack/netvirt/sfc/it/NetvirtSfcIT.java
openstack/net-virt-sfc/it/src/test/java/org/opendaylight/netvirt/openstack/netvirt/sfc/it/utils/ServiceFunctionUtils.java

index 857f49b3cc06c50b46b52c108243185d8412e097..e65d80739109e6354cf6dfe5089140e17262ae18 100644 (file)
@@ -22,12 +22,15 @@ import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.rsp.rev1407
 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;
@@ -195,6 +198,27 @@ public class SfcUtils {
         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 &&
index ee8b4a8bbb558d685c64339806931361b282cc97..5ea5f020435be32d40a8ed1698b64cd57c5ed545 100644 (file)
@@ -270,8 +270,8 @@ public class NetvirtSfcWorkaroundOF13Provider implements INetvirtSfcOF13Provider
             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);
@@ -294,18 +294,18 @@ public class NetvirtSfcWorkaroundOF13Provider implements INetvirtSfcOF13Provider
             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,
@@ -347,8 +347,8 @@ public class NetvirtSfcWorkaroundOF13Provider implements INetvirtSfcOF13Provider
     }
 
     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;
     }
index 14c6173394929a5bb96557fb4ca86281e0a50e40..a5eef0e334ce3a04e9b5cb89086679077bb76167 100644 (file)
@@ -189,6 +189,7 @@ public class NetvirtSfcIT extends AbstractMdsalTestBase {
     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";
@@ -508,10 +509,12 @@ public class NetvirtSfcIT extends AbstractMdsalTestBase {
         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);
 
@@ -672,7 +675,7 @@ public class NetvirtSfcIT extends AbstractMdsalTestBase {
 
         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");
@@ -681,7 +684,7 @@ public class NetvirtSfcIT extends AbstractMdsalTestBase {
         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);
@@ -736,7 +739,7 @@ public class NetvirtSfcIT extends AbstractMdsalTestBase {
         //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));
 
index 50b721abbe51a8c814e175da2fc74eec57586ad2..926a0b6b5307e8451803afa5111d0867f32c7b1e 100644 (file)
@@ -28,9 +28,10 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.
 
 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
@@ -59,9 +60,11 @@ public class ServiceFunctionUtils extends AbstractUtils {
     }
 
     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(