blob: 8d2e30385459359f3cd19e8c7bce99629dfdc480 [file] [log] [blame]
Mark McClainb05c8762013-07-06 23:29:39 -04001# Neutron Modular Layer 2 plugin
Bob Kukurac9b0f1a2013-04-23 16:28:24 -04002# ------------------------------
3
4# Save trace setting
5MY_XTRACE=$(set +o | grep xtrace)
6set +o xtrace
7
Kyle Mesteryb7726592013-07-19 14:26:53 +00008# Enable this to simply and quickly enable tunneling with ML2.
9# Select either 'gre', 'vxlan', or '(gre vxlan)'
10Q_ML2_TENANT_NETWORK_TYPE=${Q_ML2_TENANT_NETWORK_TYPE:-}
11# This has to be set here since the agent will set this in the config file
12if [[ "$Q_ML2_TENANT_NETWORK_TYPE" != "" ]]; then
Kyle Mestery061d5252013-09-09 08:52:19 +000013 Q_AGENT_EXTRA_AGENT_OPTS+=(tunnel_types=$Q_ML2_TENANT_NETWORK_TYPE)
Kyle Mesteryb7726592013-07-19 14:26:53 +000014elif [[ "$ENABLE_TENANT_TUNNELS" = "True" ]]; then
Kyle Mestery061d5252013-09-09 08:52:19 +000015 Q_AGENT_EXTRA_AGENT_OPTS+=(tunnel_types=gre)
Kyle Mesteryb7726592013-07-19 14:26:53 +000016fi
17
Bob Kukurac9b0f1a2013-04-23 16:28:24 -040018# Default openvswitch L2 agent
19Q_AGENT=${Q_AGENT:-openvswitch}
Mark McClainb05c8762013-07-06 23:29:39 -040020source $TOP_DIR/lib/neutron_plugins/${Q_AGENT}_agent
Bob Kukurac9b0f1a2013-04-23 16:28:24 -040021
Kyle Mesteryb7726592013-07-19 14:26:53 +000022# List of MechanismDrivers to load
Kyle Mesterybc632472013-09-06 14:59:30 +000023Q_ML2_PLUGIN_MECHANISM_DRIVERS=${Q_ML2_PLUGIN_MECHANISM_DRIVERS:-openvswitch,linuxbridge}
Kyle Mesteryb7726592013-07-19 14:26:53 +000024# List of Type Drivers to load
25Q_ML2_PLUGIN_TYPE_DRIVERS=${Q_ML2_PLUGIN_TYPE_DRIVERS:-local,flat,vlan,gre,vxlan}
26# Default GRE TypeDriver options
27Q_ML2_PLUGIN_GRE_TYPE_OPTIONS=${Q_ML2_PLUGIN_GRE_TYPE_OPTIONS:-tunnel_id_ranges=$TENANT_TUNNEL_RANGES}
28# Default VXLAN TypeDriver options
29Q_ML2_PLUGIN_VXLAN_TYPE_OPTIONS=${Q_ML2_PLUGIN_VXLAN_TYPE_OPTIONS:-vni_ranges=1001:2000}
30# Default VLAN TypeDriver options
31Q_ML2_PLUGIN_VLAN_TYPE_OPTIONS=${Q_ML2_PLUGIN_VLAN_TYPE_OPTIONS:-}
32
Kyle Mestery14ea1a22013-09-22 03:04:56 +000033# L3 Plugin to load for ML2
34ML2_L3_PLUGIN=${ML2_L3_PLUGIN:-neutron.services.l3_router.l3_router_plugin.L3RouterPlugin}
35
Kyle Mesteryb7726592013-07-19 14:26:53 +000036function populate_ml2_config() {
37 OPTS=$1
38 CONF=$2
39 SECTION=$3
40
41 for I in "${OPTS[@]}"; do
42 # Replace the first '=' with ' ' for iniset syntax
43 iniset $CONF $SECTION ${I/=/ }
44 done
45}
46
Mark McClainb05c8762013-07-06 23:29:39 -040047function neutron_plugin_configure_common() {
48 Q_PLUGIN_CONF_PATH=etc/neutron/plugins/ml2
Bob Kukurac9b0f1a2013-04-23 16:28:24 -040049 Q_PLUGIN_CONF_FILENAME=ml2_conf.ini
Mark McClainb05c8762013-07-06 23:29:39 -040050 Q_DB_NAME="neutron_ml2"
51 Q_PLUGIN_CLASS="neutron.plugins.ml2.plugin.Ml2Plugin"
Bob Melander748fe3d2013-01-31 17:12:56 +010052 # The ML2 plugin delegates L3 routing/NAT functionality to
53 # the L3 service plugin which must therefore be specified.
Kyle Mestery14ea1a22013-09-22 03:04:56 +000054 if [[ $Q_SERVICE_PLUGIN_CLASSES == '' ]]; then
55 Q_SERVICE_PLUGIN_CLASSES=$ML2_L3_PLUGIN
Bob Melander748fe3d2013-01-31 17:12:56 +010056 else
Kyle Mestery14ea1a22013-09-22 03:04:56 +000057 Q_SERVICE_PLUGIN_CLASSES="$Q_SERVICE_PLUGIN_CLASSES,$ML2_L3_PLUGIN"
Bob Melander748fe3d2013-01-31 17:12:56 +010058 fi
Bob Kukurac9b0f1a2013-04-23 16:28:24 -040059}
60
Mark McClainb05c8762013-07-06 23:29:39 -040061function neutron_plugin_configure_service() {
Kyle Mesteryb7726592013-07-19 14:26:53 +000062 if [[ "$Q_ML2_TENANT_NETWORK_TYPE" != "" ]]; then
Kyle Mestery061d5252013-09-09 08:52:19 +000063 Q_SRV_EXTRA_OPTS+=(tenant_network_types=$Q_ML2_TENANT_NETWORK_TYPE)
Kyle Mesteryb7726592013-07-19 14:26:53 +000064 elif [[ "$ENABLE_TENANT_TUNNELS" = "True" ]]; then
65 # This assumes you want a simple configuration, and will overwrite
66 # Q_SRV_EXTRA_OPTS if set in addition to ENABLE_TENANT_TUNNELS.
Kyle Mestery061d5252013-09-09 08:52:19 +000067 Q_SRV_EXTRA_OPTS+=(tenant_network_types=gre)
Kyle Mesteryb7726592013-07-19 14:26:53 +000068 Q_ML2_PLUGIN_GRE_TYPE_OPTIONS=(tunnel_id_ranges=$TENANT_TUNNEL_RANGES)
Bob Kukurac9b0f1a2013-04-23 16:28:24 -040069 elif [[ "$ENABLE_TENANT_VLANS" = "True" ]]; then
Kyle Mestery061d5252013-09-09 08:52:19 +000070 Q_SRV_EXTRA_OPTS+=(tenant_network_types=vlan)
Bob Kukurac9b0f1a2013-04-23 16:28:24 -040071 else
72 echo "WARNING - The ml2 plugin is using local tenant networks, with no connectivity between hosts."
73 fi
74
Kyle Mesteryb7726592013-07-19 14:26:53 +000075 # Allow for overrding VLAN configuration (for example, to configure provider
76 # VLANs) by first checking if Q_ML2_PLUGIN_VLAN_TYPE_OPTIONS is set.
77 if [ "$Q_ML2_PLUGIN_VLAN_TYPE_OPTIONS" == "" ]; then
78 if [[ "$ML2_VLAN_RANGES" = "" ]] && [[ "$PHYSICAL_NETWORK" != "" ]]; then
79 ML2_VLAN_RANGES=$PHYSICAL_NETWORK
80 if [[ "$TENANT_VLAN_RANGE" != "" ]]; then
81 ML2_VLAN_RANGES=$ML2_VLAN_RANGES:$TENANT_VLAN_RANGE
82 fi
Bob Kukurac9b0f1a2013-04-23 16:28:24 -040083 fi
Kyle Mesteryb7726592013-07-19 14:26:53 +000084 if [[ "$ML2_VLAN_RANGES" != "" ]]; then
85 Q_ML2_PLUGIN_VLAN_TYPE_OPTIONS=(network_vlan_ranges=$ML2_VLAN_RANGES)
86 fi
Bob Kukurac9b0f1a2013-04-23 16:28:24 -040087 fi
88
89 # REVISIT(rkukura): Setting firewall_driver here for
Mark McClainb05c8762013-07-06 23:29:39 -040090 # neutron.agent.securitygroups_rpc.is_firewall_enabled() which is
Bob Kukurac9b0f1a2013-04-23 16:28:24 -040091 # used in the server, in case no L2 agent is configured on the
92 # server's node. If an L2 agent is configured, this will get
93 # overridden with the correct driver. The ml2 plugin should
94 # instead use its own config variable to indicate whether security
95 # groups is enabled, and that will need to be set here instead.
96 if [[ "$Q_USE_SECGROUP" == "True" ]]; then
Mark McClainb05c8762013-07-06 23:29:39 -040097 iniset /$Q_PLUGIN_CONF_FILE SECURITYGROUP firewall_driver neutron.agent.not.a.real.FirewallDriver
Bob Kukurac9b0f1a2013-04-23 16:28:24 -040098 else
Mark McClainb05c8762013-07-06 23:29:39 -040099 iniset /$Q_PLUGIN_CONF_FILE SECURITYGROUP firewall_driver neutron.agent.firewall.NoopFirewallDriver
Bob Kukurac9b0f1a2013-04-23 16:28:24 -0400100 fi
101
Kyle Mesteryb7726592013-07-19 14:26:53 +0000102 # Since we enable the tunnel TypeDrivers, also enable a local_ip
103 iniset /$Q_PLUGIN_CONF_FILE ovs local_ip $HOST_IP
104
Kyle Mestery3ea28ec2013-08-05 12:24:32 +0000105 populate_ml2_config mechanism_drivers=$Q_ML2_PLUGIN_MECHANISM_DRIVERS /$Q_PLUGIN_CONF_FILE ml2
106
Kyle Mesteryb7726592013-07-19 14:26:53 +0000107 populate_ml2_config type_drivers=$Q_ML2_PLUGIN_TYPE_DRIVERS /$Q_PLUGIN_CONF_FILE ml2
108
109 populate_ml2_config $Q_SRV_EXTRA_OPTS /$Q_PLUGIN_CONF_FILE ml2
110
111 populate_ml2_config $Q_ML2_PLUGIN_GRE_TYPE_OPTIONS /$Q_PLUGIN_CONF_FILE ml2_type_gre
112
113 populate_ml2_config $Q_ML2_PLUGIN_VXLAN_TYPE_OPTIONS /$Q_PLUGIN_CONF_FILE ml2_type_vxlan
114
115 if [ "$Q_ML2_PLUGIN_VLAN_TYPE_OPTIONS" != "" ]; then
116 populate_ml2_config $Q_ML2_PLUGIN_VLAN_TYPE_OPTIONS /$Q_PLUGIN_CONF_FILE ml2_type_vlan
117 fi
Bob Kukurac9b0f1a2013-04-23 16:28:24 -0400118}
119
Mark McClainb05c8762013-07-06 23:29:39 -0400120function has_neutron_plugin_security_group() {
Bob Kukurac9b0f1a2013-04-23 16:28:24 -0400121 return 0
122}
123
124# Restore xtrace
125$MY_XTRACE