1#!/usr/bin/env bash 2 3set -e 4 5rootdir=$(readlink -f $(dirname $0))/.. 6source "$rootdir/scripts/common.sh" 7 8function create_classic_config() 9{ 10 echo "[Nvme]" 11 for (( i=0; i < ${#bdfs[@]}; i++)) 12 do 13 echo " TransportID \"trtype:PCIe traddr:${bdfs[i]}\" Nvme$i" 14 done 15} 16 17function create_json_config() 18{ 19 echo "{" 20 echo '"subsystem": "bdev",' 21 echo '"config": [' 22 for (( i=0; i < ${#bdfs[@]}; i++)) 23 do 24 echo '{' 25 echo '"params": {' 26 echo '"trtype": "PCIe",' 27 echo "\"name\": \"Nvme$i\"," 28 echo "\"traddr\": \"${bdfs[i]}\"" 29 echo '},' 30 echo '"method": "construct_nvme_bdev"' 31 if [ -z ${bdfs[i+1]} ]; then 32 echo '}' 33 else 34 echo '},' 35 fi 36 done 37 echo ']' 38 echo '}' 39} 40 41bdfs=() 42# Check used drivers. If it's not vfio-pci or uio-pci-generic 43# then most likely PCI_WHITELIST option was used for setup.sh 44# and we do not want to use that disk. 45for bdf in $(iter_pci_class_code 01 08 02); do 46 driver=$(grep DRIVER /sys/bus/pci/devices/$bdf/uevent | awk -F"=" '{print $2}') 47 if [ "$driver" != "nvme" ]; then 48 bdfs+=("$bdf") 49 fi 50done 51 52if [ "$1" = "--json" ]; then 53 create_json_config 54else 55 create_classic_config 56fi 57