blob: cc41a8cd46f51808db7fb7b0633600bec321c5d4 [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
Ian Wienand523f4882015-10-13 11:03:03 +11007_XTRACE_NEUTRON_OVS_BASE=$(set +o | grep xtrace)
Isaku Yamahata0dd34df2012-12-28 13:15:31 +09008set +o xtrace
9
Slawek Kaplonski41853582021-07-06 12:05:31 +020010# Load devstack ovs compliation and loading functions
11source ${TOP_DIR}/lib/neutron_plugins/ovs_source
12
13# Defaults
14# --------
15
JordanP614202f2013-05-16 11:16:13 +020016OVS_BRIDGE=${OVS_BRIDGE:-br-int}
Michal Ptacekc1605552015-09-23 21:02:02 +010017# OVS recognize default 'system' datapath or 'netdev' for userspace datapath
18OVS_DATAPATH_TYPE=${OVS_DATAPATH_TYPE:-system}
Hirofumi Ichiharad48d6722015-07-04 22:58:44 +090019OVS_TUNNEL_BRIDGE=${OVS_TUNNEL_BRIDGE:-br-tun}
JordanP614202f2013-05-16 11:16:13 +020020
Ian Wienandaee18c72014-02-21 15:35:08 +110021function is_neutron_ovs_base_plugin {
Isaku Yamahata0dd34df2012-12-28 13:15:31 +090022 # Yes, we use OVS.
23 return 0
24}
25
Waldemar Znoinskid4c89282015-05-07 17:14:21 +010026function _neutron_ovs_base_add_bridge {
27 local bridge=$1
Sean M. Collins75a64542016-08-01 14:41:10 -040028 local addbr_cmd="sudo ovs-vsctl -- --may-exist add-br $bridge"
Waldemar Znoinskid4c89282015-05-07 17:14:21 +010029
Michal Ptacekc1605552015-09-23 21:02:02 +010030 if [ "$OVS_DATAPATH_TYPE" != "system" ] ; then
Waldemar Znoinskid4c89282015-05-07 17:14:21 +010031 addbr_cmd="$addbr_cmd -- set Bridge $bridge datapath_type=${OVS_DATAPATH_TYPE}"
32 fi
33
34 $addbr_cmd
35}
36
Ian Wienandaee18c72014-02-21 15:35:08 +110037function _neutron_ovs_base_setup_bridge {
Isaku Yamahata0dd34df2012-12-28 13:15:31 +090038 local bridge=$1
Gary Kotton2a598142016-11-29 03:48:34 -080039 neutron-ovs-cleanup --config-file $NEUTRON_CONF
Waldemar Znoinskid4c89282015-05-07 17:14:21 +010040 _neutron_ovs_base_add_bridge $bridge
Isaku Yamahata0dd34df2012-12-28 13:15:31 +090041 sudo ovs-vsctl --no-wait br-set-external-id $bridge bridge-id $bridge
42}
43
Ian Wienandaee18c72014-02-21 15:35:08 +110044function neutron_ovs_base_cleanup {
Mark McClainb05c8762013-07-06 23:29:39 -040045 # remove all OVS ports that look like Neutron created ports
Zhenzan Zhou9a704482015-01-27 10:48:24 +080046 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 +020047 sudo ovs-vsctl del-port ${port}
48 done
49
Mark McClainb05c8762013-07-06 23:29:39 -040050 # remove all OVS bridges created by Neutron
Hirofumi Ichihara7ab3e392015-07-04 23:11:52 +090051 for bridge in $(sudo ovs-vsctl list-br | grep -o -e ${OVS_BRIDGE} -e ${PUBLIC_BRIDGE} -e ${OVS_TUNNEL_BRIDGE}); do
JordanP614202f2013-05-16 11:16:13 +020052 sudo ovs-vsctl del-br ${bridge}
53 done
54}
55
Kyle Mestery86af4a02014-06-24 11:07:54 +000056function _neutron_ovs_base_install_ubuntu_dkms {
57 # install Dynamic Kernel Module Support packages if needed
Ian Wienandada886d2015-10-07 14:06:26 +110058 local kernel_version
59 kernel_version=$(uname -r)
60 local kernel_major_minor
61 kernel_major_minor=`echo $kernel_version | cut -d. -f1-2`
Kyle Mestery86af4a02014-06-24 11:07:54 +000062 # From kernel 3.13 on, openvswitch-datapath-dkms is not needed
Yi Zhao2ae8b092016-05-12 12:11:24 +080063 if vercmp "$kernel_major_minor" "<" "3.13" ; then
Kyle Mestery86af4a02014-06-24 11:07:54 +000064 install_package "dkms openvswitch-datapath-dkms linux-headers-$kernel_version"
65 fi
66}
67
Ian Wienandaee18c72014-02-21 15:35:08 +110068function _neutron_ovs_base_install_agent_packages {
Slawek Kaplonski41853582021-07-06 12:05:31 +020069 if [ "$Q_BUILD_OVS_FROM_GIT" == "True" ]; then
70 remove_ovs_packages
Rodolfo Alonso Hernandez8c671032022-02-09 18:01:46 +000071 compile_ovs False /usr/local /var
Slawek Kaplonski41853582021-07-06 12:05:31 +020072 load_conntrack_gre_module
73 start_new_ovs
74 else
75 # Install deps
76 install_package $(get_packages "openvswitch")
77 if is_ubuntu; then
78 _neutron_ovs_base_install_ubuntu_dkms
Dirk Mueller30b58bf2016-12-09 00:58:54 +010079 restart_service openvswitch-switch
Slawek Kaplonski41853582021-07-06 12:05:31 +020080 elif is_fedora; then
81 restart_service openvswitch
82 sudo systemctl enable openvswitch
83 elif is_suse; then
84 if [[ $DISTRO == "sle12" ]] && vercmp "$os_RELEASE" "<" "12.2" ; then
85 restart_service openvswitch-switch
86 else
87 # workaround for https://bugzilla.suse.com/show_bug.cgi?id=1085971
88 if [[ $DISTRO =~ "tumbleweed" ]]; then
89 sudo sed -i -e "s,^OVS_USER_ID=.*,OVS_USER_ID='root:root'," /etc/sysconfig/openvswitch
90 fi
91 restart_service openvswitch || {
92 journalctl -xe || :
93 systemctl status openvswitch
94 }
Dirk Mueller486057f2018-03-21 13:59:18 +010095 fi
Dirk Mueller30b58bf2016-12-09 00:58:54 +010096 fi
Isaku Yamahata0dd34df2012-12-28 13:15:31 +090097 fi
98}
99
Ian Wienandaee18c72014-02-21 15:35:08 +1100100function _neutron_ovs_base_configure_firewall_driver {
Akihiro MOTOKI3452f8e2013-03-21 14:11:27 +0900101 if [[ "$Q_USE_SECGROUP" == "True" ]]; then
Jakub Libosvara99ab702018-05-14 16:12:52 +0200102 iniset /$Q_PLUGIN_CONF_FILE securitygroup firewall_driver openvswitch
Denis Buliga0bf75a42017-02-06 16:56:46 +0200103 if ! running_in_container; then
104 enable_kernel_bridge_firewall
105 fi
Akihiro MOTOKI3452f8e2013-03-21 14:11:27 +0900106 else
Brian Haley30ab23c2016-11-02 16:30:31 -0400107 iniset /$Q_PLUGIN_CONF_FILE securitygroup firewall_driver noop
Akihiro MOTOKI3452f8e2013-03-21 14:11:27 +0900108 fi
109}
110
Ian Wienandaee18c72014-02-21 15:35:08 +1100111function _neutron_ovs_base_configure_l3_agent {
Gary Kotton2a598142016-11-29 03:48:34 -0800112 neutron-ovs-cleanup --config-file $NEUTRON_CONF
YAMAMOTO Takashi0f18c232014-09-12 23:44:58 +0900113 if [[ "$Q_USE_PUBLIC_VETH" = "True" ]]; then
114 ip link show $Q_PUBLIC_VETH_INT > /dev/null 2>&1 ||
115 sudo ip link add $Q_PUBLIC_VETH_INT type veth \
116 peer name $Q_PUBLIC_VETH_EX
117 sudo ip link set $Q_PUBLIC_VETH_INT up
118 sudo ip link set $Q_PUBLIC_VETH_EX up
119 sudo ip addr flush dev $Q_PUBLIC_VETH_EX
120 else
Ihar Hrachyshka7b5c7dc2016-07-15 20:17:13 +0200121 _neutron_ovs_base_add_public_bridge
YAMAMOTO Takashi0f18c232014-09-12 23:44:58 +0900122 sudo ovs-vsctl br-set-external-id $PUBLIC_BRIDGE bridge-id $PUBLIC_BRIDGE
YAMAMOTO Takashi0f18c232014-09-12 23:44:58 +0900123 fi
Isaku Yamahata0dd34df2012-12-28 13:15:31 +0900124}
125
Ihar Hrachyshka7b5c7dc2016-07-15 20:17:13 +0200126function _neutron_ovs_base_add_public_bridge {
127 _neutron_ovs_base_add_bridge $PUBLIC_BRIDGE
128 set_mtu $PUBLIC_BRIDGE $PUBLIC_BRIDGE_MTU
129}
130
Ian Wienandaee18c72014-02-21 15:35:08 +1100131function _neutron_ovs_base_configure_nova_vif_driver {
Aaron Rosen4540d002013-10-24 13:59:33 -0700132 :
Akihiro MOTOKI3452f8e2013-03-21 14:11:27 +0900133}
134
Isaku Yamahata0dd34df2012-12-28 13:15:31 +0900135# Restore xtrace
Ian Wienand523f4882015-10-13 11:03:03 +1100136$_XTRACE_NEUTRON_OVS_BASE