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:
2026-10-13 20:54:31 +08:00
parent 74ba7ea61b
commit 925058a5ae
58 changed files with 4391 additions and 3361 deletions
+5 -5
View File
@@ -19,7 +19,7 @@
* 前先用 net_can_accept()/net_can_read()(纯 RAM 读控制块)判
* "有没有活",无活直接返回——台架常态(无客户端)从每 10 ms
* 一次 RPC(100 msg/s,与 FTP 抢深度 8 的队列)降到 0 次。
* 兜底:readable 仅由 RECV_OK 中断置位且 Trap 22 对账不含
* 兜底:readable 仅由 RECV_OK 中断置位且 TRAP-NET-17 对账不含
* "RX 非空但 readable=0",故每 32 轮无条件 recv 一次(≈320 ms);
* 门控放行时若监听控制块已消失则置 g_listen=-1 触发重建,
* 避免"门控把端口永久不再接受新客户端"这一新卡死路径
@@ -74,7 +74,7 @@ static uint8_t s_sink_blocked; /* 推送阻断标志(1 = 停发帧,等
/*
* 兜底收帧节拍(门控失效保险,2026-10-10 I-2):
* net_can_read() 的 readable 只由 RECV_OK 中断置位,而 Trap 22 的
* net_can_read() 的 readable 只由 RECV_OK 中断置位,而 TRAP-NET-17 的
* net_reconcile_tick() 三类对账**不含**"芯片 RX 非空但 readable=0" →
* 该中断一旦丢失,纯门控会把已到达的数据永久藏住(改前靠每轮 recv 内的
* ch395f_get_recv_len() 顺带发现)。故每 RM_LIVENESS_DIV 轮**无条件**收一次:
@@ -566,7 +566,7 @@ void ui_net_sink_poll(void) {
} else if (n == 0) {
/* 对端关闭:单连接模型下监听通道与数据通道是同一个 Socket,net 层已在
* net_recv_locked 的 EOF 分支自动把该 Socket 放回 LISTEN;此处绝不能再
* net_close 它,否则监听一并被毁(后续连接被拒),且重建监听受 Trap 09 时序限制 */
* net_close 它,否则监听一并被毁(后续连接被拒),且重建监听受 TRAP-NET-09 时序限制 */
if (g_client != g_listen) {
net_close(g_client); /* 多连接后端(PC 模拟器):数据通道独立,需显式关闭 */
}
@@ -574,7 +574,7 @@ void ui_net_sink_poll(void) {
rm_parser_reset();
/* N-32(P1 不变量 II):重建**不再**由本处自行 bind_listen。
* ① net_recv_locked 的 EOF 分支已触发 auto_relisten(D10 非阻塞重试);
* ② 对账④还会兜底补一次 relisten(Trap 22 实证事件会丢,两层不可互替)。
* ② 对账④还会兜底补一次 relisten(TRAP-NET-17 实证事件会丢,两层不可互替)。
* 本处再做一遍 = 第三个重建所有者,正是 §2.3 那 12 个所有者的同类。
* 仅当 fd 真消失(net_get_sock 返 NULL = 网络重建)才置 -1,交回上方
* 分支重新走 start → bind_listen */
@@ -587,7 +587,7 @@ void ui_net_sink_poll(void) {
/* N-32(P1):加 `g_client != g_listen` 护栏,与上面 n==0 分支
* 的 :552 一致——MCU 单连接模型下 g_client 可能就是 g_listen 本身,
* 无护栏的 net_close 会直接关掉监听 fd(:563,与 :134 注释"严禁"
* 自相矛盾),端口随 Trap 09 沉降窗短死。PC 模拟器多连接后端下
* 自相矛盾),端口随 TRAP-NET-09 沉降窗短死。PC 模拟器多连接后端下
* 两者恒不等,护栏不改变其行为 */
if (g_client != g_listen) {
net_close(g_client); /* 多连接后端(PC 模拟器):数据通道独立,需显式关闭 */