BUG #4045 net-virt-provider: workaround: ipv6 is not supported yet
authorIsaku Yamahata <isaku.yamahata@intel.com>
Fri, 24 Jul 2015 02:15:53 +0000 (19:15 -0700)
committerFlavio Fernandes <ffernand@redhat.com>
Fri, 24 Jul 2015 15:59:22 +0000 (15:59 +0000)
At this point, ipv6 is not supported yet. But openstack neutron does.
Ignore ipv6 address for now. Otherwise exception as blow is thrown.
This patches works around BUG #4045.
TODO: implement ipv6 and then remove this work around

> 2015-07-21 17:22:14,077 | ERROR | ntDispatcherImpl | EventDispatcher                  | 400 - org.opendaylight.ovsdb.openstack.net-virt - 1.2.0.SNAPSHOT | Exception in dispatching event NorthboundEvent [handler=NEUTRON_PORT, action=ADD, port=NeutronPort [portUUID=c625a77a-4720-4115-beb4-fd48bcd36727, networkUUID=dbe6f7d4-695f-45cc-a71c-1454057a4928, name=, adminStateUp=true, status=null, macAddress=FA:16:3E:39:9C:53, fixedIPs=[Neutron_IPs{ipAddress='fdbe:bc75:a195::1', subnetUUID='9a1077b9-a35f-46fe-a2d7-1536301979e8'}], deviceID=76751b66-0e7c-402d-9196-fac1d8c34627, deviceOwner=network:router_interface, tenantID=be9da0d68e28424db03bfb32574c78e5, floatingIPMap={}, 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 "fdbe:bc75:a195:0:0:0:0:1/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)[39: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)[49:org.opendaylight.yangtools.model.ietf-inet-types:2010.9.24.8-SNAPSHOT]
>         at org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.services.RoutingService.programRouterInterface(RoutingService.java:85)[401:org.opendaylight.ovsdb.openstack.net-virt-providers:1.2.0.SNAPSHOT]
>         at org.opendaylight.ovsdb.openstack.netvirt.impl.NeutronL3Adapter.programRouterInterfaceStage2(NeutronL3Adapter.java:855)[400:org.opendaylight.ovsdb.openstack.net-virt:1.2.0.SNAPSHOT]
>         at org.opendaylight.ovsdb.openstack.netvirt.impl.NeutronL3Adapter.programRouterInterfaceStage1(NeutronL3Adapter.java:833)[400:org.opendaylight.ovsdb.openstack.net-virt:1.2.0.SNAPSHOT]
>         at org.opendaylight.ovsdb.openstack.netvirt.impl.NeutronL3Adapter.programFlowForNetworkFromExternal(NeutronL3Adapter.java:720)[400:org.opendaylight.ovsdb.openstack.net-virt:1.2.0.SNAPSHOT]
>         at org.opendaylight.ovsdb.openstack.netvirt.impl.NeutronL3Adapter.programFlowsForNeutronRouterInterface(NeutronL3Adapter.java:688)[400:org.opendaylight.ovsdb.openstack.net-virt:1.2.0.SNAPSHOT]
>         at org.opendaylight.ovsdb.openstack.netvirt.impl.NeutronL3Adapter.handleNeutronRouterInterfaceEvent(NeutronL3Adapter.java:227)[400:org.opendaylight.ovsdb.openstack.net-virt:1.2.0.SNAPSHOT]
>         at org.opendaylight.ovsdb.openstack.netvirt.impl.NeutronL3Adapter.handleNeutronPortEvent(NeutronL3Adapter.java:186)[400:org.opendaylight.ovsdb.openstack.net-virt:1.2.0.SNAPSHOT]
>         at org.opendaylight.ovsdb.openstack.netvirt.PortHandler.doNeutronPortCreated(PortHandler.java:68)[400:org.opendaylight.ovsdb.openstack.net-virt:1.2.0.SNAPSHOT]
>         at org.opendaylight.ovsdb.openstack.netvirt.PortHandler.processEvent(PortHandler.java:164)[400:org.opendaylight.ovsdb.openstack.net-virt:1.2.0.SNAPSHOT]
>         at org.opendaylight.ovsdb.openstack.netvirt.impl.EventDispatcherImpl.dispatchEvent(EventDispatcherImpl.java:96)[400:org.opendaylight.ovsdb.openstack.net-virt:1.2.0.SNAPSHOT]
>         at org.opendaylight.ovsdb.openstack.netvirt.impl.EventDispatcherImpl.access$100(EventDispatcherImpl.java:30)[400:org.opendaylight.ovsdb.openstack.net-virt:1.2.0.SNAPSHOT]
>         at org.opendaylight.ovsdb.openstack.netvirt.impl.EventDispatcherImpl$1.run(EventDispatcherImpl.java:59)[400:org.opendaylight.ovsdb.openstack.net-virt:1.2.0.SNAPSHOT]
>         at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)[:1.7.0_79]
>         at java.util.concurrent.FutureTask.run(FutureTask.java:262)[:1.7.0_79]
>         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)[:1.7.0_79]
>         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)[:1.7.0_79]
>         at java.lang.Thread.run(Thread.java:745)[:1.7.0_79]

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

index 6a549bbeabcfad419cbb122379ea30377694cf2e..4d127d21d1de4e32c8c607d718ae7e6961232f0a 100644 (file)
@@ -11,6 +11,7 @@
 package org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.services;
 
 import java.math.BigInteger;
+import java.net.Inet6Address;
 import java.net.InetAddress;
 import java.util.List;
 
@@ -45,8 +46,11 @@ 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 RoutingService extends AbstractServiceInstance implements RoutingProvider, ConfigInterface {
+    private static final Logger LOG = LoggerFactory.getLogger(RoutingService.class);
     public RoutingService() {
         super(Service.ROUTING);
     }
@@ -81,6 +85,13 @@ public class RoutingService extends AbstractServiceInstance implements RoutingPr
             MatchUtils.createTunnelIDMatch(matchBuilder, new BigInteger(sourceSegId));
         }
 
+        if (address instanceof Inet6Address) {
+            // WORKAROUND: For now ipv6 is not supported
+            // TODO: implement ipv6 case
+            LOG.debug("ipv6 address is not implemented yet. address {}",
+                      address);
+            new Status(StatusCode.NOTIMPLEMENTED);
+        }
         final String prefixString = address.getHostAddress() + "/" + mask;
         MatchUtils.createDstL3IPv4Match(matchBuilder, new Ipv4Prefix(prefixString));