lib/neutron_plugins/openvswitch_agent
e263c82e
 #!/bin/bash
 #
b05c8769
 # Neutron Open vSwitch L2 agent
c9b0f1ab
 # -----------------------------
 
 # Save trace setting
523f4880
 _XTRACE_NEUTRON_OVSL2=$(set +o | grep xtrace)
c9b0f1ab
 set +o xtrace
 
b05c8769
 source $TOP_DIR/lib/neutron_plugins/ovs_base
c9b0f1ab
 
aee18c74
 function neutron_plugin_create_nova_conf {
b05c8769
     _neutron_ovs_base_configure_nova_vif_driver
bd085505
     if [ "$VIRT_DRIVER" == 'xenserver' ]; then
51c681d6
         iniset $NOVA_CONF xenserver vif_driver nova.virt.xenapi.vif.XenAPIOpenVswitchDriver
         iniset $NOVA_CONF xenserver ovs_integration_bridge $XEN_INTEGRATION_BRIDGE
b05c8769
         # Disable nova's firewall so that it does not conflict with neutron
c9b0f1ab
         iniset $NOVA_CONF DEFAULT firewall_driver nova.virt.firewall.NoopFirewallDriver
     fi
 }
 
aee18c74
 function neutron_plugin_install_agent_packages {
b05c8769
     _neutron_ovs_base_install_agent_packages
c9b0f1ab
 }
 
aee18c74
 function neutron_plugin_configure_debug_command {
b05c8769
     _neutron_ovs_base_configure_debug_command
c9b0f1ab
 }
 
aee18c74
 function neutron_plugin_configure_dhcp_agent {
2a242519
     local conf_file=$1
     iniset $conf_file DEFAULT dhcp_agent_manager neutron.agent.dhcp_agent.DhcpAgentWithStateReport
c9b0f1ab
 }
 
aee18c74
 function neutron_plugin_configure_l3_agent {
2a242519
     local conf_file=$1
b05c8769
     _neutron_ovs_base_configure_l3_agent
2a242519
     iniset $conf_file DEFAULT l3_agent_manager neutron.agent.l3_agent.L3NATAgentWithStateReport
c9b0f1ab
 }
 
