Originator BA会话建立流程

ba_ori_session_start
  └─ ba_ori_session_setup
       └─ ba_resrc_ori_prep
            ├─ ba_alloc_ori_entry
            └─ RTMPSetTimer (→ ba_ori_session_setup_timeout)
ba_ori_session_setup_timeout (定时器回调)
  └─ MlmeEnqueueWithWdev → 发送ADDBA请求
收到ADDBA响应后:
  peer_addba_rsp_action
    └─ ba_resrc_ori_add
         ├─ RTMP_ADD_BA_SESSION_TO_ASIC
         └─ RTMPSetTimer (可选)

Recipient BA会话建立流程

peer_addba_req_action
  ├─ cal_rec_ba_wsize
  ├─ ba_resrc_rec_add
  │    ├─ ba_alloc_rec_entry
  │    ├─ ba_refresh_reordering_mpdus (清空已有队列)
  │    └─ RTMP_ADD_BA_SESSION_TO_ASIC
  └─ mlme_send_addba_resp (发送ADDBA响应)

接收数据重排序流程

ba_reorder
  ├─ amsdu_sanity (检查AMSDU连续性)
  ├─ ba_flush_reordering_timeout_mpdus (超时刷新)
  ├─ 根据序列号判断:
  │   ├─ SEQ_STEPONE → indicate_rx_pkt (直接上交)
  │   ├─ 重复或旧包 → RELEASE_NDIS_PACKET (丢弃)
  │   ├─ 窗口内乱序 → ba_enqueue_reordering_packet
  │   └─ 超过窗口 → ba_indicate... + goto ba_reorder_check
  └─ 更新状态
ba_enqueue_reordering_packet
  ├─ ba_mpdu_blk_alloc
  ├─ convert_reordering_packet_to_preAMSDU_or_802_3_packet
  └─ ba_reordering_mpdu_insertsorted
ba_indicate_reordering_mpdus_in_order
  └─ announce_ba_reorder_pkt → 上交上层

BA会话拆除

ba_ori_session_tear_down
  └─ ba_resrc_ori_del
       ├─ RTMP_DEL_BA_SESSION_FROM_ASIC
       └─ ba_free_ori_entry
ba_rec_session_tear_down
  └─ ba_resrc_rec_del
       ├─ RTMP_DEL_BA_SESSION_FROM_ASIC
       ├─ ba_free_rec_entry
       └─ ba_refresh_reordering_mpdus (清空队列)
peer_delba_action
  ├─ (Initiator=ORIGINATOR) → ba_rec_session_tear_down
  └─ (Initiator=RECIPIENT) → ba_ori_session_tear_down

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