inventory.sh 1.5 KB

1234567891011121314151617181920
  1. #!/usr/bin/env bash
  2. # One JSON object describing this node's four ConnectX-7 fabric functions, for plan.py.
  3. # Read-only; no root needed (devlink parameter reads are unprivileged).
  4. set -euo pipefail
  5. first=1
  6. printf '{"host": "%s", "ports": {' "$(hostname)"
  7. for pair in enp1s0f0np0:rocep1s0f0 enp1s0f1np1:rocep1s0f1 enP2p1s0f0np0:roceP2p1s0f0 enP2p1s0f1np1:roceP2p1s0f1; do
  8. nd=${pair%%:*}; rd=${pair##*:}
  9. [[ -d /sys/class/net/$nd && -d /sys/class/infiniband/$rd ]] || { echo "missing $nd/$rd" >&2; exit 1; }
  10. bdf=$(basename "$(readlink -f "/sys/class/infiniband/$rd/device")")
  11. ip=$(ip -4 -o addr show dev "$nd" | awk '{print $4}' | head -1)
  12. param() { devlink dev param show "pci/$bdf" name "$1" 2>/dev/null | sed -n 's/.*value \([0-9a-z]*\).*/\1/p' | head -1; }
  13. [[ $first == 1 ]] || printf ', '; first=0
  14. printf '"%s": {"rdma": "%s", "ipv4": "%s", "mac": "%s", "mtu": %s, "state": "%s", "gid3": "%s", "gid3_netdev": "%s", "tc_offload": "%s", "hairpin_num_queues": "%s", "hairpin_queue_size": "%s", "flow_steering_mode": "%s"}' \
  15. "$nd" "$rd" "$ip" "$(cat /sys/class/net/$nd/address)" "$(cat /sys/class/net/$nd/mtu)" "$(cat /sys/class/net/$nd/operstate)" \
  16. "$(cat /sys/class/infiniband/$rd/ports/1/gids/3 2>/dev/null)" "$(cat /sys/class/infiniband/$rd/ports/1/gid_attrs/ndevs/3 2>/dev/null)" \
  17. "$(ethtool -k "$nd" 2>/dev/null | awk '/hw-tc-offload/{print $2}')" \
  18. "$(param hairpin_num_queues)" "$(param hairpin_queue_size)" "$(param flow_steering_mode)"
  19. done
  20. printf '}}\n'