2
0
mirror of https://github.com/xcat2/xcat-core.git synced 2026-09-05 04:27:55 +00:00
Files
xcat-core/xCAT-genesis-scripts/usr/bin/getadapter
T
2026-09-02 23:02:45 -03:00

104 lines
3.6 KiB
Bash
Executable File

#!/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 "<nic>
<pcilocation>$pci</pcilocation>
<model>${tmp##*"$model_separator"}</model>
</nic>" >> "$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 "<xcatrequest>
<command>getadapter</command>
<action>update</action>" >> "$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 '<nic>' >> "$ADAPTERFILE"
tmp="$(udevadm info "/sys/class/net/$nic" | awk -F '=' '/ INTERFACE/{print $2}')"
if [ -n "$tmp" ]; then
echo "<interface>$tmp</interface>" >> "$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 "<predictablename>$tmp</predictablename>" >> "$ADAPTERFILE"
fi
tmp="$(udevadm info "/sys/class/net/$nic" | awk -F 'devices' '/DEVPATH/{print $2}')"
if [ -n "$tmp" ]; then
echo "<pcilocation>${tmp%/net*}</pcilocation>" >> "$ADAPTERFILE"
fi
echo "<mac>$(cat "/sys/class/net/$nic/address")</mac>" >> "$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 "<vendor>$tmp</vendor>" >> "$ADAPTERFILE"
fi
tmp="$(udevadm info /sys/class/net/"$nic" | awk -F '=' '/ID_MODEL_FROM_DATABASE/{print $2}')"
if [ -n "$tmp" ]; then
echo "<model>$tmp</model>" >> "$ADAPTERFILE"
fi
tmp="$(ip link show "$nic")"
if [ -n "$tmp" ]; then
tmp=${tmp#*state }
echo "<linkstate>${tmp% mode*}</linkstate>" >> "$ADAPTERFILE"
fi
echo '</nic>' >> "$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 "</xcatrequest>" >> "$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