Bug 4472 - netvirt: IlligalArgumentException in NAT provider
authorIsaku Yamahata <isaku.yamahata@intel.com>
Wed, 14 Oct 2015 22:06:19 +0000 (15:06 -0700)
committerIsaku Yamahata <isaku.yamahata@intel.com>
Wed, 14 Oct 2015 23:49:27 +0000 (16:49 -0700)
This patch adds work around code for ipv6 cidr notation is given.
Otherwise following exception occurs.

> 2015-10-14 13:38:55,125 | ERROR | ntDispatcherImpl | NeutronL3Adapter                 | 392 - org.opendaylight.ovsdb.openstack.net-virt - 1.2.1.SNAPSHOT | ProgramRouterInterface failed for mac:FA:16:3E:E0:A8:B5 addr:fd14:5ac7:ba3::1/64 node:ovsdb://uuid/8f75c49c-52b9-4303-8633-a80f0361429b/bridge/br-int srcTunId:external destTunId:1083 action:ADD status:Not Implemented: Not Implemented (0)
> 2015-10-14 13:38:55,126 | DEBUG | ntDispatcherImpl | ArpResponderService              | 393 - org.opendaylight.ovsdb.openstack.net-virt-providers - 1.2.1.SNAPSHOT | ipv6 address case is not implemented yet. dpid 209308480409166 segmentationId 1083 macAddressStr, ipAddress FA:16:3E:E0:A8:B5 action /fd14:5ac7:ba3:0:0:0:0:1
> 2015-10-14 13:38:55,126 | ERROR | ntDispatcherImpl | NeutronL3Adapter                 | 392 - org.opendaylight.ovsdb.openstack.net-virt - 1.2.1.SNAPSHOT | ProgramStaticArp failed for mac:FA:16:3E:E0:A8:B5 addr:fd14:5ac7:ba3::1 dpid:209308480409166 segOrOfPort:1083 action:ADD status:Not Implemented: Not Implemented (0)
> 2015-10-14 13:38:55,126 | ERROR | ntDispatcherImpl | EventDispatcher                  | 392 - org.opendaylight.ovsdb.openstack.net-virt - 1.2.1.SNAPSHOT | Exception in dispatching event NorthboundEvent [handler=NEUTRON_PORT, action=ADD, port=NeutronPort [portUUID=4b19acf4-d644-4fe7-8643-852c25cbf604, networkUUID=821f7a2b-b991-48b0-a39c-b0ef264bd321, name=, adminStateUp=true, status=ACTIVE, macAddress=FA:16:3E:E0:A8:B5, fixedIPs=[Neutron_IPs{ipAddress='fd14:5ac7:ba3::1', subnetUUID='54a7f233-1fdb-4d40-bd44-275f180e9a64'}], deviceID=738d6a7c-43bd-469d-bfed-6bcc6ffe5dca, deviceOwner=network:router_interface, tenantID=dc27e3a1cff64a1cb85c7f24899c3eee, securityGroups=[], bindinghostID=, bindingvnicType=normal, bindingvnicType=normal], subnet=null, router=null, routerInterface=null, floatingIP=null, network=null, loadBalancer=null, loadBalancerPool=null, loadBalancerPoolMember=null]
> java.lang.IllegalArgumentException: Supplied value "fd14:5ac7:ba3::/64" does not match required pattern "^(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])/(([0-9])|([1-2][0-9])|(3[0-2]))$"
>         at com.google.common.base.Preconditions.checkArgument(Preconditions.java:145)[64:com.google.guava:18.0.0]
>         at org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix.<init>(Ipv4Prefix.java:49)[216:org.opendaylight.mdsal.model.ietf-inet-types:2010.9.24.8-SNAPSHOT]
>         at org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.services.OutboundNatService.programIpRewriteExclusion(OutboundNatService.java:167)[393:org.opendaylight.ovsdb.openstack.net-virt-providers:1.2.1.SNAPSHOT]
>         at org.opendaylight.ovsdb.openstack.netvirt.impl.NeutronL3Adapter.programIpRewriteExclusionStage2(NeutronL3Adapter.java:1143)[392:org.opendaylight.ovsdb.openstack.net-virt:1.2.1.SNAPSHOT]
>         at org.opendaylight.ovsdb.openstack.netvirt.impl.NeutronL3Adapter.programIpRewriteExclusionStage1(NeutronL3Adapter.java:1128)[392:org.opendaylight.ovsdb.openstack.net-virt:1.2.1.SNAPSHOT]
>         at org.opendaylight.ovsdb.openstack.netvirt.impl.NeutronL3Adapter.programFlowsForNeutronRouterInterface(NeutronL3Adapter.java:807)[392:org.opendaylight.ovsdb.openstack.net-virt:1.2.1.SNAPSHOT]
>         at org.opendaylight.ovsdb.openstack.netvirt.impl.NeutronL3Adapter.handleNeutronRouterInterfaceEvent(NeutronL3Adapter.java:298)[392:org.opendaylight.ovsdb.openstack.net-virt:1.2.1.SNAPSHOT]
>         at org.opendaylight.ovsdb.openstack.netvirt.impl.NeutronL3Adapter.handleNeutronPortEvent(NeutronL3Adapter.java:245)[392:org.opendaylight.ovsdb.openstack.net-virt:1.2.1.SNAPSHOT]
>         at org.opendaylight.ovsdb.openstack.netvirt.PortHandler.doNeutronPortCreated(PortHandler.java:66)[392:org.opendaylight.ovsdb.openstack.net-virt:1.2.1.SNAPSHOT]
>         at org.opendaylight.ovsdb.openstack.netvirt.PortHandler.processEvent(PortHandler.java:161)[392:org.opendaylight.ovsdb.openstack.net-virt:1.2.1.SNAPSHOT]
>         at org.opendaylight.ovsdb.openstack.netvirt.impl.EventDispatcherImpl.dispatchEvent(EventDispatcherImpl.java:95)[392:org.opendaylight.ovsdb.openstack.net-virt:1.2.1.SNAPSHOT]
>         at org.opendaylight.ovsdb.openstack.netvirt.impl.EventDispatcherImpl.access$200(EventDispatcherImpl.java:28)[392:org.opendaylight.ovsdb.openstack.net-virt:1.2.1.SNAPSHOT]
>         at org.opendaylight.ovsdb.openstack.netvirt.impl.EventDispatcherImpl$1.run(EventDispatcherImpl.java:57)[392:org.opendaylight.ovsdb.openstack.net-virt:1.2.1.SNAPSHOT]
>         at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)[:1.8.0_60]
>         at java.util.concurrent.FutureTask.run(FutureTask.java:266)[:1.8.0_60]
>         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)[:1.8.0_60]
>         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)[:1.8.0_60]
>         at java.lang.Thread.run(Thread.java:745)[:1.8.0_60]

