diff options
Diffstat (limited to 'extras/scripts')
-rwxr-xr-x | extras/scripts/coverity-blame | 36 | ||||
-rwxr-xr-x | extras/scripts/coverity-build | 70 | ||||
-rwxr-xr-x | extras/scripts/lsnet | 20 | ||||
-rwxr-xr-x | extras/scripts/pci-nic-bind | 94 | ||||
-rwxr-xr-x | extras/scripts/pci-nic-bind-to-kernel | 19 |
5 files changed, 239 insertions, 0 deletions
diff --git a/extras/scripts/coverity-blame b/extras/scripts/coverity-blame new file mode 100755 index 00000000..8775ea48 --- /dev/null +++ b/extras/scripts/coverity-blame @@ -0,0 +1,36 @@ +#!/bin/sh + +# Read coverity email on stdin +# whenever we find a filename & line number reference, go git-blame it + +file= +start= +end= + +while read line; do + if echo "$line" | grep -q '^/.*: '; then + echo "$line" + file=$(echo "$line" | cut -d: -f1) + elif echo "$line" | grep -q '^[*]'; then + echo "$line" + file= + start= + end= + elif echo "$line" | grep -q '^[0-9][0-9]*'; then + num=$(echo "$line" | awk '{print $1}') + [ -z "$start" ] && start=$num + #git blame -L "$num,+1" ".$file" | cat + elif [ -z "$line" ]; then + if [ "$start" -a "$num" -a "$file" ]; then + end=$num + git blame --date=short -L "$start,$end" ".$file" | cat + start= + end= + num= + else + echo "$line" + fi + else + echo "$line" + fi +done diff --git a/extras/scripts/coverity-build b/extras/scripts/coverity-build new file mode 100755 index 00000000..81680f06 --- /dev/null +++ b/extras/scripts/coverity-build @@ -0,0 +1,70 @@ +#!/bin/bash + +# FD.io VPP Coverity build script +# +# Builds VPP with the Coverity wrapper and if successful submits +# it to the Coverity scan service for processing. +# +# Several environment variables are needed: +# +# COVERITY_TOKEN The Coverity Scan API token for this project +# COVERITY_TOOLS The location of the Coverity tools +# +# The coverity tools can be fetched with: +# wget https://scan.coverity.com/download/linux64 \ +# --post-data "token=${COVERITY_TOKEN}&project=fd.io+VPP" \ +# -O coverity_tool.tgz + +set -ex + +token=${COVERITY_TOKEN} +email=vpp-committers@lists.fd.io +project="fd.io VPP" +project_encoded="fd.io+VPP" +url=https://scan.coverity.com + +# Cosmetic labels for the Coverity build logs +export COV_HOST=$(hostname -f) +export COV_USER=vpp + +# Work out where the root and build-root are +script_dir=$(readlink -f $(dirname $0)) +root_dir=$(readlink -f "${script_dir}/../..") +build_dir=$(readlink -f "${script_dir}/../../build-root") + +# Location for Coverity things +covdir="${build_dir}/cov-int" +COVERITY_TOOLS="${COVERITY_TOOLS-/scratch/cov-analysis-latest}" + +# Before we run the build, check that we can submit one +check=$(curl -s --form project="${project}" \ + --form token="${token}" "${url}/api/upload_permitted") +if [ "${check}" = "Access denied" ]; then + echo "Bad token or project name." + exit 1 +fi +if [ "${check}" != '{"upload_permitted":true}' ]; then + echo "Upload not permitted; stop now..." + exit 1 +fi + +version=$(git describe) + +# Run the build +cd "${root_dir}" +"${COVERITY_TOOLS}/bin/cov-build" --dir "${covdir}" make bootstrap build-coverity +cd "${build_dir}" + +# Tar the build artifacts that scan wants +tar -czf fd.io-vpp.tgz "$(basename ${covdir})" +rm -rf "${covdir}" + +# Submit the build +echo curl --form token="${token}" \ + --form email="${email}" \ + --form file=@fd.io-vpp.tgz \ + --form version="${version}" \ + --form description="master:${version}" \ + "${url}/builds?project=${project_encoded}" + +# All done! diff --git a/extras/scripts/lsnet b/extras/scripts/lsnet new file mode 100755 index 00000000..ed590e53 --- /dev/null +++ b/extras/scripts/lsnet @@ -0,0 +1,20 @@ +#!/bin/bash + +echo "PCI Address MAC address Device Name Driver State Speed Port Type" +echo "============ ================= ============== ========== ======== ========== ====================" + +for f in /sys/class/net/*; do + dev=$(basename ${f}) + if [ -e $f/device ] ; then + dev=$(basename ${f}) + pci_addr=$(basename $(readlink $f/device)) + mac=$(cat $f/address) + driver=$(basename $(readlink $f/device/driver)) + oper=$(cat $f/operstate) + speed=$(sudo ethtool $dev | grep Speed | cut -d" " -f2) + port=$(ethtool $dev 2> /dev/null | sed -ne 's/.*Port: \(.*\)/\1/p') + printf "%-12s %-14s %-14s %-10s %-8s %-10s %-20s\n" $pci_addr $mac $dev $driver $oper $speed "$port" + # ethtool $dev | grep Port: + fi +done + diff --git a/extras/scripts/pci-nic-bind b/extras/scripts/pci-nic-bind new file mode 100755 index 00000000..f3a0c264 --- /dev/null +++ b/extras/scripts/pci-nic-bind @@ -0,0 +1,94 @@ +#!/bin/bash + +uio_drivers="igb_uio uio_pci_generic vfio-pci" +tmpfile=$(mktemp) + + +function bind_drv() { + addr=$1 + modalias=$(cat $selection/modalias) + native_drv=$(modprobe -R $modalias) + array=() + + for drv in $native_drv $uio_drivers; do + if [ -e /sys/bus/pci/drivers/$drv ]; then + echo driver $drv + drv_desc=$(modinfo $drv | grep description: | sed -e 's/.*:[[:space:]]\+//' ) + array+=("${drv}") + array+=("${drv_desc}") + fi + done + dialog --backtitle "PCI NIC Bind Utility" \ + --clear \ + --menu "Select kernel driver" 18 100 12 \ + "${array[@]}" 2> $tmpfile + retval=$? + selection=$(cat $tmpfile) + rm $tmpfile + if [ $retval -ne 0 ]; then + return + fi + vd=$(cat /sys/bus/pci/devices/${addr}/vendor /sys/bus/pci/devices/${addr}/device) + echo $addr | tee /sys/bus/pci/devices/${addr}/driver/unbind > /dev/null 2> /dev/null + echo $vd | tee /sys/bus/pci/drivers/${selection}/new_id > /dev/null 2> /dev/null + echo $addr | tee /sys/bus/pci/drivers/${selection}/bind > /dev/null 2> /dev/null +} + +function find_pci_slot() { + addr=$1 + [ ! "$(ls -A /sys/bus/pci/slots )" ] && echo "No PCI slot data" && return + for slot in $(find /sys/bus/pci/slots/* -maxdepth 0 -exec basename {} \;); do + slot_addr=$(cat /sys/bus/pci/slots/$slot/address) + if [[ "${addr}" == *"${slot_addr}"* ]]; then + echo "PCI slot: ${slot}" + return + fi + done + echo "Unknown PCI slot" +} + +! type -ap dialog > /dev/null && echo "Please install dialog (apt-get install dialog)" && exit +if [ $USER != "root" ] ; then +echo "Restarting script with sudo..." + sudo $0 ${*} + exit +fi + +cd /sys/bus/pci/devices + +while true; do + array=() + for addr in *; do + class=$(cat ${addr}/class) + if [ "$class" = "0x020000" ]; then + name=$(lspci -s $addr | sed -e 's/.*: //') + if [ -e "/sys/bus/pci/devices/$addr/driver" ]; then + drv=$(basename $(readlink -f /sys/bus/pci/devices/$addr/driver)) + else + drv=" " + fi + slot=$(find_pci_slot ${addr}) + array+=("${addr}") + array+=("${drv}|${name}") + array+=("${slot}") + fi + done + + dialog --backtitle "PCI NIC Bind Utility" \ + --item-help \ + --clear \ + --column-separator '|' \ + --menu "Select NIC" 18 100 12 \ + "${array[@]}" 2> $tmpfile + + retval=$? + selection=$(cat $tmpfile) + rm $tmpfile + if [ $retval -ne 0 ]; then + exit + fi + bind_drv $selection +done + + + diff --git a/extras/scripts/pci-nic-bind-to-kernel b/extras/scripts/pci-nic-bind-to-kernel new file mode 100755 index 00000000..3d8559e3 --- /dev/null +++ b/extras/scripts/pci-nic-bind-to-kernel @@ -0,0 +1,19 @@ +#!/bin/bash + +# Bind all unused PCI devices bound to uio drivers +# back to default kernel driver + +if [ $USER != "root" ] ; then + echo "Restarting script with sudo..." + sudo $0 ${*} + exit +fi + +for f in /sys/bus/pci/drivers/{igb_uio,uio_pci_generic,vfio-pci}/*; do + [ -e ${f}/config ] || continue + fuser -s ${f}/config && continue + echo 1 > ${f}/remove + removed=y +done + +[ -n ${removed} ] && echo 1 > /sys/bus/pci/rescan |