aboutsummaryrefslogtreecommitdiffstats
path: root/resources/tools/testbed-setup/ansible/roles/vpp_device/files/csit-initialize-vfs.sh
diff options
context:
space:
mode:
authorPeter Mikus <pmikus@cisco.com>2018-09-19 15:05:48 +0000
committerPeter Mikus <pmikus@cisco.com>2018-09-24 08:22:10 +0000
commit388117d6bfe6f05d3f20d1a7e632076f5526227f (patch)
tree437fcf7778cf0fd116f94d6621281a4d67fa802f /resources/tools/testbed-setup/ansible/roles/vpp_device/files/csit-initialize-vfs.sh
parentbb0f69d12e0e509c58bb5b8116d73bb585a4ea09 (diff)
CSIT-1292 Update Ansible playbooks with vpp_device tasks
Change-Id: I22d1fe2fc27d6adb39eba2578e68d06992a3f976 Signed-off-by: Peter Mikus <pmikus@cisco.com>
Diffstat (limited to 'resources/tools/testbed-setup/ansible/roles/vpp_device/files/csit-initialize-vfs.sh')
-rw-r--r--resources/tools/testbed-setup/ansible/roles/vpp_device/files/csit-initialize-vfs.sh69
1 files changed, 69 insertions, 0 deletions
diff --git a/resources/tools/testbed-setup/ansible/roles/vpp_device/files/csit-initialize-vfs.sh b/resources/tools/testbed-setup/ansible/roles/vpp_device/files/csit-initialize-vfs.sh
new file mode 100644
index 0000000000..666839c707
--- /dev/null
+++ b/resources/tools/testbed-setup/ansible/roles/vpp_device/files/csit-initialize-vfs.sh
@@ -0,0 +1,69 @@
+#!/usr/bin/env bash
+
+# Copyright (c) 2018 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# CSIT SRIOV VF initialization and isolation.
+
+set -euo pipefail
+
+# Add Intel Corporation Ethernet Controller 10G X550T to blacklist.
+# See http://pci-ids.ucw.cz/v2.2/pci.ids for more info.
+pci_blacklist=($(lspci -Dmmd ':1563:0200' | cut -f1 -d' '))
+
+# Add Intel Corporation Ethernet Controller X710 for 10GbE SFP+ to whitelist.
+# See http://pci-ids.ucw.cz/v2.2/pci.ids for more info.
+pci_whitelist=($(lspci -Dmmd ':1572:0200' | cut -f1 -d' '))
+
+# Initilize whitelisted NICs with maximum number of VFs.
+pci_idx=0
+for pci_addr in ${pci_whitelist[@]}; do
+ if ! [[ ${pci_blacklist[*]} =~ "${pci_addr}" ]]; then
+ pci_path="/sys/bus/pci/devices/${pci_addr}"
+ # SR-IOV initialization
+ case "${1:-start}" in
+ "start" )
+ sriov_totalvfs=$(< "${pci_path}"/sriov_totalvfs)
+ ;;
+ "stop" )
+ sriov_totalvfs=0
+ ;;
+ esac
+ echo ${sriov_totalvfs} > "${pci_path}"/sriov_numvfs
+ # SR-IOV 802.1Q isolation
+ case "${1:-start}" in
+ "start" )
+ pf=$(basename "${pci_path}"/net/*)
+ for vf in $(seq "${sriov_totalvfs}"); do
+ # PCI address index in array (pairing siblings).
+ vlan_pf_idx=$(( pci_idx % (${#pci_whitelist[@]} / 2) ))
+ # 802.1Q base offset.
+ vlan_bs_off=1100
+ # 802.1Q PF PCI address offset.
+ vlan_pf_off=$(( vlan_pf_idx * 100 + vlan_bs_off ))
+ # 802.1Q VF PCI address offset.
+ vlan_vf_off=$(( vlan_pf_off + vf - 1 ))
+ # VLAN string.
+ vlan_str="vlan ${vlan_vf_off}"
+ # MAC string.
+ mac5="$(printf '%x' ${pci_idx})"
+ mac6="$(printf '%x' $(( vf - 1 )))"
+ mac_str="mac ba:dc:0f:fe:${mac5}:${mac6}"
+ # Set 802.1Q VLAN id and MAC address
+ ip link set ${pf} vf $(( vf - 1 )) ${mac_str} ${vlan_str}
+ done
+ pci_idx=$(( pci_idx + 1 ))
+ ;;
+ esac
+ fi
+done