Change-Id: I1559667adde1c14b5627df3b7212e404998ce897
Signed-off-by: Isaku Yamahata <isaku.yamahata@intel.com>
openstack/net-virt-providers/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/services/InboundNatService.java
openstack/net-virt-providers/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/services/OutboundNatService.java

index 2fe4ec5f77aa3904189d40ad8fc3ecbad2e68a12..2b9fb0ee01681b5fc9dcaeabcdc456f1c342eeab 100644 (file)
@@ -10,6 +10,8 @@ package org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.services;
 
 import java.math.BigInteger;
 import java.net.InetAddress;
+import java.net.Inet6Address;
+import java.net.UnknownHostException;
 import java.util.List;
 
 import org.opendaylight.ovsdb.openstack.netvirt.api.Action;
@@ -42,8 +44,11 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev14
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.dst.choice.grouping.dst.choice.DstNxRegCaseBuilder;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class InboundNatService extends AbstractServiceInstance implements ConfigInterface, InboundNatProvider {
+    private static final Logger LOG = LoggerFactory.getLogger(InboundNatService.class);
     public static final Class<? extends NxmNxReg> REG_FIELD = NxmNxReg3.class;
 
     public InboundNatService() {
@@ -127,6 +132,20 @@ public class InboundNatService extends AbstractServiceInstance implements Config
         InstructionBuilder ib;
 
         MatchUtils.createTunnelIDMatch(matchBuilder, new BigInteger(segmentationId));
+        String ipAddress = excludedCidr.substring(0, excludedCidr.indexOf("/"));
+        InetAddress inetAddress;
+        try {
+            inetAddress = InetAddress.getByName(ipAddress);
+        } catch (UnknownHostException e) {
+            return new Status(StatusCode.BADREQUEST);
+        }
+        if (inetAddress instanceof Inet6Address) {
+            // WORKAROUND: For now ipv6 is not supported
+            // TODO: implement ipv6 cidr case
+            LOG.debug("ipv6 cidr is not implemented yet. cidr {}",
+                      excludedCidr);
+            return new Status(StatusCode.NOTIMPLEMENTED);
+        }
         MatchUtils.createDstL3IPv4Match(matchBuilder, new Ipv4Prefix(excludedCidr));
 
         // Goto Next Table
index d5389b12410705e98f6212afe1126a07894184e1..6b44c38d578df9d92d202f885aa98c942a6aab72 100644 (file)
@@ -10,6 +10,8 @@ package org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.services;
 
 import java.math.BigInteger;
 import java.net.InetAddress;
+import java.net.Inet6Address;
+import java.net.UnknownHostException;
 import java.util.List;
 
 import org.opendaylight.ovsdb.openstack.netvirt.api.Action;
@@ -44,8 +46,12 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.N
 import com.google.common.collect.Lists;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class OutboundNatService extends AbstractServiceInstance implements OutboundNatProvider, ConfigInterface {
+    private static final Logger LOG = LoggerFactory.getLogger(OutboundNatService.class);
+
     public OutboundNatService() {
         super(Service.OUTBOUND_NAT);
     }
@@ -164,6 +170,20 @@ public class OutboundNatService extends AbstractServiceInstance implements Outbo
         InstructionBuilder ib;
 
         MatchUtils.createTunnelIDMatch(matchBuilder, new BigInteger(segmentationId));
+        String ipAddress = excludedCidr.substring(0, excludedCidr.indexOf("/"));
+        InetAddress inetAddress;
+        try {
+            inetAddress = InetAddress.getByName(ipAddress);
+        } catch (UnknownHostException e) {
+            return new Status(StatusCode.BADREQUEST);
+        }
+        if (inetAddress instanceof Inet6Address) {
+            // WORKAROUND: For now ipv6 is not supported
+            // TODO: implement ipv6 cidr case
+            LOG.debug("ipv6 cidr is not implemented yet. cidr {}",
+                      excludedCidr);
+            return new Status(StatusCode.NOTIMPLEMENTED);
+        }
         MatchUtils.createDstL3IPv4Match(matchBuilder, new Ipv4Prefix(excludedCidr));
 
         // Goto Next Table