fix(NET)+docs: lftpd 对端地址修复、E6 裁决收口、陷阱编号迁移重排 TRAP-NET-01~21
- lftpd:net_inet_ntoa 段序改 MSB 首 + 新增 net_getpeername,FTP 日志打印 真实对端地址(真机实证 192.168.1.2:55524,登记 TRAP-NET-21) - E6:NET_U15_PROBE 命中=0(含压测)→ 阶段 3 项 4 不立项,U15 登记观察项; 插桩留仓(宏=0 零成本),soak 驱动 test/host/e6_soak.py 入库 - 编号:全库 Trap NN → TRAP-NET-<nn> 迁移并重排连续 01~21(单调映射, 沿革见 CH395F_Trap_Records.md 头注);死号 12/13/19/21 引用全部清除; GD5F 域引用补正为 TRAP-GD5F-NN - 陷阱文档全新化:索引 21 行行行真陷阱;删误判存档/发现时间/git 考古/ FTP 附录;台架纪律教训沉淀第六章方法论 - RAM:Code 211348→211456(+108 lftpd 修复),RW+ZI 净增 +4B; 优化方案/台账受管区/tsv 同笔同步 - ftp_abort_probe.py 挪 test/host/;引用关系图重生成 - 回归:@build 0/0;@test PASS;ftp_abort 10/10;relisten :7003 20/20; ci_local L0+L0.5 全绿;E6 窗口零复位,7 条 WD stall 登记压测假象备查
This commit is contained in:
@@ -620,9 +620,9 @@ static void phase2_tc202(void)
|
||||
}
|
||||
|
||||
/* ===================================================================
|
||||
* TC-NET-204(硬件层):Trap 07 定案对照——三种关闭次序 A/B/C
|
||||
* TC-NET-204(硬件层):TRAP-NET-07 定案对照——三种关闭次序 A/B/C
|
||||
*
|
||||
* 背景:Trap 07(2025-07)断言"`disconnect → close` 会让 Socket 卡 `FIN_WAIT_2`
|
||||
* 背景:TRAP-NET-07(2025-07)断言"`disconnect → close` 会让 Socket 卡 `FIN_WAIT_2`
|
||||
* 数分钟、无法重开,因为 close 不再发 RST"。该断言有两处可疑:
|
||||
* ① 手册无 RST 语义——§5.35 只说"关闭 Socket 前 CH395 会自动断开 TCP 连接",
|
||||
* 全文 RST 只出现在错误码 CH395_ERR_RST 与 RST/RSTI 引脚;
|
||||
@@ -636,12 +636,12 @@ static void phase2_tc202(void)
|
||||
*
|
||||
* 受控对照(每模式 x PHASE204_LOOP_COUNT 轮,同一 Socket、同一 PC 回显服务):
|
||||
* 模式 A:close only(现行做法)
|
||||
* 模式 B:tcp_disconnect → close(Trap 07 声称会卡死的序列)
|
||||
* 模式 B:tcp_disconnect → close(TRAP-NET-07 声称会卡死的序列)
|
||||
* 模式 C:tcp_disconnect only,不 close(检验 FUN_PARA bit3=1 下芯片会不会自己关)
|
||||
* 观测量:
|
||||
* ① 回到 SOCKET_CLOSED(byte0=00H) 的耗时;② 该瞬间 byte1 的读数(验证"无意义"口径)
|
||||
* ③ 重开 + 重连 + 回显是否成功(Trap 07 的"无法重新打开")
|
||||
* ④ 重开会话首次读中断是否命中上一条连接残留的 DISCONNECT(Trap 14 轴)
|
||||
* ③ 重开 + 重连 + 回显是否成功(TRAP-NET-07 的"无法重新打开")
|
||||
* ④ 重开会话首次读中断是否命中上一条连接残留的 DISCONNECT(TRAP-NET-12 轴)
|
||||
* ⚠ 关闭与重开之间**不主动清中断**(与 2025-07 现场一致),残留事件由重开后的
|
||||
* 首次中断读取现场暴露(读即清,无法窥视)。
|
||||
* =================================================================== */
|
||||
@@ -659,7 +659,7 @@ static void phase2_tc202(void)
|
||||
* 入口参数:sock - Socket 号;lport - 本地端口;mode/round - 仅用于日志定位
|
||||
* 返回值:1=会话成功(含回显比对通过) 0=任一步失败 uint8_t
|
||||
* 说明:等待 CONNECT 期间读到的其它中断(含上一条连接残留的 DISCONNECT)
|
||||
* 现场打印,用于 Trap 14"滞后锁存"取证。 */
|
||||
* 现场打印,用于 TRAP-NET-12"滞后锁存"取证。 */
|
||||
static uint8_t tc204_session(uint8_t sock, uint16_t lport, uint8_t mode, uint8_t round)
|
||||
{
|
||||
uint8_t tx[64];
|
||||
@@ -767,7 +767,7 @@ static uint8_t tc204_session(uint8_t sock, uint16_t lport, uint8_t mode, uint8_t
|
||||
* 入口参数:sock - Socket 号;mode - 0=A close / 1=B disconnect→close / 2=C disconnect only
|
||||
* round - 日志定位
|
||||
* 返回值:1=观察窗内 byte0 回到 CLOSED 0=未回到 uint8_t
|
||||
* 说明:关闭与轮询之间不读中断(读即清会抹掉 Trap 14 的滞后事件现场)。 */
|
||||
* 说明:关闭与轮询之间不读中断(读即清会抹掉 TRAP-NET-12 的滞后事件现场)。 */
|
||||
static uint8_t tc204_close_seq(uint8_t sock, uint8_t mode, uint8_t round)
|
||||
{
|
||||
/* 状态采样里程碑(ms):抓 byte0/byte1 的演变 */
|
||||
@@ -863,7 +863,7 @@ static void phase2_tc204_once(uint8_t mode, uint8_t round)
|
||||
TEST_CHECK(!closed, "TC204 m2 r%u stays OPEN after disconnect (FUN_PARA bit3)",
|
||||
(unsigned)round);
|
||||
if (!closed) {
|
||||
/* Trap 07 的"无法重新打开"现场:不 close 直接 open,看芯片返回什么 */
|
||||
/* TRAP-NET-07 的"无法重新打开"现场:不 close 直接 open,看芯片返回什么 */
|
||||
uint8_t r = ch395f_open_socket(sock);
|
||||
DBG_INFO("TC204 m2 r%u open-without-close ret=0x%02X", (unsigned)round, r);
|
||||
/* 收尾:显式 close 并测耗时(证明 close 才是把 Socket 拉回 CLOSED 的动作) */
|
||||
@@ -874,7 +874,7 @@ static void phase2_tc204_once(uint8_t mode, uint8_t round)
|
||||
(unsigned)round, (unsigned)PHASE204_CLOSE_WAIT_MS);
|
||||
}
|
||||
|
||||
/* 3. 重开 + 重连 + 回显(Trap 07 的"无法重新打开"判据;Trap 09 沉降 200ms) */
|
||||
/* 3. 重开 + 重连 + 回显(TRAP-NET-07 的"无法重新打开"判据;TRAP-NET-09 沉降 200ms) */
|
||||
HAL_Delay(200);
|
||||
s2 = tc204_session(sock, (uint16_t)(lport + 64U), mode, round);
|
||||
TEST_CHECK(s2, "TC204 m%u r%u reopen+reconnect+echo OK", (unsigned)mode, (unsigned)round);
|
||||
@@ -915,7 +915,7 @@ static void phase2_tc204(void)
|
||||
* DISCONNECT —— 预留兼容路径(SYN_SENT 阶段实测基本不出现)
|
||||
* UNREACH(全局位) —— ARP 失败、对端不在线(仅作备注,不影响判定)
|
||||
*
|
||||
* 已知陷阱(Trap 14):上一会话 close 的 DISCONNECT 会滞后锁存在
|
||||
* 已知陷阱(TRAP-NET-12):上一会话 close 的 DISCONNECT 会滞后锁存在
|
||||
* SINT_SN(wait-CLOSED 的 STATUS 查询不清中断)。防御双保险:
|
||||
* ① 步 2 前预清两级中断;
|
||||
* ② 判负向后用 GET_SOCKET_STATUS 反核实,ESTABLISHED 即改判环境错误。
|
||||
@@ -944,7 +944,7 @@ static void phase2_tc203(void)
|
||||
"TC203 step1 cfg proto/ip/port");
|
||||
if (ch395f_get_cmd_status() != CH395F_ERR_SUCCESS) return;
|
||||
|
||||
/* 预清陈旧事件(Trap 14):上一会话 close 的 DISCONNECT 可能滞后锁存
|
||||
/* 预清陈旧事件(TRAP-NET-12):上一会话 close 的 DISCONNECT 可能滞后锁存
|
||||
* 在 SINT_SN 中(wait-CLOSED 轮询的 STATUS 是纯查询、不清中断),
|
||||
* 若不清除,本用例首次读中断会误吃旧事件导致负向误判。 */
|
||||
(void)ch395f_get_glob_int_status_all();
|
||||
@@ -996,7 +996,7 @@ static void phase2_tc203(void)
|
||||
|
||||
elapsed = HAL_GetTick() - tick;
|
||||
|
||||
/* 反核实(Trap 14 第二道防线):负向事件与实际状态矛盾时以状态为准。
|
||||
/* 反核实(TRAP-NET-12 第二道防线):负向事件与实际状态矛盾时以状态为准。
|
||||
* 若收到"负向事件"但 socket 实际已 ESTABLISHED,说明刚才读到的是
|
||||
* 上一会话遗留的陈旧 DISCONNECT,真实结果是连接成功 —— 环境错误。
|
||||
* ⚠ §5.22:byte0 只有 00H(CLOSED)/05H(OPEN),TCP 态在 **byte1**;
|
||||
@@ -1061,7 +1061,7 @@ static void phase2_run(void)
|
||||
DBG_INFO("--- TC-NET-202: close/reconnect x%d ---", PHASE2_LOOP_COUNT);
|
||||
phase2_tc202();
|
||||
|
||||
DBG_INFO("--- TC-NET-204: close A/B/C control (Trap 07) x3 modes x%d ---",
|
||||
DBG_INFO("--- TC-NET-204: close A/B/C control (TRAP-NET-07) x3 modes x%d ---",
|
||||
PHASE204_LOOP_COUNT);
|
||||
phase2_tc204();
|
||||
|
||||
@@ -1702,7 +1702,7 @@ static void phase15_run(void) {
|
||||
|
||||
/* 二段关闭实证(2026-10-13 本 TC 二跑定案):LISTEN 态 Socket 的
|
||||
* CLOSE_SOCKET 返 SUCCESS 但只拆监听(TCP 01->00),byte0 恒 05;
|
||||
* 再发一次 CLOSE 才落 00。生产 net 层靠 Trap 09 open 重试吸收此行为,
|
||||
* 再发一次 CLOSE 才落 00。生产 net 层靠 TRAP-NET-09 open 重试吸收此行为,
|
||||
* sock_reset 状态机在 WAIT_CLOSE 阶段自行补发(见 ch395f.c)。 */
|
||||
uint8_t close_st = ch395f_close_socket(sn);
|
||||
TEST_CHECK(close_st == CH395F_ERR_SUCCESS,
|
||||
|
||||
Reference in New Issue
Block a user