From eea7621d237228325007f2ba301fb62ba91185e7 Mon Sep 17 00:00:00 2001 From: Brian Haley Date: Fri, 27 Jun 2014 11:45:50 -0400 Subject: [PATCH] Add DVR support to DevStack This patch introduces a new Neutron config option: Q_DVR_MODE. The possible values are: - legacy : No DVR functionality - dvr_snat: Controller/single node DVR - dvr : Compute node in multi-node DVR When DVR is enabled the following configuration changes will be in place: - neutron.conf - router_distributed=True - l3_agent.ini - agent_mode=$Q_DVR_MODE - ovs_neutron_plugin.ini: - enable_distributed_routing=True - l2_population=True - tunnel_types=vxlan Supports-blueprint: neutron-ovs-dvr Change-Id: I669e054a8489fe7ac7f5c00df6535349d477e8c4 --- lib/neutron | 23 ++++++++++++++++++++++- lib/neutron_plugins/ml2 | 6 ++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/lib/neutron b/lib/neutron index 6594334e2d..8ea96bdde6 100644 --- a/lib/neutron +++ b/lib/neutron @@ -143,6 +143,17 @@ else Q_RR_COMMAND="sudo $NEUTRON_ROOTWRAP $Q_RR_CONF_FILE" fi + +# Distributed Virtual Router (DVR) configuration +# Can be: +# legacy - No DVR functionality +# dvr_snat - Controller or single node DVR +# dvr - Compute node in multi-node DVR +Q_DVR_MODE=${Q_DVR_MODE:-legacy} +if [[ "$Q_DVR_MODE" != "legacy" ]]; then + Q_ML2_PLUGIN_MECHANISM_DRIVERS=openvswitch,linuxbridge,l2population +fi + # Provider Network Configurations # -------------------------------- @@ -304,6 +315,10 @@ function configure_neutron { _configure_neutron_metadata_agent fi + if [[ "$Q_DVR_MODE" != "legacy" ]]; then + _configure_dvr + fi + _configure_neutron_debug_command } @@ -571,7 +586,7 @@ function cleanup_neutron { fi # delete all namespaces created by neutron - for ns in $(sudo ip netns list | grep -o -E '(qdhcp|qrouter|qlbaas)-[0-9a-f-]*'); do + for ns in $(sudo ip netns list | grep -o -E '(qdhcp|qrouter|qlbaas|fip|snat)-[0-9a-f-]*'); do sudo ip netns delete ${ns} done } @@ -749,6 +764,12 @@ function _configure_neutron_vpn { neutron_vpn_configure_common } +function _configure_dvr { + iniset $NEUTRON_CONF DEFAULT router_distributed True + iniset $Q_L3_CONF_FILE DEFAULT agent_mode $Q_DVR_MODE +} + + # _configure_neutron_plugin_agent() - Set config files for neutron plugin agent # It is called when q-agt is enabled. function _configure_neutron_plugin_agent { diff --git a/lib/neutron_plugins/ml2 b/lib/neutron_plugins/ml2 index 8e131bbb94..4cf484e7be 100644 --- a/lib/neutron_plugins/ml2 +++ b/lib/neutron_plugins/ml2 @@ -112,6 +112,12 @@ function neutron_plugin_configure_service { populate_ml2_config /$Q_PLUGIN_CONF_FILE ml2_type_vxlan $Q_ML2_PLUGIN_VXLAN_TYPE_OPTIONS populate_ml2_config /$Q_PLUGIN_CONF_FILE ml2_type_vlan $Q_ML2_PLUGIN_VLAN_TYPE_OPTIONS + + if [[ "$Q_DVR_MODE" != "legacy" ]]; then + populate_ml2_config /$Q_PLUGIN_CONF_FILE agent l2_population=True + populate_ml2_config /$Q_PLUGIN_CONF_FILE agent tunnel_types=vxlan + populate_ml2_config /$Q_PLUGIN_CONF_FILE agent enable_distributed_routing=True + fi } function has_neutron_plugin_security_group {