#!/bin/bash XCATPORT=3001 export XCATPORT ADAPTERFILE="/tmp/adapterinfo" SCANNICLOG="/tmp/adapterscan.log" transmit_adapter_info() { local target=$1 if [ -f /etc/xcat/cert.pem -a -f /etc/xcat/certkey.pem ]; then #use client cert if available echo "using /etc/xcat/certkey.pem and /etc/xcat/cert.pem to transmit scan result to $target" >> "$SCANNICLOG" openssl s_client -key /etc/xcat/certkey.pem -cert /etc/xcat/cert.pem -connect $target:$XCATPORT <"$ADAPTERFILE" >>"$SCANNICLOG" 2>&1 else echo "transmit scan result without customer certificate to $target" >> "$SCANNICLOG" openssl s_client -connect $target:$XCATPORT <"$ADAPTERFILE" >>"$SCANNICLOG" 2>&1 fi } append_missing_pci_adapters() { local adapter_pattern=$1 local adapter_file=$2 local model_separator=$3 local pci local tmp for pci in $(lspci | awk -v adapter_pattern="$adapter_pattern" '$0 ~ adapter_pattern {print $1}'); do if ! grep -q "$pci" "$adapter_file" 2>/dev/null; then tmp="$(lspci | grep "$pci")" echo " $pci ${tmp##*"$model_separator"} " >> "$adapter_file" fi done } rm -f "$SCANNICLOG" >/dev/null 2>&1 if [ -f "$ADAPTERFILE" ]; then echo "rm -f $ADAPTERFILE" > "$SCANNICLOG" rm -f "$ADAPTERFILE" >> "$SCANNICLOG" 2>&1 fi echo " getadapter update" >> "$ADAPTERFILE" # scan adapters that are recognized by operating system for n in /sys/class/net/*; do nic=${n##/sys/class/net/} if [ "$nic" == "lo" ]; then continue else echo '' >> "$ADAPTERFILE" tmp="$(udevadm info "/sys/class/net/$nic" | awk -F '=' '/ INTERFACE/{print $2}')" if [ -n "$tmp" ]; then echo "$tmp" >> "$ADAPTERFILE" fi tmp="$(udevadm info "/sys/class/net/$nic" | awk -F '=' '/ID_NET_NAME/{print $2}'|sort -u| tr -s "\n" "/" | sed 's#/$##g')" if [ -n "$tmp" ]; then echo "$tmp" >> "$ADAPTERFILE" fi tmp="$(udevadm info "/sys/class/net/$nic" | awk -F 'devices' '/DEVPATH/{print $2}')" if [ -n "$tmp" ]; then echo "${tmp%/net*}" >> "$ADAPTERFILE" fi echo "$(cat "/sys/class/net/$nic/address")" >> "$ADAPTERFILE" tmp="$(udevadm info "/sys/class/net/$nic" | awk -F '=' '/ID_VENDOR_FROM_DATABASE/{print $2}' | tr -s "\n" "/" | sed 's#/$##g')" if [ -n "$tmp" ]; then echo "$tmp" >> "$ADAPTERFILE" fi tmp="$(udevadm info /sys/class/net/"$nic" | awk -F '=' '/ID_MODEL_FROM_DATABASE/{print $2}')" if [ -n "$tmp" ]; then echo "$tmp" >> "$ADAPTERFILE" fi tmp="$(ip link show "$nic")" if [ -n "$tmp" ]; then tmp=${tmp#*state } echo "${tmp% mode*}" >> "$ADAPTERFILE" fi echo '' >> "$ADAPTERFILE" fi done # Keep the legacy Ethernet model spacing while sharing the scan. append_missing_pci_adapters "Ethernet" "$ADAPTERFILE" ":" append_missing_pci_adapters "Network" "$ADAPTERFILE" ": " append_missing_pci_adapters "Mellanox" "$ADAPTERFILE" ": " echo "" >> "$ADAPTERFILE" #cat "$ADAPTERFILE" if [ -n "$XCATMASTER" ]; then transmit_adapter_info "$XCATMASTER" else dhcps="$(awk -F ' |;' '/dhcp-server/ { print $(NF-1) }' /var/lib/dhclient/dhclient.leases | tail -n 1)" if [ -n "$dhcps" ]; then transmit_adapter_info "$dhcps" fi fi