58 lines
1.3 KiB
Bash
58 lines
1.3 KiB
Bash
|
#!/bin/bash
|
||
|
|
||
|
set -e
|
||
|
|
||
|
# Get the default route
|
||
|
default_route=$(ip route | grep default)
|
||
|
|
||
|
# Extract the NIC interface name
|
||
|
nic=$(echo $default_route | awk '{print $5}')
|
||
|
|
||
|
# Get current link speed of interface
|
||
|
link_speed=$(ethtool $nic 2>/dev/null | grep "Speed:" | awk '{print $2}')
|
||
|
|
||
|
# Get the PCI ID for the NIC interface
|
||
|
pci_id=$(ethtool -i $nic 2>/dev/null | grep bus-info | awk '{print $2}')
|
||
|
|
||
|
# Extract speed and unit
|
||
|
speed_value=$(echo $link_speed | sed 's/[A-Za-z\/]*//g')
|
||
|
speed_unit=$(echo $link_speed | sed 's/[0-9]*//g')
|
||
|
|
||
|
# Convert speed to a human-readable format
|
||
|
case $speed_unit in
|
||
|
"Mb/s")
|
||
|
if [ $speed_value -ge 1000 ]; then
|
||
|
speed_value=$(bc <<< "scale=1; $speed_value/1000")
|
||
|
speed_unit="Gb/s"
|
||
|
fi
|
||
|
;;
|
||
|
"Gb/s")
|
||
|
# If you need to handle more units, you can extend here
|
||
|
;;
|
||
|
*)
|
||
|
#echo "Unknown speed unit: $speed_unit"
|
||
|
speed_value=""
|
||
|
speed_unit=""
|
||
|
;;
|
||
|
esac
|
||
|
|
||
|
# Check if PCI ID is found
|
||
|
if [ -z "$pci_id" ]; then
|
||
|
#echo "PCI ID not found for interface: $nic"
|
||
|
exit 1
|
||
|
else
|
||
|
# Get the human-readable name of the device
|
||
|
device_name=$(lspci -s $pci_id | cut -d ' ' -f 4-)
|
||
|
fi
|
||
|
|
||
|
# Hee Hoo jank :)
|
||
|
if [[ ! -z $speed_value && ! -z $speed_unit ]]; then
|
||
|
speed_value="[${speed_value}"
|
||
|
speed_unit="${speed_unit}]"
|
||
|
else
|
||
|
speed_value=""
|
||
|
speed_unit=""
|
||
|
fi
|
||
|
|
||
|
echo "$device_name" "${speed_value} ${speed_unit}"
|