#!/usr/bin/bash
#
# Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. ALL RIGHTS RESERVED.
#
# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
# SPDX-License-Identifier: LicenseRef-NVIDIA-Proprietary
#
# Real: consolidated link GET
# admin/oper status from PAOS register (consistent with PAOS-based SET)
# IPG from PIPG register, MTU/speed from ip/ethtool
source "$(dirname "$0")/_lib.sh"
trace "$@"
BDF=$(bdf_from_target "$1")
IFACE=$(iface_from_bdf "$BDF")

# PAOS: authoritative source for admin/oper status
PAOS_OUT=$(mlxreg -d "$BDF" --get --reg_name PAOS --indexes "local_port=1,lp_msb=0" 2>&1)
if echo "$PAOS_OUT" | grep -qi "syndrome\|error\|failed"; then
    ADMIN="unknown"; OPER="unknown"
else
    ADMIN_RAW=$(echo "$PAOS_OUT" | grep -E '^\s*admin_status\s' | awk '{print $NF}' | sed 's/0x//')
    OPER_RAW=$(echo "$PAOS_OUT" | grep -E '^\s*oper_status\s' | awk '{print $NF}' | sed 's/0x//')
    [[ "$((16#${ADMIN_RAW:-0}))" -eq 1 ]] && ADMIN="up" || ADMIN="down"
    [[ "$((16#${OPER_RAW:-0}))" -eq 1 ]] && OPER="up" || OPER="down"
fi

# PIPG: admin (ipg) and operational (ipg_oper) values
PIPG_OUT=$(mlxreg -d "$BDF" --get --reg_name PIPG --indexes "local_port=1,lp_msb=0,ipg_cap_index=0" 2>&1)
if echo "$PIPG_OUT" | grep -qi "syndrome\|error\|failed"; then
    IPG_ADMIN=0; IPG_OPER=0
else
    RAW=$(echo "$PIPG_OUT" | grep -E '^\s*ipg\s' | awk '{print $NF}' | sed 's/0x//')
    [[ -n "$RAW" ]] && IPG_ADMIN=$((16#${RAW})) || IPG_ADMIN=0
    RAW=$(echo "$PIPG_OUT" | grep -E '^\s*ipg_oper\s' | awk '{print $NF}' | sed 's/0x//')
    [[ -n "$RAW" ]] && IPG_OPER=$((16#${RAW})) || IPG_OPER=0
fi

# MTU + speed from kernel (no register equivalent)
MTU=0; SPEED=0
if [[ -n "$IFACE" ]]; then
    MTU=$(ip -o link show "$IFACE" 2>/dev/null | grep -oP 'mtu \K\d+')
    SPEED=$(ethtool "$IFACE" 2>/dev/null | grep "Speed:" | grep -oP '\d+' | head -1)
fi

echo "admin=${IPG_ADMIN}"
echo "oper=${IPG_OPER}"
echo "mtu=${MTU:-1500}"
echo "link-speed=${SPEED:-0}"
echo "link-state=${OPER}"
echo "admin-status=${ADMIN}"
echo "oper-status=${OPER}"
echo "value=ETH"
