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