Initial commit
[ta/infra-ansible.git] / roles / sriov_nodes / files / configure_vf_count.sh
diff --git a/roles/sriov_nodes/files/configure_vf_count.sh b/roles/sriov_nodes/files/configure_vf_count.sh
new file mode 100644 (file)
index 0000000..871d1a3
--- /dev/null
@@ -0,0 +1,59 @@
+#!/bin/bash
+set -e
+
+# Copyright 2019 Nokia
+
+# 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.
+
+set_max_vf_count()
+{
+    local iface vf_count device
+    iface=$1
+    vf_count=$2
+
+    echo "Setting interface $iface max vf count to $vf_count"
+    device=$(/bin/mst status -v | grep -E "net-${iface}[[:space:]]+" | awk '{print $2}')
+    /bin/mlxconfig --yes --dev $device set NUM_OF_VFS=$vf_count
+}
+
+main()
+{
+    local -r CONF_FILE="/etc/sriov/sriov.conf"
+    local res=0
+    local mst_started=0
+    local item iface vf_count
+
+    [[ -r $CONF_FILE ]] && source $CONF_FILE
+
+    if [[ -n "$SRIOV_VF_COUNTS" ]]
+    then
+        for item in $SRIOV_VF_COUNTS
+        do
+            iface=${item%:*}
+            vf_count=${item##*:}
+            if /sbin/ethtool -i $iface | grep -qE '^driver:[[:space:]]+mlx5_core$'
+            then
+                old_count=$(</sys/class/net/$iface/device/sriov_totalvfs)
+                [[ $old_count -eq $vf_count ]] && continue
+                [[ $mst_started -eq 0 ]] && /bin/mst start
+                mst_started=1
+                set_max_vf_count $iface $vf_count
+                res=2
+            fi
+        done
+    fi
+
+    return $res
+}
+
+main "$@"