blob: 4e750f0932418bc7dfc31a08d416ba3723382bf4 [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}
James Chapmanc83cc752014-06-11 19:29:26 +010011OVS_DATAPATH_TYPE=${OVS_DATAPATH_TYPE:-""}
JordanP614202f2013-05-16 11:16:13 +020012
Ian Wienandaee18c72014-02-21 15:35:08 +110013function is_neutron_ovs_base_plugin {
Isaku Yamahata0dd34df2012-12-28 13:15:31 +090014 # Yes, we use OVS.
15 return 0
16}
17
Waldemar Znoinskid4c89282015-05-07 17:14:21 +010018function _neutron_ovs_base_add_bridge {
19 local bridge=$1
20 local addbr_cmd="sudo ovs-vsctl --no-wait -- --may-exist add-br $bridge"
21
22 if [ "$OVS_DATAPATH_TYPE" != "" ] ; then
23 addbr_cmd="$addbr_cmd -- set Bridge $bridge datapath_type=${OVS_DATAPATH_TYPE}"
24 fi
25
26 $addbr_cmd
27}
28
Ian Wienandaee18c72014-02-21 15:35:08 +110029function _neutron_ovs_base_setup_bridge {
Isaku Yamahata0dd34df2012-12-28 13:15:31 +090030 local bridge=$1
Mark McClainb05c8762013-07-06 23:29:39 -040031 neutron-ovs-cleanup
Waldemar Znoinskid4c89282015-05-07 17:14:21 +010032 _neutron_ovs_base_add_bridge $bridge
Isaku Yamahata0dd34df2012-12-28 13:15:31 +090033 sudo ovs-vsctl --no-wait br-set-external-id $bridge bridge-id $bridge
34}
35
Ian Wienandaee18c72014-02-21 15:35:08 +110036function neutron_ovs_base_cleanup {
Mark McClainb05c8762013-07-06 23:29:39 -040037 # remove all OVS ports that look like Neutron created ports
Zhenzan Zhou9a704482015-01-27 10:48:24 +080038 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 +020039 sudo ovs-vsctl del-port ${port}
40 done
41
Mark McClainb05c8762013-07-06 23:29:39 -040042 # remove all OVS bridges created by Neutron
JordanP614202f2013-05-16 11:16:13 +020043 for bridge in $(sudo ovs-vsctl list-br | grep -o -e ${OVS_BRIDGE} -e ${PUBLIC_BRIDGE}); do
44 sudo ovs-vsctl del-br ${bridge}
45 done
46}
47
Kyle Mestery86af4a02014-06-24 11:07:54 +000048function _neutron_ovs_base_install_ubuntu_dkms {
49 # install Dynamic Kernel Module Support packages if needed
50 local kernel_version=$(uname -r)
51 local kernel_major_minor=`echo $kernel_version | cut -d. -f1-2`
52 # From kernel 3.13 on, openvswitch-datapath-dkms is not needed
53 if [ `vercmp_numbers "$kernel_major_minor" "3.13"` -lt "0" ]; then
54 install_package "dkms openvswitch-datapath-dkms linux-headers-$kernel_version"
55 fi
56}
57
Ian Wienandaee18c72014-02-21 15:35:08 +110058function _neutron_ovs_base_install_agent_packages {
Isaku Yamahata0dd34df2012-12-28 13:15:31 +090059 # Install deps
Kyle Mestery86af4a02014-06-24 11:07:54 +000060 install_package $(get_packages "openvswitch")
Isaku Yamahata0dd34df2012-12-28 13:15:31 +090061 if is_ubuntu; then
Kyle Mestery86af4a02014-06-24 11:07:54 +000062 _neutron_ovs_base_install_ubuntu_dkms
Sean M. Collinsd738a9e2014-08-28 15:32:44 -040063 restart_service openvswitch-switch
Gary Kotton5452b182013-02-25 13:02:38 +000064 elif is_fedora; then
Gary Kotton5452b182013-02-25 13:02:38 +000065 restart_service openvswitch
66 elif is_suse; then
Vincent Untzcf6d8092013-07-04 09:59:34 +020067 restart_service openvswitch-switch
Isaku Yamahata0dd34df2012-12-28 13:15:31 +090068 fi
69}
70
Ian Wienandaee18c72014-02-21 15:35:08 +110071function _neutron_ovs_base_configure_debug_command {
YAMAMOTO Takashi98a0ad42014-11-21 10:42:18 +090072 if [ "$Q_USE_PROVIDERNET_FOR_PUBLIC" = "True" ]; then
73 iniset $NEUTRON_TEST_CONFIG_FILE DEFAULT external_network_bridge ""
74 else
75 iniset $NEUTRON_TEST_CONFIG_FILE DEFAULT external_network_bridge $PUBLIC_BRIDGE
76 fi
Isaku Yamahata0dd34df2012-12-28 13:15:31 +090077}
78
Ian Wienandaee18c72014-02-21 15:35:08 +110079function _neutron_ovs_base_configure_firewall_driver {
Akihiro MOTOKI3452f8e2013-03-21 14:11:27 +090080 if [[ "$Q_USE_SECGROUP" == "True" ]]; then
Mark McClainb05c8762013-07-06 23:29:39 -040081 iniset /$Q_PLUGIN_CONF_FILE securitygroup firewall_driver neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
Akihiro MOTOKI3452f8e2013-03-21 14:11:27 +090082 else
Mark McClainb05c8762013-07-06 23:29:39 -040083 iniset /$Q_PLUGIN_CONF_FILE securitygroup firewall_driver neutron.agent.firewall.NoopFirewallDriver
Akihiro MOTOKI3452f8e2013-03-21 14:11:27 +090084 fi
85}
86
Ian Wienandaee18c72014-02-21 15:35:08 +110087function _neutron_ovs_base_configure_l3_agent {
YAMAMOTO Takashi6a633fd2014-07-23 12:02:18 +090088 if [ "$Q_USE_PROVIDERNET_FOR_PUBLIC" = "True" ]; then
89 iniset $Q_L3_CONF_FILE DEFAULT external_network_bridge ""
90 else
91 iniset $Q_L3_CONF_FILE DEFAULT external_network_bridge $PUBLIC_BRIDGE
92 fi
Isaku Yamahata0dd34df2012-12-28 13:15:31 +090093
Mark McClainb05c8762013-07-06 23:29:39 -040094 neutron-ovs-cleanup
YAMAMOTO Takashi0f18c232014-09-12 23:44:58 +090095 if [[ "$Q_USE_PUBLIC_VETH" = "True" ]]; then
96 ip link show $Q_PUBLIC_VETH_INT > /dev/null 2>&1 ||
97 sudo ip link add $Q_PUBLIC_VETH_INT type veth \
98 peer name $Q_PUBLIC_VETH_EX
99 sudo ip link set $Q_PUBLIC_VETH_INT up
100 sudo ip link set $Q_PUBLIC_VETH_EX up
101 sudo ip addr flush dev $Q_PUBLIC_VETH_EX
102 else
Waldemar Znoinskid4c89282015-05-07 17:14:21 +0100103 _neutron_ovs_base_add_bridge $PUBLIC_BRIDGE
YAMAMOTO Takashi0f18c232014-09-12 23:44:58 +0900104 sudo ovs-vsctl br-set-external-id $PUBLIC_BRIDGE bridge-id $PUBLIC_BRIDGE
YAMAMOTO Takashi0f18c232014-09-12 23:44:58 +0900105 fi
Isaku Yamahata0dd34df2012-12-28 13:15:31 +0900106}
107
Ian Wienandaee18c72014-02-21 15:35:08 +1100108function _neutron_ovs_base_configure_nova_vif_driver {
Aaron Rosen4540d002013-10-24 13:59:33 -0700109 :
Akihiro MOTOKI3452f8e2013-03-21 14:11:27 +0900110}
111
Isaku Yamahata0dd34df2012-12-28 13:15:31 +0900112# Restore xtrace
Dean Troyere3a91602014-03-28 12:40:56 -0500113$OVSB_XTRACE