pub fn nak_received_len(rx_len: u32, hctsiz: u32) -> usizeExpand description
NAK で止まっている転送が、すでに受け取っているバイト数(0 なら未受信)。
【2026-09-26 バグ修正】QEMU の usb-net は RNDIS モードでは長さが 64 の倍数の
フレームでも終端の短パケット(ZLP)を送らない(hw/usb/dev-network.c
is_rndis(s) || の条件)。DWC2 の受信チャネルは短パケットが来るまで転送を
終えないので、640 バイト等のフレームを DMA へ書いた後、次のデータが無いと
転送継続のまま NAK 割り込みだけが上がる(hw/usb/hcd-dwc2.c)。
従来はこれを「データ無し」とみなして再アームし、届いていたフレームを捨てていた。
再送も同じ長さなので永久に受信できず、TCP が 15 秒止まっていた
(パケットキャプチャで最終セグメント 542 バイト + ヘッダ = 640 バイトと確認)。
rx_len は発行時の転送長、hctsiz は HCTSIZ の値(下位 19 ビットが残りバイト数)。