lib/neutron_plugins/ovs_base
e263c82e
 #!/bin/bash
 #
0dd34df4
 # common functions for ovs based plugin
 # -------------------------------------
 
 # Save trace setting
e3a9160c
 OVSB_XTRACE=$(set +o | grep xtrace)
0dd34df4
 set +o xtrace
 
614202fc
 OVS_BRIDGE=${OVS_BRIDGE:-br-int}
c1605550
 # OVS recognize default 'system' datapath or 'netdev' for userspace datapath
 OVS_DATAPATH_TYPE=${OVS_DATAPATH_TYPE:-system}
d48d672a
 OVS_TUNNEL_BRIDGE=${OVS_TUNNEL_BRIDGE:-br-tun}
614202fc
 
aee18c74
 function is_neutron_ovs_base_plugin {
0dd34df4
     # Yes, we use OVS.
     return 0
 }
 
d4c89289
 function _neutron_ovs_base_add_bridge {
     local bridge=$1
     local addbr_cmd="sudo ovs-vsctl --no-wait -- --may-exist add-br $bridge"
 
c1605550
     if [ "$OVS_DATAPATH_TYPE" != "system" ] ; then
d4c89289
         addbr_cmd="$addbr_cmd -- set Bridge $bridge datapath_type=${OVS_DATAPATH_TYPE}"
     fi
 
     $addbr_cmd
 }
 
aee18c74
 function _neutron_ovs_base_setup_bridge {
0dd34df4
     local bridge=$1
b05c8769
     neutron-ovs-cleanup
d4c89289
     _neutron_ovs_base_add_bridge $bridge
0dd34df4
     sudo ovs-vsctl --no-wait br-set-external-id $bridge bridge-id $bridge
 }
 
aee18c74
 function neutron_ovs_base_cleanup {
b05c8769
     # remove all OVS ports that look like Neutron created ports
9a704486
     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
614202fc
         sudo ovs-vsctl del-port ${port}
     done
 
b05c8769
     # remove all OVS bridges created by Neutron
7ab3e39b
     for bridge in $(sudo ovs-vsctl list-br | grep -o -e ${OVS_BRIDGE} -e ${PUBLIC_BRIDGE} -e ${OVS_TUNNEL_BRIDGE}); do
614202fc
         sudo ovs-vsctl del-br ${bridge}
     done
 }
 
86af4a0e
 function _neutron_ovs_base_install_ubuntu_dkms {
     # install Dynamic Kernel Module Support packages if needed
ada886dd
     local kernel_version
     kernel_version=$(uname -r)
     local kernel_major_minor
     kernel_major_minor=`echo $kernel_version | cut -d. -f1-2`
86af4a0e
     # From kernel 3.13 on, openvswitch-datapath-dkms is not needed
     if [ `vercmp_numbers "$kernel_major_minor" "3.13"` -lt "0" ]; then
         install_package "dkms openvswitch-datapath-dkms linux-headers-$kernel_version"
     fi
 }
 
aee18c74
 function _neutron_ovs_base_install_agent_packages {
0dd34df4
     # Install deps
86af4a0e
     install_package $(get_packages "openvswitch")
0dd34df4
     if is_ubuntu; then
86af4a0e
         _neutron_ovs_base_install_ubuntu_dkms
d738a9ec
         restart_service openvswitch-switch
5452b18d
     elif is_fedora; then
         restart_service openvswitch
     elif is_suse; then
cf6d809d
         restart_service openvswitch-switch
0dd34df4
     fi
 }
 
aee18c74
 function _neutron_ovs_base_configure_debug_command {
98a0ad44
     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
0dd34df4
 }
 
aee18c74
 function _neutron_ovs_base_configure_firewall_driver {
3452f8eb
     if [[ "$Q_USE_SECGROUP" == "True" ]]; then
b05c8769
         iniset /$Q_PLUGIN_CONF_FILE securitygroup firewall_driver neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
3452f8eb
     else
b05c8769
         iniset /$Q_PLUGIN_CONF_FILE securitygroup firewall_driver neutron.agent.firewall.NoopFirewallDriver
3452f8eb
     fi
 }
 
aee18c74
 function _neutron_ovs_base_configure_l3_agent {
6a633fd0
     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
0dd34df4
 
b05c8769
     neutron-ovs-cleanup
0f18c23d
     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
d4c89289
         _neutron_ovs_base_add_bridge $PUBLIC_BRIDGE
0f18c23d
         sudo ovs-vsctl br-set-external-id $PUBLIC_BRIDGE bridge-id $PUBLIC_BRIDGE
     fi
0dd34df4
 }
 
aee18c74
 function _neutron_ovs_base_configure_nova_vif_driver {
4540d00e
     :
3452f8eb
 }
 
0dd34df4
 # Restore xtrace
e3a9160c
 $OVSB_XTRACE