From 50f336a0eb963b98fdbb69ac48e64cdd495be590 Mon Sep 17 00:00:00 2001 From: Dave Tucker Date: Wed, 27 Aug 2014 15:24:12 +0100 Subject: [PATCH] Add Interfaces for Openstack L3 forwarding Change-Id: I59c9b7f2d91edd5e9427cc1587ae8e4fc741b5c8 Signed-off-by: Dave Tucker --- .../netvirt/api/MultiTenantAwareRouter.java | 47 +++++++++++ .../MultiTenantRouterForwardingProvider.java | 33 ++++++++ .../ovsdb/openstack/netvirt/api/Router.java | 46 +++++++++++ .../netvirt/impl/OpenstackRouter.java | 81 +++++++++++++++++++ 4 files changed, 207 insertions(+) create mode 100644 openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/api/MultiTenantAwareRouter.java create mode 100644 openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/api/MultiTenantRouterForwardingProvider.java create mode 100644 openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/api/Router.java create mode 100644 openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/OpenstackRouter.java diff --git a/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/api/MultiTenantAwareRouter.java b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/api/MultiTenantAwareRouter.java new file mode 100644 index 0000000000..b71807ea8b --- /dev/null +++ b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/api/MultiTenantAwareRouter.java @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2014 Red Hat, Inc. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + * + * Authors : Dave Tucker, Flavio Fernandes + */ + +package org.opendaylight.ovsdb.openstack.netvirt.api; + +import java.net.InetAddress; +import java.net.InterfaceAddress; +import java.util.Set; +import java.util.UUID; + +/** + * A Router that is Multi-Tenant Aware + * Each tenant has a Unique Identifier which is used to isolate interfaces/routes + */ +public interface MultiTenantAwareRouter { + + void addInterface(UUID tenantId, String interfaceName, Set addresses); + + void addInterface(UUID tenantId, String interfaceName, String macAddress, Set addresses); + + void updateInterface(UUID tenantId, String interfaceName, Set addresses); + + void updateInterface(UUID tenantId, String interfaceName, String macAddress, Set addresses); + + void removeInterface(UUID tenantId, String interfaceName); + + void addRoute(UUID tenantId, InterfaceAddress destination, InetAddress nextHop); + + void addRoute(UUID tenantId, InterfaceAddress destination, InetAddress nextHop, Integer priority); + + void removeRoute(UUID tenantId, InterfaceAddress destination, InetAddress nextHop); + + void removeRoute(UUID tenantId, InterfaceAddress destination, InetAddress nextHop, Integer priority); + + void addDefaultRoute(UUID tenantId, InetAddress nextHop); + + void addDefaultRoute(UUID tenantId, InetAddress nextHop, Integer priority); + + +} diff --git a/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/api/MultiTenantRouterForwardingProvider.java b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/api/MultiTenantRouterForwardingProvider.java new file mode 100644 index 0000000000..cdf52a71a9 --- /dev/null +++ b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/api/MultiTenantRouterForwardingProvider.java @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2014 Red Hat, Inc. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + * + * Authors : Dave Tucker, Flavio Fernandes + */ + +package org.opendaylight.ovsdb.openstack.netvirt.api; + +import java.net.InetAddress; +import java.net.InterfaceAddress; +import java.util.Set; +import java.util.UUID; + +/** + * A MultiTenantForwardingProvider provides Multi-Tenant L3 Forwarding + */ +public interface MultiTenantRouterForwardingProvider { + + void addStaticArpEntry(UUID tenantId, String macAddress, InetAddress ipAddress); + + void addIpRewriteRule(UUID tenantId, InetAddress matchAddress, InetAddress rewriteAddress); + + void addRouterInterface(UUID tenantId, String macAddress, Set addresses); + + void addForwardingTableEntry(UUID tenantId, InetAddress ipAddress, String macAddress); + + void addDefaultRouteEntry(UUID tenantId, String macAddress, InetAddress nextHop); + +} diff --git a/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/api/Router.java b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/api/Router.java new file mode 100644 index 0000000000..9d0eda3544 --- /dev/null +++ b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/api/Router.java @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2014 Red Hat, Inc. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + * + * Authors : Dave Tucker, Flavio Fernandes + */ + +package org.opendaylight.ovsdb.openstack.netvirt.api; + +import java.net.InetAddress; +import java.net.InterfaceAddress; +import java.util.Set; + +/** + * A Router + */ +public interface Router { + + void addInterface(String interfaceName, Set addresses); + + void addInterface(String interfaceName, String macAddress, Set addresses); + + void updateInterface(String interfaceName, Set addresses); + + void updateInterface(String interfaceName, String macAddress, Set addresses); + + void removeInterface(String interfaceName); + + void addRoute(InterfaceAddress destination, InetAddress nextHop); + + void addRoute(InterfaceAddress destination, InetAddress nextHop, Integer priority); + + void removeRoute(InterfaceAddress destination, InetAddress nextHop); + + void removeRoute(InterfaceAddress destination, InetAddress nextHop, Integer priority); + + void addDefaultRoute(InetAddress nextHop); + + void addDefaultRoute(InetAddress nextHop, Integer priority); + + void addNatRule(InetAddress matchAddress, InetAddress rewriteAddress); + +} diff --git a/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/OpenstackRouter.java b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/OpenstackRouter.java new file mode 100644 index 0000000000..eada33cf50 --- /dev/null +++ b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/OpenstackRouter.java @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2014 Red Hat, Inc. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + * + * Authors : Dave Tucker, Flavio Fernandes + */ + +package org.opendaylight.ovsdb.openstack.netvirt.impl; + +import org.opendaylight.ovsdb.openstack.netvirt.api.MultiTenantAwareRouter; + +import java.net.InetAddress; +import java.net.InterfaceAddress; +import java.util.Set; +import java.util.UUID; + +/** + * OpenStack router implements the MultiTenantAwareRouter interfaces + * It provides routing functionality for multiple tenants in an OpenStack cloud + */ +public class OpenstackRouter implements MultiTenantAwareRouter { + + + @Override + public void addInterface(UUID tenantId, String interfaceName, Set addresses) { + + } + + @Override + public void addInterface(UUID tenantId, String interfaceName, String macAddress, Set addresses) { + + } + + @Override + public void updateInterface(UUID tenantId, String interfaceName, Set addresses) { + + } + + @Override + public void updateInterface(UUID tenantId, String interfaceName, String macAddress, Set addresses) { + + } + + @Override + public void removeInterface(UUID tenantId, String interfaceName) { + + } + + @Override + public void addRoute(UUID tenantId, InterfaceAddress destination, InetAddress nextHop) { + + } + + @Override + public void addRoute(UUID tenantId, InterfaceAddress destination, InetAddress nextHop, Integer priority) { + + } + + @Override + public void removeRoute(UUID tenantId, InterfaceAddress destination, InetAddress nextHop) { + + } + + @Override + public void removeRoute(UUID tenantId, InterfaceAddress destination, InetAddress nextHop, Integer priority) { + + } + + @Override + public void addDefaultRoute(UUID tenantId, InetAddress nextHop) { + + } + + @Override + public void addDefaultRoute(UUID tenantId, InetAddress nextHop, Integer priority) { + + } +} -- 2.36.6