aee18c74
 function neutron_plugin_configure_plugin_agent {
c9b0f1ab
     # Setup integration bridge
b05c8769
     _neutron_ovs_base_setup_bridge $OVS_BRIDGE
     _neutron_ovs_base_configure_firewall_driver
c9b0f1ab
 
     # Setup agent for tunneling
bd085505
     if [[ "$OVS_ENABLE_TUNNELING" == "True" ]]; then
6f335b9a
         iniset /$Q_PLUGIN_CONF_FILE ovs local_ip $TUNNEL_ENDPOINT_IP
d48d672a
         iniset /$Q_PLUGIN_CONF_FILE ovs tunnel_bridge $OVS_TUNNEL_BRIDGE
c9b0f1ab
     fi
 
     # Setup physical network bridge mappings.  Override
     # ``OVS_VLAN_RANGES`` and ``OVS_BRIDGE_MAPPINGS`` in ``localrc`` for more
     # complex physical network configurations.
bd085505
     if [[ "$OVS_BRIDGE_MAPPINGS" == "" ]] && [[ "$PHYSICAL_NETWORK" != "" ]] && [[ "$OVS_PHYSICAL_BRIDGE" != "" ]]; then
c9b0f1ab
         OVS_BRIDGE_MAPPINGS=$PHYSICAL_NETWORK:$OVS_PHYSICAL_BRIDGE
 
54d16f70
         # Configure bridge manually with physical interface as port for multi-node
         _neutron_ovs_base_add_bridge $OVS_PHYSICAL_BRIDGE
c9b0f1ab
     fi
     if [[ "$OVS_BRIDGE_MAPPINGS" != "" ]]; then
d42634ff
         iniset /$Q_PLUGIN_CONF_FILE ovs bridge_mappings $OVS_BRIDGE_MAPPINGS
c9b0f1ab
     fi
b05c8769
     AGENT_BINARY="$NEUTRON_BIN_DIR/neutron-openvswitch-agent"
c9b0f1ab
 
bd085505
     if [ "$VIRT_DRIVER" == 'xenserver' ]; then
c9b0f1ab
         # Make a copy of our config for domU
1a247e83
         sudo cp /$Q_PLUGIN_CONF_FILE "/$Q_PLUGIN_CONF_FILE.domU"
c9b0f1ab
 
201e3c13
         # change domU's config file to STACK_USER
         sudo chown $STACK_USER:$STACK_USER /$Q_PLUGIN_CONF_FILE.domU
 
c9b0f1ab
         # Deal with Dom0's L2 Agent:
b05c8769
         Q_RR_DOM0_COMMAND="$NEUTRON_BIN_DIR/neutron-rootwrap-xen-dom0 $Q_RR_CONF_FILE"
c9b0f1ab
 
         # For now, duplicate the xen configuration already found in nova.conf
d42634ff
         iniset $Q_RR_CONF_FILE xenapi xenapi_connection_url "$XENAPI_CONNECTION_URL"
         iniset $Q_RR_CONF_FILE xenapi xenapi_connection_username "$XENAPI_USER"
         iniset $Q_RR_CONF_FILE xenapi xenapi_connection_password "$XENAPI_PASSWORD"
c9b0f1ab
 
         # Under XS/XCP, the ovs agent needs to target the dom0
         # integration bridge.  This is enabled by using a root wrapper
         # that executes commands on dom0 via a XenAPI plugin.
201e3c13
         # XenAPI does not support daemon rootwrap now, so set root_helper_daemon empty
d42634ff
         iniset /$Q_PLUGIN_CONF_FILE agent root_helper "$Q_RR_DOM0_COMMAND"
201e3c13
         iniset /$Q_PLUGIN_CONF_FILE agent root_helper_daemon ""
 
         # Disable minimize polling, so that it can always detect OVS and Port changes
         # This is a problem of xenserver + neutron, bug has been reported
         # https://bugs.launchpad.net/neutron/+bug/1495423
         iniset /$Q_PLUGIN_CONF_FILE agent minimize_polling False
c9b0f1ab
 
         # Set "physical" mapping
d42634ff
         iniset /$Q_PLUGIN_CONF_FILE ovs bridge_mappings "physnet1:$FLAT_NETWORK_BRIDGE"
c9b0f1ab
 
         # XEN_INTEGRATION_BRIDGE is the integration bridge in dom0
d42634ff
         iniset /$Q_PLUGIN_CONF_FILE ovs integration_bridge $XEN_INTEGRATION_BRIDGE
c9b0f1ab
 
         # Set up domU's L2 agent:
 
2f5596e5
         # Create a bridge "br-$VLAN_INTERFACE"
         _neutron_ovs_base_add_bridge "br-$VLAN_INTERFACE"
         # Add $VLAN_INTERFACE to that bridge
         sudo ovs-vsctl -- --may-exist add-port "br-$VLAN_INTERFACE" $VLAN_INTERFACE
201e3c13
 
         # Create external bridge and add port
7b5c7dce
         _neutron_ovs_base_add_public_bridge
2f5596e5
         sudo ovs-vsctl -- --may-exist add-port $PUBLIC_BRIDGE $PUBLIC_INTERFACE
c9b0f1ab
 
         # Set bridge mappings to "physnet1:br-$GUEST_INTERFACE_DEFAULT"
2f5596e5
         iniset "/$Q_PLUGIN_CONF_FILE.domU" ovs bridge_mappings "physnet1:br-$VLAN_INTERFACE,physnet-ex:$PUBLIC_BRIDGE"
c9b0f1ab
         # Set integration bridge to domU's
d42634ff
         iniset "/$Q_PLUGIN_CONF_FILE.domU" ovs integration_bridge $OVS_BRIDGE
c9b0f1ab
         # Set root wrap
d42634ff
         iniset "/$Q_PLUGIN_CONF_FILE.domU" agent root_helper "$Q_RR_COMMAND"
c9b0f1ab
     fi
2307f9de
     iniset /$Q_PLUGIN_CONF_FILE agent tunnel_types $Q_TUNNEL_TYPES
c1605550
     iniset /$Q_PLUGIN_CONF_FILE ovs datapath_type $OVS_DATAPATH_TYPE
c9b0f1ab
 }
 
aee18c74
 function neutron_plugin_setup_interface_driver {
c9b0f1ab
     local conf_file=$1
dca49de2
     iniset $conf_file DEFAULT interface_driver openvswitch
c9b0f1ab
 }
 
aee18c74
 function neutron_plugin_check_adv_test_requirements {
c9b0f1ab
     is_service_enabled q-agt && is_service_enabled q-dhcp && return 0
 }
 
 # Restore xtrace
523f4880
 $_XTRACE_NEUTRON_OVSL2