A-MPDU contents context

本文详细介绍了A-MPDU的三种不同上下文:控制响应、无响应数据和带响应的数据上下文,讨论了各上下文中的包类型、可靠性和确认机制。此外,还提到了HE协议中增加的四种新上下文及其特性,如携带不同类型确认帧的能力,并讨论了tagged MPDU如何简化A-MPDU的块确认形式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

两个任意:
  action no ack可以在任意context下发送(比如CBF)
  S-MPDU context下可以发送任意MPDU
3种context:
1.control response: Ack context. 只包含ack包。并且Ack/Block Ack只能一种。因为要求Ack包一定放在A-MPDU最开始,两种就没办法放了。
2.data no response。只包含data包。
以上两种都是一种可能不可靠的方式:对方有没有收到并不知道。比如Ack对方没收到,我方会接收到对端发来的“重传包”,data对方没收到。这两种contexts是否要用其他protection方式?
3.data with response。
这里的response指的是要求对方回ack。比如blockacqreq或者data under ht-immediate block acq。这是比较可靠的。
另外这个context下还可以附带一些ack/blockack包。这样就能知道对方有没有收到我发的ack/blockacq包。同样,ack/blockacq一定在A-MPDU的最开头。blockacqreq和data under ht-immediate block acq只能选一个。

HE增加了4种contexts:
这4种,在HE PPDU下替代了原先的data with response。
同时,将ack与blockacq类型,分开;将single-TID

/** **************************************************************************************** * @brief Concatenate a A-MPDU with the MPDU just following it. * * The function first checks if with the concatenated MPDU the A-MPDU will still fit * into the HE TB. If not the concatenation is not performed. * * @param[in] txdesc_ampdu First MPDU of the A-MPDU * @param[in, out] txdesc_next Pointer to the TX descriptor of the MPDU. If the * concatenation is done this pointer will be updated with the descriptor just following * the resulting A-MPDU. * @param[in] max_len Maximum length, in bytes, of the HE TB PPDU * @param[in] min_mpdu_len Minimum MPDU length inside the HE TB PPDU (for minimal MPDU * start spacing) * @param[in] ac Access category of the A-MPDU * * @return A boolean indicating if the concatenation was done. If false, then the caller * knows that no additional concatenation shall be attempted, and that the HE TB can be * programmed. **************************************************************************************** */ static bool txl_agg_he_tb_cat_ampdu_mpdu(struct txdesc *txdesc_ampdu, struct txdesc **txdesc_next, uint32_t max_len, uint16_t min_mpdu_len, uint8_t ac) { struct tx_agg_desc *agg_desc = txdesc_ampdu->lmac.agg_desc; struct txdesc *txdesc_mpdu = *txdesc_next; struct txdesc *txdesc_last = agg_desc->txdesc_last; struct txl_list *txlist = &txl_cntrl_env.txlist[ac]; struct tx_hd *thd = tx_desc_thd(txdesc_mpdu); struct tx_hd *thd_last = tx_desc_thd(txdesc_last); uint16_t nb_delims_new = 0, subfrm_len_new; struct tx_hd *a_thd; // Check if MPDU can be concatenated with the A-MPDU if (!(txdesc_mpdu->lmac.status & TXDESC_PUSHED) || (agg_desc->sta_idx != txdesc_mpdu->host.sta_idx) || (agg_desc->tid != txdesc_mpdu->host.tid)) return false; a_thd = &agg_desc->hw->a_thd; // Re-add the +HTC length and order bit in the MPDU buffer if necessary txl_buffer_add_htc(thd); // Compute the new number of delimiters and the sub-frame length #if !NX_MAC_HE_MU_AP nb_delims_new = txl_agg_mpdu_nb_delims(thd, min_mpdu_len); #endif subfrm_len_new = txl_mpdu_subframe_len(thd) + nb_delims_new * DELIMITER_LEN; if ((a_thd->frmx.frmlen + subfrm_len_new) > max_len) return false; // PPDUs will be concatenated, we'll have one less in the TX path txlist->ppdu_cnt--; set_mpdu_pos(txdesc_last, TX_AGG_MPDU_INT); thd_last->mpdu.nextmpdudesc_ptr = CPU2HW(&thd->mpdu); set_mpdu_pos(txdesc_mpdu, TX_AGG_MPDU_LAST); #if NX_MAC_HE_MU_AP agg_desc->nextfrmexseq_ptr = thd->frmx.nextfrmexseq_ptr; #else hal_desc_set_nbdelims(thd, nb_delims_new); #endif thd->frmx.nextfrmexseq_ptr = 0; thd->frmx.policyentryaddr = 0; hal_desc_mpdu_irq_set(thd); a_thd->frmx.frmlen += subfrm_len_new; txdesc_mpdu->lmac.agg_desc = agg_desc; agg_desc->txdesc_last = txdesc_mpdu; #if !NX_TX_FAST_PATH agg_desc->available_len += txdesc_mpdu->lmac.available_len; #endif *txdesc_next = tx_desc_next(agg_desc->txdesc_last); // Update the +HTC with the UPH txl_buffer_update_htc(thd, txl_he_tb_uph_get()); txl_cfm_tag_get(txdesc_mpdu)->ampdu_size++; return (a_thd->frmx.frmlen < max_len); }结合代码详细解释
最新发布
03-22
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

relis

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值