neutron/neutron/services/l3_router
Swaminathan Vasudevan 1caa51ea68 Add L3 Extension for Distributed Routers
This patch introduces the model and extension
framework for implementing distributed virtual
routing on top of Open vSwitch.

A new admin-only 'distributed' (as opposed to a
'centralized' or legacy-mode) attribute is added
to the API router resource. It is possible to convert
an existing (centralized) router to a distributed
one; the opposite conversion, even though allowed by
the API, may not be honored by the underlying
plugin implementation and an appropriate error will
be reported.

When creating a router (regardless of the user role),
Neutron will rely on a system wide configuration, whose
default currently allows to create 'centralized' routers.

Tests are added for basic unit coverage; when the first
building blocks for neutron-testing-refactor
are complete, functional testing will be added.
This is because we should be moving away from how
extension tests have been done up until now.

Partially-implements: blueprint neutron-ovs-dvr

DocImpact

Change-Id: I7227fbe2718eba6665a5afb5dcaaaa77b341091f
Authored-by:    Swaminathan Vasudevan <swaminathan.vasudevan@hp.com>
Co-Authored-By: Armando Migliaccio <armamig@gmail.com>
2014-07-16 07:33:43 -07:00
..
README Adds support for L3 routing/NAT as a service plugin 2013-09-11 12:12:10 +02:00
__init__.py Remove the useless vim modelines 2014-06-21 15:07:31 +08:00
l3_apic.py Extract CommonDBMixin to a separate file 2014-07-10 13:04:30 +04:00
l3_router_plugin.py Add L3 Extension for Distributed Routers 2014-07-16 07:33:43 -07:00

README

This service plugin implements the L3 routing functionality (resources router
and floatingip) that in earlier releases before Havana was provided by core
plugins (openvswitch, linuxbridge, ... etc).

Core plugins can now choose not to implement L3 routing functionality and
instead delegate that to the L3 routing service plugin.

The required changes to a core plugin are in that case:
- Do not inherit 'l3_db.L3_NAT_db_mixin' (or its descendants like extraroute)
  anymore.
- Remove "router" from 'supported_extension_aliases'.
- Modify any 'self' references to members in L3_NAT_db_mixin to instead use
  'manager.NeutronManager.get_service_plugins().get(constants.L3_ROUTER_NAT)'
  For example,
     self.prevent_l3_port_deletion(...)
  becomes something like
     plugin = manager.NeutronManager.get_service_plugins().get(
         constants.L3_ROUTER_NAT)
     if plugin:
         plugin.prevent_l3_port_deletion(...)

If the core plugin has relied on the L3Agent the following must also be changed:
- Do not inherit 'l3_rpc_base.L3RpcCallbackMixin' in any '*RpcCallbacks' class.
- Do not be a consumer of the topics.L3PLUGIN topic for RPC.

To use the L3 routing service plugin, add
'neutron.services.l3_router.l3_router_plugin.L3RouterPlugin'
to 'service_plugins' in '/etc/neutron/neutron.conf'.
That is,
service_plugins = neutron.services.l3_router.l3_router_plugin.L3RouterPlugin