blob: 5ecca81ce9559d0755e9246e61c188d02c2b036e [file] [log] [blame]
Sean Daguee263c822014-12-05 14:25:28 -05001#!/bin/bash
2#
Isaku Yamahata0dd34df2012-12-28 13:15:31 +09003# common functions for ovs based plugin
4# -------------------------------------
5
6# Save trace setting
Dean Troyere3a91602014-03-28 12:40:56 -05007OVSB_XTRACE=$(set +o | grep xtrace)
Isaku Yamahata0dd34df2012-12-28 13:15:31 +09008set +o xtrace
9
JordanP614202f2013-05-16 11:16:13 +020010OVS_BRIDGE=${OVS_BRIDGE:-br-int}
11PUBLIC_BRIDGE=${PUBLIC_BRIDGE:-br-ex}
James Chapmanc83cc752014-06-11 19:29:26 +010012OVS_DATAPATH_TYPE=${OVS_DATAPATH_TYPE:-""}
JordanP614202f2013-05-16 11:16:13 +020013
Ian Wienandaee18c72014-02-21 15:35:08 +110014function is_neutron_ovs_base_plugin {
Isaku Yamahata0dd34df2012-12-28 13:15:31 +090015 # Yes, we use OVS.
16 return 0
17}
18
Waldemar Znoinskid4c89282015-05-07 17:14:21 +010019function _neutron_ovs_base_add_bridge {
20 local bridge=$1
21 local addbr_cmd="sudo ovs-vsctl --no-wait -- --may-exist add-br $bridge"
22
23 if [ "$OVS_DATAPATH_TYPE" != "" ] ; then
24 addbr_cmd="$addbr_cmd -- set Bridge $bridge datapath_type=${OVS_DATAPATH_TYPE}"
25 fi
26
27 $addbr_cmd
28}
29
Ian Wienandaee18c72014-02-21 15:35:08 +110030function _neutron_ovs_base_setup_bridge {
Isaku Yamahata0dd34df2012-12-28 13:15:31 +090031 local bridge=$1
Mark McClainb05c8762013-07-06 23:29:39 -040032 neutron-ovs-cleanup
Waldemar Znoinskid4c89282015-05-07 17:14:21 +010033 _neutron_ovs_base_add_bridge $bridge
Isaku Yamahata0dd34df2012-12-28 13:15:31 +090034 sudo ovs-vsctl --no-wait br-set-external-id $bridge bridge-id $bridge
35}
36
Ian Wienandaee18c72014-02-21 15:35:08 +110037function neutron_ovs_base_cleanup {
Mark McClainb05c8762013-07-06 23:29:39 -040038 # remove all OVS ports that look like Neutron created ports
Zhenzan Zhou9a704482015-01-27 10:48:24 +080039 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
JordanP614202f2013-05-16 11:16:13 +020040 sudo ovs-vsctl del-port ${port}
41 done
42
Mark McClainb05c8762013-07-06 23:29:39 -040043 # remove all OVS bridges created by Neutron
JordanP614202f2013-05-16 11:16:13 +020044 for bridge in $(sudo ovs-vsctl list-br | grep -o -e ${OVS_BRIDGE} -e ${PUBLIC_BRIDGE}); do
45 sudo ovs-vsctl del-br ${bridge}
46 done
47}
48
Kyle Mestery86af4a02014-06-24 11:07:54 +000049function _neutron_ovs_base_install_ubuntu_dkms {
50 # install Dynamic Kernel Module Support packages if needed
51 local kernel_version=$(uname -r)
52 local kernel_major_minor=`echo $kernel_version | cut -d. -f1-2`
53 # From kernel 3.13 on, openvswitch-datapath-dkms is not needed
54 if [ `vercmp_numbers "$kernel_major_minor" "3.13"` -lt "0" ]; then
55 install_package "dkms openvswitch-datapath-dkms linux-headers-$kernel_version"
56 fi
57}
58
Ian Wienandaee18c72014-02-21 15:35:08 +110059function _neutron_ovs_base_install_agent_packages {
Isaku Yamahata0dd34df2012-12-28 13:15:31 +090060 # Install deps
Kyle Mestery86af4a02014-06-24 11:07:54 +000061 install_package $(get_packages "openvswitch")
Isaku Yamahata0dd34df2012-12-28 13:15:31 +090062 if is_ubuntu; then
Kyle Mestery86af4a02014-06-24 11:07:54 +000063 _neutron_ovs_base_install_ubuntu_dkms
Sean M. Collinsd738a9e2014-08-28 15:32:44 -040064 restart_service openvswitch-switch
Gary Kotton5452b182013-02-25 13:02:38 +000065 elif is_fedora; then
Gary Kotton5452b182013-02-25 13:02:38 +000066 restart_service openvswitch
67 elif is_suse; then
Vincent Untzcf6d8092013-07-04 09:59:34 +020068 restart_service openvswitch-switch
Isaku Yamahata0dd34df2012-12-28 13:15:31 +090069 fi
70}
71
Ian Wienandaee18c72014-02-21 15:35:08 +110072function _neutron_ovs_base_configure_debug_command {
YAMAMOTO Takashi98a0ad42014-11-21 10:42:18 +090073 if [ "$Q_USE_PROVIDERNET_FOR_PUBLIC" = "True" ]; then
74 iniset $NEUTRON_TEST_CONFIG_FILE DEFAULT external_network_bridge ""
75 else
76 iniset $NEUTRON_TEST_CONFIG_FILE DEFAULT external_network_bridge $PUBLIC_BRIDGE
77 fi
Isaku Yamahata0dd34df2012-12-28 13:15:31 +090078}
79
Ian Wienandaee18c72014-02-21 15:35:08 +110080function _neutron_ovs_base_configure_firewall_driver {
Akihiro MOTOKI3452f8e2013-03-21 14:11:27 +090081 if [[ "$Q_USE_SECGROUP" == "True" ]]; then
Mark McClainb05c8762013-07-06 23:29:39 -040082 iniset /$Q_PLUGIN_CONF_FILE securitygroup firewall_driver neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
Akihiro MOTOKI3452f8e2013-03-21 14:11:27 +090083 else
Mark McClainb05c8762013-07-06 23:29:39 -040084 iniset /$Q_PLUGIN_CONF_FILE securitygroup firewall_driver neutron.agent.firewall.NoopFirewallDriver
Akihiro MOTOKI3452f8e2013-03-21 14:11:27 +090085 fi
86}
87
Ian Wienandaee18c72014-02-21 15:35:08 +110088function _neutron_ovs_base_configure_l3_agent {
YAMAMOTO Takashi6a633fd2014-07-23 12:02:18 +090089 if [ "$Q_USE_PROVIDERNET_FOR_PUBLIC" = "True" ]; then
90 iniset $Q_L3_CONF_FILE DEFAULT external_network_bridge ""
91 else
92 iniset $Q_L3_CONF_FILE DEFAULT external_network_bridge $PUBLIC_BRIDGE
93 fi
Isaku Yamahata0dd34df2012-12-28 13:15:31 +090094
Mark McClainb05c8762013-07-06 23:29:39 -040095 neutron-ovs-cleanup
YAMAMOTO Takashi0f18c232014-09-12 23:44:58 +090096 if [[ "$Q_USE_PUBLIC_VETH" = "True" ]]; then
97 ip link show $Q_PUBLIC_VETH_INT > /dev/null 2>&1 ||
98 sudo ip link add $Q_PUBLIC_VETH_INT type veth \
99 peer name $Q_PUBLIC_VETH_EX
100 sudo ip link set $Q_PUBLIC_VETH_INT up
101 sudo ip link set $Q_PUBLIC_VETH_EX up
102 sudo ip addr flush dev $Q_PUBLIC_VETH_EX
103 else
Waldemar Znoinskid4c89282015-05-07 17:14:21 +0100104 _neutron_ovs_base_add_bridge $PUBLIC_BRIDGE
YAMAMOTO Takashi0f18c232014-09-12 23:44:58 +0900105 sudo ovs-vsctl br-set-external-id $PUBLIC_BRIDGE bridge-id $PUBLIC_BRIDGE
YAMAMOTO Takashi0f18c232014-09-12 23:44:58 +0900106 fi
Isaku Yamahata0dd34df2012-12-28 13:15:31 +0900107}
108
Ian Wienandaee18c72014-02-21 15:35:08 +1100109function _neutron_ovs_base_configure_nova_vif_driver {
Aaron Rosen4540d002013-10-24 13:59:33 -0700110 :
Akihiro MOTOKI3452f8e2013-03-21 14:11:27 +0900111}
112
Isaku Yamahata0dd34df2012-12-28 13:15:31 +0900113# Restore xtrace
Dean Troyere3a91602014-03-28 12:40:56 -0500114$OVSB_XTRACE