fuel-ccp-neutron/service/files/ovs-ensure-configured.sh.j2

77 lines
2.3 KiB
Django/Jinja

#!/bin/bash
set -ex
{% if True in neutron.physnets|map(attribute="dpdk") %}
modprobe {{ neutron.dpdk.driver }}
dpdk_init=$(ovs-vsctl get Open_vSwitch . other_config:dpdk-init \
2>/dev/null || true)
if [ "$dpdk_init" != "True" ]; then
dpdk_ifnames={{ neutron.physnets
| selectattr("dpdk")
| map(attribute="interface")
| join("|") }}
pci_whitelist=$(dpdk-devbind.py -s \
| awk "/ if=($dpdk_ifnames) /{print \" -w \"\$1}")
ovs-vsctl --no-wait set Open_vSwitch . \
other_config:dpdk-init=True \
other_config:dpdk-hugepage-dir=/dev/hugepages \
other_config:pmd-cpu-mask={{ neutron.dpdk.pmd_cpu_mask }} \
other_config:dpdk-lcore-mask={{ neutron.dpdk.core_cpu_mask }} \
other_config:dpdk-mem-channels={{ neutron.dpdk.mem_channels }} \
other_config:dpdk-socket-mem={{ neutron.dpdk.socket_mem }} \
other_config:dpdk-extra=" --proc-type primary $pci_whitelist "
fi
dpdk_ofport=0
{% endif %}
{% for net in neutron.physnets %}
bridge={{ net.bridge_name }}
{% if net.dpdk %}
interface={{ net.interface }}
port_name=dpdk$dpdk_ofport
dpdk_ofport=$((dpdk_ofport+1))
{% else %}
interface={{ net.interface }}
port_name={{ net.interface }}
ip link set $interface up
{% endif %}
if ! ovs-vsctl br-exists $bridge; then
changed=changed
{% if net.dpdk %}
ovs-vsctl --no-wait add-br $bridge \
-- set Bridge $bridge datapath_type=netdev
{% else %}
ovs-vsctl --no-wait add-br $bridge
{% endif %}
fi
if [[ ! $(ovs-vsctl list-ports $bridge) =~ $(echo "\<$port_name\>") ]]; then
changed=changed
ip_addrs=$(ip addr show $interface | awk "/inet/{print \$2}"|tr '\n' ' ')
{% if net.dpdk %}
pci_addr=$(dpdk-devbind.py -s|awk "/ if=$interface /{print \$1}")
mac_addr=$(cat /sys/class/net/$interface/address)
dpdk_driver={{ neutron.dpdk.driver }}
dpdk-devbind.py -b $dpdk_driver $pci_addr
ovs-vsctl --no-wait add-port $bridge $port_name \
-- set Interface $port_name \
type=dpdk \
options:dpdk-devargs=$pci_addr \
other_config:pci_address=$pci_addr \
other_config:driver=$dpdk_driver
ovs-vsctl --no-wait set bridge $bridge other_config:hwaddr=$mac_addr
{% else %}
ovs-vsctl --no-wait add-port $bridge $port_name
{% endif %}
ovs-vsctl --no-wait set bridge $bridge other_config:ipaddrs="$ip_addrs"
fi
echo $changed
{% endfor %}