Bug 6865 - Transcriber skips the uppercase protocol field 92/46592/4
authorAnil Vishnoi <vishnoianil@gmail.com>
Thu, 6 Oct 2016 02:22:17 +0000 (19:22 -0700)
committerAnil Vishnoi <vishnoianil@gmail.com>
Thu, 13 Oct 2016 20:30:34 +0000 (13:30 -0700)
Networking-sfc sends protocol string in lowercase
(e.g tcp and not TCP), but neutron spi try to find
it using the uppercase and don't find it and
eventually ignore this field. To be consistent with
other API's, flow classifier will only accept lowercase
protocol name and return 400 (Bad Request) for any other
protocol string.

Change-Id: I204f58c9cf1cf13446122c8f818ce498866a2caf
Signed-off-by: Anil Vishnoi <vishnoianil@gmail.com>
features/production/src/main/features/features.xml
transcriber/pom.xml
transcriber/src/main/java/org/opendaylight/neutron/transcriber/NeutronSFCFlowClassifierInterface.java

index a4e9a7753d46f73050b9b24c7733ef1de1a5176e..bf5b81ca16b563aeb444477f7e60229f5650af9a 100644 (file)
@@ -36,6 +36,7 @@
     <bundle>mvn:com.fasterxml.jackson.core/jackson-annotations/{{VERSION}}</bundle>
   </feature>
   <feature name='odl-neutron-transcriber' version='${project.version}' description="OpenDaylight :: Neutron :: Implementation">
+    <feature version='${project.version}'>odl-neutron-northbound-api</feature>
     <feature version='${project.version}'>odl-neutron-spi</feature>
     <feature>war</feature>
     <feature version='${controller.mdsal.version}'>odl-mdsal-broker</feature>
index d7151f0fbf146dd0b779e1dcbb8a97361ef2491c..bb877d518944e16d41be1abd06285ca98db5f1c5 100644 (file)
     </plugins>
   </build>
   <dependencies>
+    <dependency>
+      <groupId>org.opendaylight.neutron</groupId>
+      <artifactId>northbound-api</artifactId>
+      <version>${project.version}</version>
+    </dependency>
     <dependency>
       <groupId>org.opendaylight.neutron</groupId>
       <artifactId>neutron-spi</artifactId>
index 24c5f54e13ecd69749711404a2aa5523f6c180d9..b433dbda73ea44534772c40c3d3a32aa7d439e4c 100644 (file)
@@ -8,7 +8,12 @@
 package org.opendaylight.neutron.transcriber;
 
 import com.google.common.collect.ImmutableBiMap;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.neutron.northbound.api.BadRequestException;
 import org.opendaylight.neutron.spi.INeutronSFCFlowClassifierCRUD;
 import org.opendaylight.neutron.spi.NeutronSFCFlowClassifier;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix;
@@ -31,10 +36,6 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-
 /**
  * Created by Anil Vishnoi (avishnoi@Brocade.com) on 6/24/16.
  */
@@ -50,12 +51,10 @@ public class NeutronSFCFlowClassifierInterface
             .put(EthertypeV6.class,"IPv6")
             .build();
 
-    private static final ImmutableBiMap<Class<? extends ProtocolBase>,String> PROTOCOL_MAP
-            = new ImmutableBiMap.Builder<Class<? extends ProtocolBase>,String>()
-            .put(ProtocolTcp.class,"TCP")
-            .put(ProtocolUdp.class,"UDP")
-            .put(ProtocolIcmp.class,"ICMP")
-            .build();
+    private static final ImmutableBiMap<Class<? extends ProtocolBase>,
+            String> PROTOCOL_MAP = new ImmutableBiMap.Builder<Class<? extends ProtocolBase>, String>()
+                    .put(ProtocolTcp.class, "tcp").put(ProtocolUdp.class, "udp").put(ProtocolIcmp.class, "icmp")
+                    .build();
 
     NeutronSFCFlowClassifierInterface(DataBroker db) {
         super(db);
@@ -98,10 +97,14 @@ public class NeutronSFCFlowClassifierInterface
 
             result.setEthertype(mapper.get(neutronClassifier.getEthertype()));
         }
-        if(neutronClassifier.getProtocol() != null) {
-            final ImmutableBiMap<String, Class<? extends ProtocolBase>> mapper =
-                    PROTOCOL_MAP.inverse();
-            result.setProtocol(mapper.get(neutronClassifier.getProtocol()));
+        if (neutronClassifier.getProtocol() != null) {
+            final ImmutableBiMap<String, Class<? extends ProtocolBase>> mapper = PROTOCOL_MAP.inverse();
+            Class<? extends ProtocolBase> protocol = mapper.get(neutronClassifier.getProtocol());
+            if (protocol != null) {
+                result.setProtocol(protocol);
+            } else {
+                throw new BadRequestException("Protocol {" + neutronClassifier.getProtocol() + "} is not supported");
+            }
         }
         if(neutronClassifier.getSourcePortRangeMin() != null) {
             result.setSourcePortRangeMin(neutronClassifier.getSourcePortRangeMin());