devstack/lib/neutron_plugins/linuxbridge_agent
Nate Johnston 56946cfc5f Replace deprecated brctl with ip commands
The bridge-utils package has been deprecated for some time now [1] and
'brctl' does not exist on some more recent distros like Fedora 28.
Replace references to brctl with the proper ip commands.

Calls to "brctl show" are not being replaced with calls to "bridge link"
because the output format is very different and in testing some bridges
were not listed.  So the simpler method of consulting /sys/class/net is
used.

In worlddump.py we try running both because failures are handled
gracefully by _dump_cmd(), as well as "ip link show type bridge" for
additional info.

[1] https://lwn.net/Articles/703776/ for example

Change-Id: Ie4c8ad6ce4a09c38023c9e4ec7834c249403145f
Partial-Bug: #1801919
2019-03-01 14:36:38 -05: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 brctl addbr $PUBLIC_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