devstack/lib/neutron_plugins/linuxbridge_agent
Brian Haley da18895162 Fix brctl calls
Some distros no longer ship brctl, iproute2 should be used
in its place. The linuxbridge agent plugin script was still
using it, as was worlddump, which generates this warning on
a failure:

    Running devstack worlddump.py
    /bin/sh: 1: brctl: not found

Conditionalizing worlddump based on whether brctl is installed
to make this go away.

Change-Id: Iafbf4038bab08c261d45d117b12d4629ba32d65e
2019-11-06 09:55:47 +08:00

105 lines
3.5 KiB
Bash

#!/bin/bash
#
# Neutron Linux Bridge L2 agent
# -----------------------------
# Save trace setting
_XTRACE_NEUTRON_LB=$(set +o | grep xtrace)
set +o xtrace
function neutron_lb_cleanup {
sudo ip link delete $PUBLIC_BRIDGE
bridge_list=`ls /sys/class/net/*/bridge/bridge_id 2>/dev/null | cut -f5 -d/`
if [[ -z "$bridge_list" ]]; then
return
fi
if [[ "$Q_ML2_TENANT_NETWORK_TYPE" = "vxlan" ]]; then
for port in $(echo $bridge_list | grep -o -e [a-zA-Z\-]*tap[0-9a-f\-]* -e vxlan-[0-9a-f\-]*); do
sudo ip link delete $port
done
elif [[ "$Q_ML2_TENANT_NETWORK_TYPE" = "vlan" ]]; then
for port in $(echo $bridge_list | grep -o -e [a-zA-Z\-]*tap[0-9a-f\-]* -e ${LB_PHYSICAL_INTERFACE}\.[0-9a-f\-]*); do
sudo ip link delete $port
done
fi
for bridge in $(echo $bridge_list |grep -o -e brq[0-9a-f\-]*); do
sudo ip link delete $bridge
done
}
function is_neutron_ovs_base_plugin {
# linuxbridge doesn't use OVS
return 1
}
function neutron_plugin_create_nova_conf {
:
}
function neutron_plugin_install_agent_packages {
install_package bridge-utils
}
function neutron_plugin_configure_dhcp_agent {
local conf_file=$1
:
}
function neutron_plugin_configure_l3_agent {
local conf_file=$1
sudo ip link add $PUBLIC_BRIDGE type bridge
set_mtu $PUBLIC_BRIDGE $PUBLIC_BRIDGE_MTU
}
function neutron_plugin_configure_plugin_agent {
# Setup physical network interface mappings. Override
# ``LB_VLAN_RANGES`` and ``LB_INTERFACE_MAPPINGS`` in ``localrc`` for more
# complex physical network configurations.
if [[ "$LB_INTERFACE_MAPPINGS" == "" ]] && [[ "$PHYSICAL_NETWORK" != "" ]] && [[ "$LB_PHYSICAL_INTERFACE" != "" ]]; then
LB_INTERFACE_MAPPINGS=$PHYSICAL_NETWORK:$LB_PHYSICAL_INTERFACE
fi
if [[ "$PUBLIC_BRIDGE" != "" ]] && [[ "$PUBLIC_PHYSICAL_NETWORK" != "" ]]; then
if is_service_enabled q-l3 || is_service_enabled neutron-l3; then
iniset /$Q_PLUGIN_CONF_FILE linux_bridge bridge_mappings "$PUBLIC_PHYSICAL_NETWORK:$PUBLIC_BRIDGE"
fi
fi
if [[ "$LB_INTERFACE_MAPPINGS" != "" ]]; then
iniset /$Q_PLUGIN_CONF_FILE linux_bridge physical_interface_mappings $LB_INTERFACE_MAPPINGS
fi
if [[ "$Q_USE_SECGROUP" == "True" ]]; then
iniset /$Q_PLUGIN_CONF_FILE securitygroup firewall_driver neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
if ! running_in_container; then
enable_kernel_bridge_firewall
fi
else
iniset /$Q_PLUGIN_CONF_FILE securitygroup firewall_driver neutron.agent.firewall.NoopFirewallDriver
fi
AGENT_BINARY="$NEUTRON_BIN_DIR/neutron-linuxbridge-agent"
iniset /$Q_PLUGIN_CONF_FILE agent tunnel_types $Q_TUNNEL_TYPES
# Configure vxlan tunneling
if [[ "$ENABLE_TENANT_TUNNELS" == "True" ]]; then
if [[ "$Q_ML2_TENANT_NETWORK_TYPE" == "vxlan" ]]; then
iniset /$Q_PLUGIN_CONF_FILE vxlan enable_vxlan "True"
iniset /$Q_PLUGIN_CONF_FILE vxlan local_ip $TUNNEL_ENDPOINT_IP
else
iniset /$Q_PLUGIN_CONF_FILE vxlan enable_vxlan "False"
fi
else
iniset /$Q_PLUGIN_CONF_FILE vxlan enable_vxlan "False"
fi
}
function neutron_plugin_setup_interface_driver {
local conf_file=$1
iniset $conf_file DEFAULT interface_driver linuxbridge
}
function neutron_plugin_check_adv_test_requirements {
is_service_enabled q-agt && is_service_enabled q-dhcp && return 0
}
# Restore xtrace
$_XTRACE_NEUTRON_LB