diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index 78445e7..20c1db3 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -40,8 +40,9 @@ LTC2980 margin 控制器。TTL 只負責「按順序 `sendln` 並把畫面收進 | BMC 存取 | host 端 `bmc-manager run ""`(不需對 BMC 開 SSH,繞開其 busybox 工具鏈);`bmc-first-enroll` / `bmc-manager version\|status` | | 背景工作管理 | `bgctl run/list/stop --all/reset`(平台工具);長時間 ping 用 `systemd-run --unit=` 掛成 transient unit | | 管理網路 | iproute2(`ip link set` / `ip address replace` / `ip route replace ... metric`)+ `ping -I` | -| 測試 session | `hw-test-session start\|log\|status\|finish`;job log 收在 `/host/hw-eval/current/jobs/` | +| 測試 session | `hw-test-session start\|log\|status\|finish`;job log 收在 `/host/hw-eval/jobs/` | | 風扇控制 | max31790 driver rebind(`/sys/bus/i2c/drivers/max31790/{bind,unbind}`)+ `fan-speed-control.sh <%>` | +| 100G PRBS | `bcmcmd -n -c 'dsh -c "phy diag prbs …"'`(set / prbsstat STArt / get / Ber / STOp / clear) | | 壓力測試 | `mlucas-avx2`(AMD CPU)、`bgctl run` 排程的 `memtester` / `qfx5252-stress-ssd` / `qfx5252-stress-usb` | | 資料面流量 | `bcmcmd`(Broadcom drivshell)VLAN loopback + `tx` burst,switch unit 0 / 1 | | 流量報表 | DUT 上 awk(`blanton_traffic_linespeed report`);離線 `python3 tools/bcm_mibpair_report_V1.1.0.py` | @@ -177,7 +178,10 @@ Blanton_TTL_Script/ ├── blanton_traffic_linespeed.sh # SWB loopback 線速流量(bcmcmd unit 0/1) │ # init/clear/show/start/stop/ps/report/run ├── mgmt_ping_monitor.sh # 10G/1G 管理網路 ping 監控(iproute2) - │ # eth0→TARGET_10G、eth1→TARGET_1G,兩張卡都保持 up + │ # eth0→TARGET_10G、eth1→TARGET_1G,兩張卡同時持續 ping + ├── port_prbs_monitor.sh # 100G uplink PRBS 測試(bcmcmd phy diag) + │ # ⚠️ 已納入交付,但 A/B/C 的呼叫仍註解掉(bring-up 中) + ├── usb_target.sh # 偵測 USB 裝置節點/掛載點(排除系統碟) ├── bmc_monitor.sh # BMC 監控:free -m + I2C 寫入/讀回圖樣測試 ├── bmc_monitor_ddr.sh # ⚠️ 已停用:B/C 內呼叫處已註解,DDR 壓力改走 bgctl + bmc-manager │ # ↑ 三支都要 chmod +x 才能跑(見 Key Constraints) @@ -314,6 +318,8 @@ PROFILE_CHANNELS=( "0:high:8" "1:low:8" ... ) # "channel:operation:change_perc | **管理網路 ping** | `mgmt_ping_monitor.sh {start\|stop\|status\|fg\|tail\|clear\|summary}` | 一輪 = 10G leg + 1G leg,各自 `ip address/route replace` 後 `ping -I ` 打自己的對端;兩張卡都保持 up。每 leg 記 `ip -s link show` 與該卡的 TX/RX packet delta,另出一行可 grep 的 `RESULT` | | **BMC 監控** | `bmc_monitor.sh {start\|stop\|status\|fg\|tail\|clear}` | 由 host 端 `bmc-manager run` 週期取樣 `free -m`,另加一組 **I2C 寫入/讀回圖樣測試**(bus 1、addr 0x41、offset 0x00C0,寫 `55AA55AA` 讀回、再寫 `AA55AA55` 讀回)。B 啟動、C 停止並 `cat log/bmc_poll.log` | | **BMC DDR 壓力** | `bmc_monitor_ddr.sh` | ⚠️ **已停用** —— B/C 內呼叫處已註解,改由 `bgctl run bmc-manager run memtester` 取代。檔案保留未刪 | +| **100G PRBS** | `port_prbs_monitor.sh {start [both\|a\|b]\|stop\|status\|report\|clear}` | 兩個 uplink 各一個 worker,可同時或單獨跑。setup(`lpmode off` → `prbs set` → `prbsstat STArt`)→ 週期 `prbs get`(判定)+ `prbsstat Ber`(只記錄)→ teardown(`STOp` + `prbs clear`)。輸出含 `PRBS OK!` 才算 PASS。**⚠️ A/B/C 的呼叫目前註解掉** | +| **USB 目標偵測** | `usb_target.sh [-o dev\|mnt\|both\|id] [-n] [-r sec]` | 找出插入的 USB 儲存裝置,排除 `/` 與 `/host` 的底層碟(本平台可能從 USB DOM 開機),多顆時拒絕猜;掛載時會驗證真的可寫 | | **打包交付** | `publish/publish.sh [-v Ver] [-f] [-z] [-n]` | 版號讀 Script A 檔頭,複製成 `publish/Script_ABC_Blanton_/`,排除 `*.log`,可另出 zip | --- @@ -330,7 +336,7 @@ Script A ── logopen Logs/Blanton_Margin_.log ──┐ (之後所有畫 │ │ ├─ 登入 admin → sudo -i → root@sonic:~# │ ├─ date -s "" ← 讓 DUT 時戳可對照 - ├─ rm /host/hw-eval/current/jobs/* ← 清掉上一輪的 job log + ├─ rm /host/hw-eval/jobs/* ← 清掉上一輪的 job log ├─ hw-test-session start / log / status ├─ 風扇:max31790 unbind→sleep→bind(18-0020 與 25-0020 各一次) │ → fan-speed-control.sh → 回答 y 確認 │ @@ -374,7 +380,8 @@ Script C ├─ nvme smart-log / smartctl -x /dev/nvme0 ├─ traffic: stop → report ← per-pair TX/RX 交叉比對,PASS/FAIL/NA(exit 2 = 有 FAIL/NA) ├─ show reboot-cause / show uptime ← soak 期間有沒有意外重開,一眼看得到 - ├─ cp -r /host/hw-eval/current/jobs/ /mnt/usb/jobs-_ + ├─ usb_target.sh -o dev → sync → mount /mnt/usb + ├─ cp bmc_poll.log / mgmt_ping.log → jobs/,再 cp -r jobs/ /mnt/usb/jobs-_ └─ hw-test-session finish ▼ [messagebox "GOOD JOB! Test Case DONE"] → 人工檢查 log @@ -717,14 +724,17 @@ margin status、全部 VRM 軌的 Vin/Vout/Iout/Temp、CB + ICB 溫感讀值, - **`bmc_monitor_ddr.sh` 已停用**:B/C 內的呼叫已註解,DDR 壓力改由 `bgctl run bmc-manager run memtester` 取代。檔案還留在 repo,待確認不再需要後刪除,或在檔頭標註停用。 (`bmc_monitor.sh` 已於 2026-08-25 重新啟用,並加上 I2C 寫入/讀回圖樣測試。) -- **`rm /host/hw-eval/current/jobs/*` 清不掉子目錄**:Script A 用的是不帶 `-r` 的 `rm`,但 Script C +- **`rm /host/hw-eval/jobs/*` 清不掉子目錄**:Script A 用的是不帶 `-r` 的 `rm`,但 Script C 是 `cp -r` 那個目錄,代表裡面可能有子目錄。清不乾淨的話,上一輪的 job log 會被當成這輪的一起 複製到 USB。要確認 `bgctl` 的產出結構,必要時改成 `rm -rf .../jobs/*`。 +- **100G PRBS 尚未接進 A/B/C**:`port_prbs_monitor.sh` 已隨包交付、可手動執行,但三支腳本裡的呼叫 + 都還註解著(bring-up 中)。要啟用時記得 PRBS 期間 link 會顯示 down,`stop` 之後才會回來。 +- **Script C 的 USB 掛載走 `mount` 而非 `usb_target.sh -o mnt`**:目前是 `-o dev` 取節點再自己 + `mount /mnt/usb`,繞過了工具內建的 `mkdir -p`、exfat/ntfs `modprobe` 與可寫性驗證。 + 掛載點不存在、檔案系統模組沒載、或媒體唯讀時只會失敗一行,job log 就沒帶出來。 - **風扇確認提示是無限等待**:`wait "Set all configured fan channels to"` 之後才 `sendln "y"`; 若該版 `fan-speed-control.sh` 不再詢問(或字串改了),這個 `wait` 會永遠等下去,Script A 停在那裡 且不報錯。加個 `timeout` + 分支會比較保險(記得還原 `timeout = 0`)。 -- **USB 掛載點未檢查**:Script C 直接 `cp -r ... /mnt/usb/`,`/mnt/usb` 沒掛載時只會失敗一行, - 整輪測試的 job log 就沒被帶出來。可在複製前先 `mountpoint -q /mnt/usb` 判斷。 - **Script C 沒有倒出 `mgmt_ping.log`**:C 會 `stop` 管理網路監控並印 `ip -s link show`, 但沒有 `cat ~/Blanton_Script/log/mgmt_ping.log`,所以整個 soak 期間累積的 per-leg `RESULT` 留在 DUT 上、沒進 master log。Script A 那輪基線有 `cat`。 diff --git a/CLAUDE.md b/CLAUDE.md index 989c861..a35a63b 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -9,11 +9,12 @@ DUT 端的取數能力由一組 **bash 工具庫** 提供(CB FPGA `pcimem` → 完整架構見 [ARCHITECTURE.md](ARCHITECTURE.md)。 -**目前狀態(2026-08-25)**:Script A 為 **V1.0.7**(A 集中記錄 A/B/C 三支的變更)。涵蓋 +**目前狀態(2026-08-26)**:Script A 為 **V1.0.9**(A 集中記錄 A/B/C 三支的變更)。涵蓋 PCIe AER / DDR EDAC / PMON+TPM / 電壓 margin(9 顆 LTC2980)/ SWB loopback 線速流量 / 10G+1G 管理網路 ping / BMC DDR 與 USB / NVMe 健康,壓力層走平台的 `bgctl`。 switch unit 數量由 `config.ttl` 的 `SWB_UNIT0` / `SWB_UNIT1` 宣告,風扇轉速由 `FAN_SPEED` 指定。 -測試 job log 收在 DUT 的 `/host/hw-eval/current/jobs/`,Script C 結束時帶時戳複製到 `/mnt/usb/`。 +測試 job log 收在 DUT 的 `/host/hw-eval/jobs/`,Script C 結束時掛好 USB 再帶時戳複製到 `/mnt/usb/`。 +100G PRBS(`port_prbs_monitor.sh`)已隨包交付,但 **A/B/C 的呼叫仍註解掉**,還在 bring-up。 最後一次發布是 **V1.0.5**;SWB 的 I2C 通道與位址已於 2026-08-19 上機驗證。 交付用 `./publish/publish.sh` 打包。 @@ -88,6 +89,18 @@ chmod +x ~/Blanton_Script/*.sh # 佈署後必做一次 # bmc_monitor.sh start/stop # free -m + BMC I2C 寫入/讀回圖樣測試,log/bmc_poll.log # ⚠️ bmc_monitor_ddr.sh 已停用(DDR 壓力改走 bgctl + bmc-manager),檔案仍在 +# ── 100G PRBS(目前 TTL 未啟用,手動測用)──────────── +bash ~/Blanton_Script/port_prbs_monitor.sh start # 兩個 port 同時 +bash ~/Blanton_Script/port_prbs_monitor.sh start a # 只跑 Ethernet513 +bash ~/Blanton_Script/port_prbs_monitor.sh start b # 只跑 Ethernet514 +bash ~/Blanton_Script/port_prbs_monitor.sh report # PASS/FAIL 統計(沒跑的顯示 SKIP) +bash ~/Blanton_Script/port_prbs_monitor.sh stop # 收尾會跑 prbsstat STOp + prbs clear +# ⚠️ PRBS 打起來時 link 會顯示 down,這是正常的 —— 所以 start 刻意不印 port status + +# ── USB 目標偵測 ──────────────────────────────────── +bash ~/Blanton_Script/usb_target.sh -o dev # /dev/sdX1 +bash ~/Blanton_Script/usb_target.sh -o mnt # 掛好並回傳掛載點 + # ── 背景壓力(平台工具)────────────────────────────── bgctl run /usr/sbin/memtester 1G 100 bgctl list @@ -187,6 +200,8 @@ Tera Term 連 COM port (115200-8-N-1) - ⚠️ **兩張管理網卡同網段會 ARP flux**:`mgmt_ping_monitor.sh` 讓 eth0/eth1 同時 up,同一個 /24 下 對端 ARP 可能由任一張卡回應,回包落在沒送封包的那張。`ARP_STRICT=1` 擋掉;判讀時看 `RESULT` 行的 `nic_tx`/`nic_rx`(該卡自己的 packet delta)—— **ping 成功但 `nic_tx` 接近 0 = 封包從另一張卡出去的** +- ⚠️ **PRBS 跑起來時 `show interfaces status` 會顯示 DOWN**,那是 link 離開正常運作模式,不是故障。 + `port_prbs_monitor.sh` 的 `start` 因此刻意不印 port status(避免測試員誤判),只在 `prbs clear` 之後的報表裡印 - ⚠️ **`ip -s link` 的欄位順序是 `bytes packets errors ...`**,要 packet 數取的是**第 2 欄**不是第 1 欄 - ⚠️ **`mgmt_ping_monitor.sh` / `bmc_monitor*.sh` 需要 exec bit**,且**不是改用 `bash x.sh start` 就能繞過** —— `do_start` 內部是 `setsid "$SCRIPT_PATH" __daemon`,直接執行該路徑。git 記錄是 `100644`, diff --git a/docs/release-notes/v1.0.9.md b/docs/release-notes/v1.0.9.md new file mode 100644 index 0000000..b77f733 --- /dev/null +++ b/docs/release-notes/v1.0.9.md @@ -0,0 +1,63 @@ +# v1.0.9 — 100G PRBS testing, and the job logs actually reach the USB stick + +## ✨ New features + +**100G uplink PRBS test** +* New `port_prbs_monitor.sh` drives a PRBS test on both 100G uplinks: it clears low-power mode, arms the pattern, then polls `phy diag prbs get` in the background until stopped. A poll counts as PASS only when the output says `PRBS OK!`; `prbsstat Ber` is captured alongside every poll for the record. +* `stop` runs `prbsstat STOp` and `prbs clear` on each port before rendering the report, so the test does not leave PRBS armed behind it. +* `report` gives the tally the bench actually wants: + + ``` + PORT POLLS PASS FAIL RESULT + Ethernet513 42 42 0 PASS + Ethernet514 42 40 2 FAIL + ``` +* **One port at a time is a first-class mode.** `start a` or `start b` runs a single uplink, which is how you separate a genuine port fault from the DUT not coping with two PRBS streams at once. A port that was not run reports `SKIP`, not `FAIL`. +* Every command and its full output — setup, each poll, teardown — goes to that port's raw log. + +> ⚠️ The script ships in this build and can be run by hand, but **the calls in Script A, B and C are commented out**: PRBS is still under bring-up on this platform. + +**USB target detection** +* `usb_target.sh` reports an inserted USB device's node, mount point or by-id path. It excludes whatever disk backs `/` and `/host` — this platform can boot from a USB DOM, which also reports as USB — refuses to guess when several USB disks are present, and when mounting, verifies the result is writable rather than trusting that `mount` succeeded. +* Script B builds the USB stress command from the detected node instead of a hard-coded `/dev/sda1`. + +## 🐛 Bug fixes + +**The job logs were being written to a path nobody collected** +* Stress output, the monitors' logs and the USB archive disagreed about where the job directory lives. Everything now uses `/host/hw-eval/jobs/`, so what Script B writes is what Script C copies out. + +**Script C copied to a USB that was never mounted** +* The archive step assumed `/mnt/usb` was ready. Script C now finds the device and mounts it first, so a run's logs leave the DUT instead of being written into an empty mount point. + +**`show interfaces status` right after starting PRBS reads as a failure** +* With PRBS armed the link is out of normal operation and reports DOWN. `port_prbs_monitor.sh` deliberately does not print the port status at `start` — it appears in the report instead, after `prbs clear`, labelled as the recovered state. + +## 📦 Downloads + +| File | Contents | +|---|---| +| `Script_ABC_Blanton_V1.0.9.zip` | The full Tera Term working directory, including `Blanton_Script/` to copy onto the DUT | + +**After copying to the DUT:** + +```bash +chmod +x ~/Blanton_Script/*.sh # see below +grep -rlU $'\r' ~/Blanton_Script # expect no output +``` + +`mgmt_ping_monitor.sh` and `port_prbs_monitor.sh` launch their workers through `bash`, so those two run without the execute bit. `bmc_monitor.sh` and `usb_target.sh` still need it, and neither git (mode 100644) nor a Windows/USB copy carries it. Without the `chmod`, `start` fails with `Permission denied` and the later `cat` finds nothing: **the section ends up empty and nothing reports an error.** + +## ⚠️ Before you run + +* **Declare the switch population.** `SWB_UNIT0` / `SWB_UNIT1` in `config.ttl` say which switch units this DUT has; traffic and the readiness gate both follow them. +* **Set `FAN_SPEED`.** It is applied at the start of every run. +* **Management connectivity is in use, not preserved.** Both management NICs are up and pinging — drive the run from the serial console. +* **PRBS is not wired into the macros yet.** Run `port_prbs_monitor.sh` by hand if you want it; uncommenting the calls in A/B/C is not supported in this build. +* **Two settings persist to `config_db.json`** and survive a reboot: LLDP is left disabled and the 100G uplinks are left configured. Restore them before the DUT moves on. + +## 🔗 Links + +* [ARCHITECTURE.md](https://etgit.et-wen.com/etwen/Blanton_TTL_Script/src/branch/main/ARCHITECTURE.md) — test flow, data models, constraints +* [CLAUDE.md](https://etgit.et-wen.com/etwen/Blanton_TTL_Script/src/branch/main/CLAUDE.md) — commands and the bench gotchas + +**Full changelog:** [V1.0.8...V1.0.9](https://etgit.et-wen.com/etwen/Blanton_TTL_Script/compare/V1.0.8...V1.0.9) diff --git a/src/Script_ABC_Blanton/1_Blanton_Script_A.ttl b/src/Script_ABC_Blanton/1_Blanton_Script_A.ttl index da154ae..86c6a66 100644 --- a/src/Script_ABC_Blanton/1_Blanton_Script_A.ttl +++ b/src/Script_ABC_Blanton/1_Blanton_Script_A.ttl @@ -1,7 +1,7 @@ ; ============================================================================= ; Script A for Blanton -; Version : V1.0.8 -; Date : 2026-08-25 +; Version : V1.0.9 +; Date : 2026-08-26 ; Author : ETWen ; ============================================================================= ; Version History: @@ -58,6 +58,13 @@ ; ScriptA MGMT ping baseline 45s -> 30s, clear the log afterwards ; ScriptB Show mgmt_ping status after start ; ScriptC Show mgmt_ping status before stop, cat the report after +; V1.0.9 2026-08-26 Blanton_Script/port_prbs_monitor.sh Add 100G Port PRBS test +; start [both|a|b] - single port isolates a port fault from +; the DUT not coping with two PRBS streams at once +; !! TTL calls are commented out in A/B/C - still under bring-up +; ScriptA/B/C Job log path /host/hw-eval/current/jobs -> /host/hw-eval/jobs +; ScriptC Mount the USB (usb_target.sh) before copying the job logs +; ScriptC Reorder results: stress logs, then MGMT ping, then 100G status ; ============================================================================= include "config.ttl" @@ -94,7 +101,7 @@ sendln cmd ;Stress log clear wait prompt_sonic_root -sendln "rm /host/hw-eval/current/jobs/*" +sendln "rm /host/hw-eval/jobs/*" ; ========== HW Test Session ========== wait prompt_sonic_root @@ -218,7 +225,6 @@ sendln "~/Blanton_Script/mgmt_ping_monitor.sh clear" ; ========== 100G Port Status ========== -; Lpmode Disable wait prompt_sonic_root sendln "sudo sfputil lpmode off Ethernet513" wait prompt_sonic_root @@ -233,6 +239,37 @@ sendln "config save -y" wait prompt_sonic_root sendln "show interfaces status Ethernet513,Ethernet514" +;============================================================================================================= +; ========== 100G PRBS ========== +;wait prompt_sonic_root +;sendln "~/Blanton_Script/port_prbs_monitor.sh start" +;wait prompt_sonic_root +;sendln "sleep 10" +;wait prompt_sonic_root +;sendln "~/Blanton_Script/port_prbs_monitor.sh status" +;wait prompt_sonic_root +;sendln "~/Blanton_Script/port_prbs_monitor.sh stop" +;wait prompt_sonic_root +;sendln "~/Blanton_Script/port_prbs_monitor.sh report" +;wait prompt_sonic_root +;sendln "~/Blanton_Script/port_prbs_monitor.sh clear" + +; ========== 100G Port Status ========== +;wait prompt_sonic_root +;sendln "sudo sfputil lpmode off Ethernet513" +;wait prompt_sonic_root +;sendln "sudo sfputil lpmode off Ethernet514" +;wait prompt_sonic_root +;sendln "config interface -n asic0 startup Ethernet513" +;wait prompt_sonic_root +;sendln "config interface -n asic1 startup Ethernet514" +;wait prompt_sonic_root +;sendln "config save -y" + +;wait prompt_sonic_root +;sendln "show interfaces status Ethernet513,Ethernet514" +;============================================================================================================= + ; ========== First Traffic Test ========== ; Silent MAC wait prompt_sonic_root diff --git a/src/Script_ABC_Blanton/2_Blanton_Script_B.ttl b/src/Script_ABC_Blanton/2_Blanton_Script_B.ttl index d059897..cb147ae 100644 --- a/src/Script_ABC_Blanton/2_Blanton_Script_B.ttl +++ b/src/Script_ABC_Blanton/2_Blanton_Script_B.ttl @@ -40,7 +40,7 @@ sendln "bgctl run /usr/sbin/memtester 1G" ; Continue Execture ; ========== SSD read/write ========== wait prompt_sonic_root -sendln "bgctl run qfx5252-stress-ssd 1G --runtime 3600 --passes 5 --write --force --log /host/hw-eval/current/qfx5252-stress-ssd.log" +sendln "bgctl run qfx5252-stress-ssd 1G --runtime 3600 --passes 5 --write --force --log /host/hw-eval/jobs/qfx5252-stress-ssd.log" ; ========== USB read/write ========== ; ---- Get USB partition node -> usb_dev ---- @@ -51,7 +51,7 @@ waitregex '<]*)>>' usb_dev = groupmatchstr1 wait prompt_sonic_root -sprintf2 cmd "bgctl run qfx5252-stress-usb %s 256M --runtime 60 --passes 1 --write --log /host/hw-eval/qfx5252-stress-usb.log" usb_dev +sprintf2 cmd "bgctl run qfx5252-stress-usb %s 256M --runtime 60 --passes 1 --write --log /host/hw-eval/jobs/qfx5252-stress-usb.log" usb_dev sendln cmd ;wait prompt_sonic_root @@ -105,6 +105,12 @@ sendln "./Blanton_Script/mgmt_ping_monitor.sh status" wait prompt_sonic_root sendln "show interfaces status Ethernet513,Ethernet514" +;============================================================================================================= +; ========== 100G PRBS ========== +;wait prompt_sonic_root +;sendln "~/Blanton_Script/port_prbs_monitor.sh start" +;============================================================================================================= + ; ========== Traffic START ========== ; Silent MAC diff --git a/src/Script_ABC_Blanton/3_Blanton_Script_C.ttl b/src/Script_ABC_Blanton/3_Blanton_Script_C.ttl index b620a4d..234bdfe 100644 --- a/src/Script_ABC_Blanton/3_Blanton_Script_C.ttl +++ b/src/Script_ABC_Blanton/3_Blanton_Script_C.ttl @@ -25,8 +25,23 @@ wait prompt_sonic_root sendln "~/Blanton_Script/mgmt_ping_monitor.sh status" wait prompt_sonic_root sendln "~/Blanton_Script/mgmt_ping_monitor.sh stop" -wait prompt_sonic_root -sendln "cat ~/Blanton_Script/log/mgmt_ping.log" + +;============================================================================================================= +; 100G PRBS STOP +;wait prompt_sonic_root +;sendln "~/Blanton_Script/port_prbs_monitor.sh stop" +;wait prompt_sonic_root +;sendln "sudo sfputil lpmode off Ethernet513" +;wait prompt_sonic_root +;sendln "sudo sfputil lpmode off Ethernet514" +;wait prompt_sonic_root +;sendln "config interface -n asic0 startup Ethernet513" +;wait prompt_sonic_root +;sendln "config interface -n asic1 startup Ethernet514" +;============================================================================================================= + + + ; ========== TAKE DATA ========== include "utils/setup_pmon.ttl" @@ -64,16 +79,26 @@ sendln "cat ./Blanton_Script/log/bmc_poll.log" ;wait prompt_sonic_root ;sendln "journalctl -u qfx5252-bmc-usb-net-test.service --no-pager" -; ========== 10G/1G MGMT Test result ========== -wait prompt_sonic_root -sendln "ip -s link show eth0" -wait prompt_sonic_root -sendln "ip -s link show eth1" - ; ========== CHECK Stress results ========== wait prompt_sonic_root sendln "cat ~/hammer/tools/amd/mlucas_amm_log" +wait prompt_sonic_root +sendln "cat /host/hw-eval/jobs/qfx5252-stress-ssd.log" +wait prompt_sonic_root +sendln "cat /host/hw-eval/jobs/qfx5252-stress-usb.log" + +; ========== 10G/1G MGMT Test result ========== +wait prompt_sonic_root +sendln "cat ~/Blanton_Script/log/mgmt_ping.log" + +; ========== 100G Port ========== +wait prompt_sonic_root +sendln "show interfaces status Ethernet513,Ethernet514" +;============================================================================================================= +;wait prompt_sonic_root +;sendln "cat ~/Blanton_Script/log/port_prbs.log " +;============================================================================================================= ; ========== CHECK Traffic counters ========== if SWB_UNIT0 = 1 && SWB_UNIT1 = 1 then @@ -109,17 +134,31 @@ sendln "show reboot-cause" wait prompt_sonic_root sendln "show uptime" + +; ---- Get USB partition node -> usb_dev ---- +usb_dev = '' +wait prompt_sonic_root +sendln 'D=$(bash ~/Blanton_Script/usb_target.sh -o dev 2>/dev/null); echo "<>"' +waitregex '<]*)>>' +usb_dev = groupmatchstr1 + +wait prompt_sonic_root +sendln "sync" +wait prompt_sonic_root +sprintf2 cmd "mount %s /mnt/usb" usb_dev +sendln cmd + ; ========== Copy Stress Log to USB ========== wait prompt_sonic_root -sendln "cp ./Blanton_Script/log/bmc_poll.log /host/hw-eval/current/jobs/" +sendln "cp ./Blanton_Script/log/bmc_poll.log /host/hw-eval/jobs/" wait prompt_sonic_root -sendln "cp ./Blanton_Script/log/mgmt_ping.log /host/hw-eval/current/jobs/" +sendln "cp ./Blanton_Script/log/mgmt_ping.log /host/hw-eval/jobs/" wait prompt_sonic_root getdate ts_date "%Y%m%d" gettime ts_time "%H%M" sprintf2 usb_dst "/mnt/usb/jobs-%s_%s" ts_date ts_time -sprintf2 cmd "cp -r /host/hw-eval/current/jobs/ %s" usb_dst +sprintf2 cmd "cp -r /host/hw-eval/jobs/ %s" usb_dst sendln cmd ; ========== HW Test Session ========== diff --git a/src/Script_ABC_Blanton/Blanton_Script/port_prbs_monitor.sh b/src/Script_ABC_Blanton/Blanton_Script/port_prbs_monitor.sh new file mode 100644 index 0000000..3d74be8 --- /dev/null +++ b/src/Script_ABC_Blanton/Blanton_Script/port_prbs_monitor.sh @@ -0,0 +1,431 @@ +#!/bin/bash +############################################################################### +# port_prbs_monitor.sh +# +# Version : V1.0.0 +# Author : ETWen +# Date : 20260826 +# +# Purpose : Run a PRBS test on the two 100G uplinks AT THE SAME TIME and keep +# polling until stopped. Each port gets its own background worker: +# +# setup : sfputil lpmode off +# phy diag prbs set +# phy diag prbsstat STArt Interval= +# poll : phy diag prbs get <- PASS/FAIL comes from here +# phydiag prbsstat Ber <- recorded only +# stop : phydiag prbsstat STOp +# phydiag prbs clear +# +# Every command and its full output goes to that port's raw log. +# `stop` tears the test down and renders the report; `report` +# prints the PASS/FAIL tally per port. +# +# Notes : - A poll counts as PASS only when the output contains "PRBS OK!". +# bcmcmd exits 0 even when the BCM shell rejects a command, so the +# exit status cannot be used -- only the output can. +# - bcmcmd is always run with +PORT_A_PHY=268 # phy diag + +# --- port B --- +PORT_B_NAME="Ethernet514" +PORT_B_UNIT=1 +PORT_B_PHY=268 + +# Which ports `start` runs when no argument is given: both | a | b +# Override per run: start a / start b / start both +# Running one at a time is how you tell a genuine port fault from the DUT not +# coping with two PRBS streams at once. +PORTS="both" + +# --- PRBS --- +PRBS_POLY="p=3" # passed to "prbs set" +PRBS_STAT_INTERVAL=5 # passed to "prbsstat STArt Interval=" +POLL_INTERVAL_SEC=10 # seconds between polls +PASS_PATTERN="PRBS OK!" # a poll is PASS only if the output contains this + +# Seconds to wait after the setup commands before the first poll, so the link +# has settled and the counters mean something. +SETTLE_SEC=10 + + +# Stop after this many polls per port. 0 = run until stopped manually. +MAX_POLLS=0 + +# How many recent poll blocks the report shows per port. +TAIL_ENTRIES=20 + +# Prefix for privileged commands; empty because this already runs as root. +SUDO="" +BCMCMD="bcmcmd" + +# Logging +LOG_DIR="" # empty =