#!/bin/bash ############################################################################### # probe-network.sh # # READ-ONLY network + NFS ground-truth probe. Writes only stdout. # Run on any Proxmox host to inventory its NICs, bonds, LLDP neighbors, # NFS client mounts (including nconnect), ethtool link state, and error # counters. No hardcoded values — fully portable. # # Usage (via tests/remote.sh): # PROX_HOST=pfv-tsys6 bash tests/remote.sh prox-file perf/scripts/probe-network.sh ############################################################################### set -u echo "===== HOST: $(hostname -s) $(date -u +%FT%TZ) =====" echo echo "##### ip -br link #####" ip -br link 2>&1 echo echo "##### ip -br addr #####" ip -br addr 2>&1 echo echo "##### /etc/network/interfaces #####" cat /etc/network/interfaces 2>&1 echo echo "##### bond0 state (if present) #####" if [ -r /proc/net/bonding/bond0 ]; then cat /proc/net/bonding/bond0 2>&1 else echo "(no bond0)" fi echo echo "##### ethtool per physical NIC #####" for nic in /sys/class/net/*; do nic=$(basename "$nic") case "$nic" in lo|bond*|br*|venet*|veth*|docker*|tap*|vnet*|fw*) continue;; esac echo "--- ethtool $nic ---" ethtool "$nic" 2>&1 | grep -iE 'Speed|Duplex|Port|Link|Supported link modes|Advertising|Auto-neg|Settings' || echo "(ethtool failed for $nic)" done echo echo "##### lldpcli (if installed) #####" if command -v lldpcli >/dev/null 2>&1; then echo "--- lldpcli show neighbors ---" lldpcli show neighbors 2>&1 echo echo "--- lldpcli show interfaces ---" lldpcli show interfaces 2>&1 echo echo "--- lldpcli show chassis ---" lldpcli show chassis 2>&1 else echo "(lldpcli not installed)" fi echo echo "##### lldpd / lldpad service #####" systemctl is-active lldpd 2>&1 || true systemctl is-enabled lldpd 2>&1 || true echo echo "##### NFS mounts (mount | grep nfs) #####" mount | grep -i nfs 2>&1 || echo "(no nfs mounts)" echo echo "##### mount nconnect detail (nfsstat -m) #####" nfsstat -m 2>&1 echo echo "##### storage.cfg NFS stanzas (options) #####" grep -A3 '^nfs:' /etc/pve/storage.cfg 2>&1 echo echo "##### ip route #####" ip route 2>&1 echo echo "##### ethtool -S bond slaves (key counters) #####" if [ -r /proc/net/bonding/bond0 ]; then # shellcheck disable=SC2013 # intentional: extract NIC names from bonding info for nic in $(grep -oE 'eth[0-9]+|en[psx][a-z0-9]+' /proc/net/bonding/bond0 2>/dev/null | sort -u); do echo "--- ethtool -S $nic (errors) ---" ethtool -S "$nic" 2>/dev/null | grep -iE 'error|drop|discard|crc|pause|miss' || echo "(no error counters)" done fi echo echo "##### ip neigh (ARP table, reachable/stale) #####" ip neigh show 2>&1 | grep -vE ' FAILED|INCOMPLETE' | sort -t. -k4 -n echo echo "===== END $(hostname -s) ====="