
There may be cases when the configuration of the OVS is different from the default one. This enables one to make use of the neutron configuration file to contain all of the OVS settings. Change-Id: I728cf8cdc653667c076b07b39c13c1278281c01b Closes-bug: #1645691
125 lines
3.9 KiB
Bash
125 lines
3.9 KiB
Bash
#!/bin/bash
|
|
#
|
|
# common functions for ovs based plugin
|
|
# -------------------------------------
|
|
|
|
# Save trace setting
|
|
_XTRACE_NEUTRON_OVS_BASE=$(set +o | grep xtrace)
|
|
set +o xtrace
|
|
|
|
OVS_BRIDGE=${OVS_BRIDGE:-br-int}
|
|
# OVS recognize default 'system' datapath or 'netdev' for userspace datapath
|
|
OVS_DATAPATH_TYPE=${OVS_DATAPATH_TYPE:-system}
|
|
OVS_TUNNEL_BRIDGE=${OVS_TUNNEL_BRIDGE:-br-tun}
|
|
|
|
function is_neutron_ovs_base_plugin {
|
|
# Yes, we use OVS.
|
|
return 0
|
|
}
|
|
|
|
function _neutron_ovs_base_add_bridge {
|
|
local bridge=$1
|
|
local addbr_cmd="sudo ovs-vsctl -- --may-exist add-br $bridge"
|
|
|
|
if [ "$OVS_DATAPATH_TYPE" != "system" ] ; then
|
|
addbr_cmd="$addbr_cmd -- set Bridge $bridge datapath_type=${OVS_DATAPATH_TYPE}"
|
|
fi
|
|
|
|
$addbr_cmd
|
|
}
|
|
|
|
function _neutron_ovs_base_setup_bridge {
|
|
local bridge=$1
|
|
neutron-ovs-cleanup --config-file $NEUTRON_CONF
|
|
_neutron_ovs_base_add_bridge $bridge
|
|
sudo ovs-vsctl --no-wait br-set-external-id $bridge bridge-id $bridge
|
|
}
|
|
|
|
function neutron_ovs_base_cleanup {
|
|
# remove all OVS ports that look like Neutron created ports
|
|
for port in $(sudo ovs-vsctl list port | grep -o -e [a-zA-Z\-]*tap[0-9a-f\-]* -e q[rg]-[0-9a-f\-]*); do
|
|
sudo ovs-vsctl del-port ${port}
|
|
done
|
|
|
|
# remove all OVS bridges created by Neutron
|
|
for bridge in $(sudo ovs-vsctl list-br | grep -o -e ${OVS_BRIDGE} -e ${PUBLIC_BRIDGE} -e ${OVS_TUNNEL_BRIDGE}); do
|
|
sudo ovs-vsctl del-br ${bridge}
|
|
done
|
|
}
|
|
|
|
function _neutron_ovs_base_install_ubuntu_dkms {
|
|
# install Dynamic Kernel Module Support packages if needed
|
|
local kernel_version
|
|
kernel_version=$(uname -r)
|
|
local kernel_major_minor
|
|
kernel_major_minor=`echo $kernel_version | cut -d. -f1-2`
|
|
# From kernel 3.13 on, openvswitch-datapath-dkms is not needed
|
|
if vercmp "$kernel_major_minor" "<" "3.13" ; then
|
|
install_package "dkms openvswitch-datapath-dkms linux-headers-$kernel_version"
|
|
fi
|
|
}
|
|
|
|
function _neutron_ovs_base_install_agent_packages {
|
|
# Install deps
|
|
install_package $(get_packages "openvswitch")
|
|
if is_ubuntu; then
|
|
_neutron_ovs_base_install_ubuntu_dkms
|
|
restart_service openvswitch-switch
|
|
elif is_fedora; then
|
|
restart_service openvswitch
|
|
sudo systemctl enable openvswitch
|
|
elif is_suse; then
|
|
restart_service openvswitch-switch
|
|
fi
|
|
}
|
|
|
|
function _neutron_ovs_base_configure_debug_command {
|
|
if [ "$Q_USE_PROVIDERNET_FOR_PUBLIC" = "True" ]; then
|
|
iniset $NEUTRON_TEST_CONFIG_FILE DEFAULT external_network_bridge ""
|
|
else
|
|
iniset $NEUTRON_TEST_CONFIG_FILE DEFAULT external_network_bridge $PUBLIC_BRIDGE
|
|
fi
|
|
}
|
|
|
|
function _neutron_ovs_base_configure_firewall_driver {
|
|
if [[ "$Q_USE_SECGROUP" == "True" ]]; then
|
|
iniset /$Q_PLUGIN_CONF_FILE securitygroup firewall_driver iptables_hybrid
|
|
enable_kernel_bridge_firewall
|
|
else
|
|
iniset /$Q_PLUGIN_CONF_FILE securitygroup firewall_driver noop
|
|
fi
|
|
}
|
|
|
|
function _neutron_ovs_base_configure_l3_agent {
|
|
if [ "$Q_USE_PROVIDERNET_FOR_PUBLIC" = "True" ]; then
|
|
iniset $Q_L3_CONF_FILE DEFAULT external_network_bridge ""
|
|
else
|
|
iniset $Q_L3_CONF_FILE DEFAULT external_network_bridge $PUBLIC_BRIDGE
|
|
fi
|
|
|
|
neutron-ovs-cleanup --config-file $NEUTRON_CONF
|
|
if [[ "$Q_USE_PUBLIC_VETH" = "True" ]]; then
|
|
ip link show $Q_PUBLIC_VETH_INT > /dev/null 2>&1 ||
|
|
sudo ip link add $Q_PUBLIC_VETH_INT type veth \
|
|
peer name $Q_PUBLIC_VETH_EX
|
|
sudo ip link set $Q_PUBLIC_VETH_INT up
|
|
sudo ip link set $Q_PUBLIC_VETH_EX up
|
|
sudo ip addr flush dev $Q_PUBLIC_VETH_EX
|
|
else
|
|
_neutron_ovs_base_add_public_bridge
|
|
sudo ovs-vsctl br-set-external-id $PUBLIC_BRIDGE bridge-id $PUBLIC_BRIDGE
|
|
fi
|
|
}
|
|
|
|
function _neutron_ovs_base_add_public_bridge {
|
|
_neutron_ovs_base_add_bridge $PUBLIC_BRIDGE
|
|
set_mtu $PUBLIC_BRIDGE $PUBLIC_BRIDGE_MTU
|
|
}
|
|
|
|
function _neutron_ovs_base_configure_nova_vif_driver {
|
|
:
|
|
}
|
|
|
|
# Restore xtrace
|
|
$_XTRACE_NEUTRON_OVS_BASE
|