6363 run : |
6464 runner_name=${{ runner.name }}
6565 echo "SESSION_ID=${runner_name##*-}" >> "$GITHUB_ENV"
66+
67+ - name : Export GitHub job id for PCAP naming
68+ if : ${{ needs.smoke-check-for-changes.outputs.changed == 'true' }}
69+ shell : bash
70+ run : |
71+ echo "MTL_GITHUB_JOB=${{ github.workflow }}:${{ github.job }}:${{ matrix.nic }}" >> "$GITHUB_ENV"
72+
73+ - name : Install requirements
74+ if : ${{ needs.smoke-check-for-changes.outputs.changed == 'true' }}
75+ shell : bash
76+ run : |
77+ set -euo pipefail
78+ sudo apt-get update -y
79+ sudo apt-get install -y --no-install-recommends linuxptp ethtool netsniff-ng jq
6680 - name : Set PCI device env variable
6781 if : ${{ needs.smoke-check-for-changes.outputs.changed == 'true' }}
6882 run : |
@@ -82,19 +96,71 @@ jobs:
8296 --build ${{ secrets.RUNNER_BUILD }} \
8397 --mtl_path ${{ secrets.RUNNER_MTL_PATH }} \
8498 --pci_device ${{ env.PCI_DEVICE }} \
99+ --ebu_ip ${{ secrets.RUNNER_EBU_LIST_IP }} \
100+ --ebu_user ${{ secrets.RUNNER_EBU_LIST_USER }} \
101+ --ebu_password ${{ secrets.RUNNER_EBU_LIST_PASSWORD }} \
85102 --ip_address 127.0.0.1 \
86103 --username ${{ secrets.RUNNER_USERNAME }} \
87104 --key_path ${{ secrets.RUNNER_KEY_PATH }}
105+
106+ - name : Detect capture PTP device (2nd PF)
107+ if : ${{ needs.smoke-check-for-changes.outputs.changed == 'true' }}
108+ shell : bash
109+ run : |
110+ set -euo pipefail
111+
112+ echo "PCI_DEVICE=${PCI_DEVICE}"
113+
114+ mapfile -t bdfs < <(lspci -Dn | awk -v id="$PCI_DEVICE" '$3 == id { print $1 }' | sort)
115+ if [ "${#bdfs[@]}" -lt 1 ]; then
116+ echo "ERROR: no PCI functions found matching ${PCI_DEVICE}"
117+ exit 1
118+ fi
119+
120+ # Prefer the 2nd PF when present.
121+ capture_bdf="${bdfs[1]:-${bdfs[0]}}"
122+ if [ ! -d "/sys/bus/pci/devices/${capture_bdf}/net" ]; then
123+ echo "ERROR: no netdevs under /sys/bus/pci/devices/${capture_bdf}/net"
124+ ls -la "/sys/bus/pci/devices/${capture_bdf}" || true
125+ exit 1
126+ fi
127+
128+ capture_iface="$(ls "/sys/bus/pci/devices/${capture_bdf}/net" | head -n 1)"
129+ if [ -z "${capture_iface}" ]; then
130+ echo "ERROR: failed to detect interface name for ${capture_bdf}"
131+ exit 1
132+ fi
133+
134+ ptp_idx="$(sudo ethtool -T "${capture_iface}" 2>/dev/null | awk -F': ' '/PTP Hardware Clock:/ {print $2; exit}')"
135+ if ! [[ "${ptp_idx}" =~ ^[0-9]+$ ]]; then
136+ echo "ERROR: failed to parse PTP Hardware Clock index for ${capture_iface}"
137+ sudo ethtool -T "${capture_iface}" || true
138+ exit 1
139+ fi
140+
141+ echo "CAPTURE_BDF=${capture_bdf}" >> "$GITHUB_ENV"
142+ echo "CAPTURE_IFACE=${capture_iface}" >> "$GITHUB_ENV"
143+ echo "CAPTURE_PTP=/dev/ptp${ptp_idx}" >> "$GITHUB_ENV"
144+ echo "Capture interface: ${capture_iface} (${capture_bdf}), PTP: /dev/ptp${ptp_idx}"
88145 - name : ' preparation: Kill MtlManager and pytest routines'
89146 if : ${{ needs.smoke-check-for-changes.outputs.changed == 'true' }}
90147 run : |
91148 sudo killall -SIGINT pipenv || true
92149 sudo killall -SIGINT pytest || true
93150 sudo killall -SIGINT MtlManager || true
151+ sudo killall -SIGINT phc2sys || true
94152 - name : ' preparation: Start MtlManager at background'
95153 if : ${{ needs.smoke-check-for-changes.outputs.changed == 'true' }}
96154 run : |
97155 sudo MtlManager &
156+
157+ - name : ' preparation: Start phc2sys for capture interface'
158+ if : ${{ needs.smoke-check-for-changes.outputs.changed == 'true' }}
159+ shell : bash
160+ run : |
161+ set -euo pipefail
162+ echo "Starting phc2sys: ${CAPTURE_PTP} -> CLOCK_REALTIME (iface=${CAPTURE_IFACE})"
163+ sudo phc2sys -s "${CAPTURE_PTP}" -c CLOCK_REALTIME -O 0 -m &
98164 - name : ' execution: Run validation-bare-metal tests in virtual environment'
99165 if : ${{ needs.smoke-check-for-changes.outputs.changed == 'true' }}
100166 run : |
0 commit comments