一种无线聚合帧的接收处理方法及接收装置
技术领域
本发明涉及无线局域网通信领域,尤其涉及一种无线聚合帧的接收处理方法和相应装置。
背景技术
为了增加无线局域网(WLAN)的传输速率,IEEE 802.11工作组成立了802.11n任务组以致力于此。802.11n标准在物理层和MAC层都采用了很多措施。 802.11n标准在物理层引入了正交频分复用(OFDM)与多入多出(MIMO)相结合的技术,该技术的使用为实现高速传输打下了基础,成为了高性能物理层(Physics,简称PHY)的标准。在802.11n的基本MAC层协议中,为了确保各个站点都能公平地取得媒质使用机会并尽量避免冲突,使用了一系列控制机制;这些机制在提高系统性能的同时也带来了固定开销,而这些开销则限制了系统吞吐量的提高,MAC层通过采用帧聚合技术有效提高了系统吞吐量。
帧聚合机制的本质为多个数据帧共用一个MAC头部, 简化了帧的结构,去除了以往协议帧之间的帧间间隔和竞争时间,从而提高了MAC层的吞吐量。802.11n协议给出的A-MSDU技术,要求MAC层把用户要求其传输的多个负载帧MSDU(MAC协议数据单元)组成一个负载聚合帧A-MSDU来传送,以提高传输效率。按照标准,一个用户负载帧MSDU对应一个MPDU帧(MPDU,MAC业务数据单元),而MPDU帧在传输时,要求接收方发送一个对应的应答帧(ACK)以确认传输成功。当多个用户负载帧MSDU被重构为一个A-MSDU负载聚合帧后,由于A-MSDU只对应一个MPDU,于是减少了应答帧的数目,从而减小了开销,达到提高传输效率的目的。
通常,MAC层的硬件部分仅负责对MPDU帧的发送和接收,而无需关心MPDU帧承载的是普通的MSDU帧还是A-MSDU聚合帧。但是,对于MAC层软件部分,则必须关心MPDU帧承载的内容格式。因为,在接收到MPDU帧后,MAC层软件必须查看MPDU帧是否承载了A-MSDU聚合帧,如果承载了A-MSDU聚合帧,则分别提取聚合帧中的MSDU帧然后上交给用户。所以在A-MSDU聚合技术的实施中,会涉及MSDU帧的拷贝,尤其在接收的时候把一个聚合帧通过拷贝拆分为多个MSDU帧。很明显,如果这些拷贝操作由软件来完成,那么开销相当大,从而抵消了A-MSDU希望带来的传输效率,而同时,目前的大多数MAC硬件并不支持对MSDU的聚合。
发明内容
本发明的目的是,提供一种无线聚合帧的接收方法及对应装置,在MAC硬件不支持聚合的情况下,高效地完成聚合帧的接收处理。
为了实现上述目的,本发明提供一种无线聚合帧的接收处理方法,包括:
A、协议接收处理单元对接收装置当前接收到的所有MPDU帧依次进行协议上的处理;
B、然后依次将所有处理后的MPDU帧去封装,在每个MPDU帧去封装时,根据去封装后的负载帧不同执行相应不同操作:
如果当前负载帧为单个MSDU帧,且当前缓冲区为空,则将该MSDU帧交给上层用户处理;
如果当前负载帧为单个MSDU帧,且当前缓冲区不为空,则将该MSDU帧存入当前可用的空闲缓冲区中;
如果当前负载帧为聚合帧,则将该聚合帧存入当前可用的空闲缓冲区中,并计算该聚合帧中的MSDU帧的数目以申请相应数目的缓冲区空间;如果该聚合帧存入之前缓冲区为空,则协议接收处理单元建立并启动DMA传输事务完成聚合帧中的MSDU帧拷贝到申请的缓冲区空间;
C、在收到解聚合完成消息后,协议接收处理单元依次将完成解聚合的缓冲区中的MSDU帧交给上层用户处理, 同时为缓冲区中需要解聚合的聚合帧建立并启动DMA传输事务。
具体的,所述缓冲区在初始化时申请,可分为多个子区域,每个子区域对应一个数据帧队列和一个解聚合标志。
具体的,所述步骤B中,将该MSDU帧存入当前可用的空闲缓冲区是指,协议接收处理单元在缓冲区中进行查找,当缓冲区中最后一个不为空的子区域中的数据帧队列为MSDU帧队列,则将该MSDU帧存入该MSDU帧队列;否则直接将该MSDU帧存入到当前空的子区域中的数据帧队列中,并设置该队列的解聚合标志为完成。
具体的,所述步骤B中,将当前聚合帧存入当前可用的缓冲区中,并计算该聚合帧中的MSDU帧的数目以申请相应数目的缓冲区空间是指,协议接收处理单元在缓冲区中进行查找,将当前聚合帧存入到当前空闲子区域中的数据帧队列中,并在该数据帧队列中加入申请的用于存储从聚合帧中拷贝出所有MSDU帧的缓冲区空间,并设置该队列的解聚合标志为未完成。
具体的,所述步骤C中,在收到解聚合完成消息后,协议接收处理单元依次将解聚合标志为完成的子区域的数据帧队列中的MSDU帧交给上层用户处理,并为解聚合标志为未完成的数据帧队列建立并启动DMA传输事务。
具体的,在收到解聚合完成消息后,协议接收处理单元释放解聚合标志为完成的子区域的数据帧队列中的聚合帧,并在将该子区域的数据帧队列中的MSDU帧交给上层用户处理后,清空该子区域。
本发明的另一个目的,是提供一种无线聚合帧的接收装置,包括:
缓冲区单元,用于存储待交给上层用户单元处理的MSDU帧;
协议接收处理单元,用于对接收装置当前接收的所有MPDU帧依次进行协议上的处理,然后再依次将所有处理后的MPDU帧去封装,在每个MPDU帧去封装时,根据去封装后的负载帧不同执行相应不同操作:
如果当前负载帧为单个MSDU帧,且当前缓冲区为空,则将该MSDU帧交给上层用户处理;
如果当前负载帧为单个MSDU帧,且当前缓冲区不为空,则将该MSDU帧存入当前可用的空闲缓冲区中;
如果当前负载帧为聚合帧,将该聚合帧到存入当前可用的空闲缓冲区中,并计算该聚合帧中的MSDU帧的数目以申请相应数目的缓冲区空间,如果该聚合帧存入之前缓冲区为空,则协议接收处理单元建立并启动DMA传输事务用于将聚合帧中的MSDU帧拷贝到申请的缓冲区空间;
解聚合DMA控制处理单元,用于完成协议接收处理单元建立的DMA传输事务,并在传输事务完成解聚合后通知协议接收处理单元;
所述协议接收处理单元还用于,收到解聚合DMA控制处理单元的解聚合完成消息时,依次将缓冲区中的MSDU帧交给上层用户处理,同时为需要解聚合的帧建立并启动DMA传输事务,从而将聚合帧中的MSDU帧依次拷贝到数据帧队列中申请的缓冲区空间。
具体的,所述缓冲区单元在初始化时申请,可分为多个子区域,每个子区域对应一个数据帧队列以及一个解聚合标志。
具体的,所述协议接收处理单元还用于,
判断当前去封装的负载帧为单个MSDU帧,且当前缓冲区不为空时,在缓冲区中进行查找,当缓冲区中最后一个不为空的子区域中的数据帧队列为MSDU帧队列,则将该MSDU帧存入该MSDU帧队列;否则直接将该MSDU帧存入到当前空的子区域中的数据帧队列中,并设置该队列的解聚合标志为完成;
判断当前去封装的负载帧为聚合帧时,在缓冲区中进行查找,将当前聚合帧存入到当前空闲子区域中的数据帧队列中,并计算该聚合帧中的MSDU帧的数目以申请相应数目的缓冲区空间,并在该数据帧队列中加入申请的用于存储从聚合帧中拷贝出所有MSDU帧的空间,并设置该队列的解聚合标志为未完成。
具体的,解聚合DMA控制处理单元包括解聚合DMA控制器子单元和解聚合DMA完成处理程序子单元,
所述解聚合DMA控制器子单元,用于完成协议接收处理单元建立的DMA传输事务;并用于在所有的DMA传输事务完成后,通过中断触发解聚合DMA完成处理程序子单元执行相应程序;
所述解聚合DMA完成处理程序子单元,用于设置缓冲区中对应子区域的数据帧队列的解聚合标志为完成,然后发送解聚合完成消息给协议接收处理单元。
综上,本发明在MAC硬件不支持聚合的情况下,通过硬件DMA控制器完成聚合帧中MSDU帧的拷贝,提高聚合帧的接收处理效率,并且保证了接收数据帧的顺序。
附图说明
图1 是本发明无线聚合帧的接收处理方法流程图。
图2是本发明提供的无线聚合帧的接收处理方法实施例的判断流程图。
图3是本发明无线聚合帧的接收装置结构示意图。
图4是本发明无线聚合帧的接收装置实施例的结构示意图。
图5是本发明无线聚合帧的接收装置的缓冲区单元的结构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明作进一步详细说明。
参见图1,为本发明提供的无线聚合帧的接收处理方法流程图,其具体步骤为:
步骤101、协议接收处理单元对接收装置当前接收到的所有MPDU帧依次进行协议上的处理;
在本步骤中,接收装置从媒介接收到MPDU帧后,一般后先放入MPDU接收队列(也可以不放),接收装置的MPDU协议接收处理单元接收到MPDU帧的入队通知后,从MPDU接收队列中取出所有的MPDU帧,进行MPDU协议上的相关处理。
步骤102、然后依次将所有处理后的MPDU帧去封装,在每个MPDU帧去封装时,根据去封装后的负载帧不同执行相应不同操作:
步骤1021、当前负载帧为单个MSDU帧,且当前缓冲区为空,则将该MSDU帧交给上层用户处理;本子步骤中,由于当前缓冲区为空,则说明当前没有需要解聚合的聚合帧,所以不存在接收帧保序问题,可以直接将当前的单个MSDU帧交给上层用户处理了。
步骤1022、当前负载帧为单个MSDU帧,且当前缓冲区不为空,则将该MSDU帧存入当前可用的空闲缓冲区中;本子步骤中,由于当前缓冲区不为空,说明有需要解聚合的聚合帧在排队,所以为了保证数据帧的序列,需要将当前的单个MSDU帧顺序放入缓冲区中的MSDU队列中或者空闲缓冲区中排队。
步骤1023、当前负载帧为聚合帧,则将该聚合帧存入当前可用的空闲缓冲区中,并计算该聚合帧中的MSDU帧的数目以申请相应数目的缓冲区空间,如果该聚合帧存入之前缓冲区为空,则协议接收处理单元建立并启动DMA传输事务,以完成将聚合帧中的MSDU帧拷贝到申请的缓冲区空间;本子步骤中当当前负载帧是此时缓冲区中唯一的聚合帧时,即该聚合帧存入之前缓冲区为空时,协议接受处理单元则建立并启动多个DMA传输事务,完成解聚合后才能交给上层用户处理,所以可以采用DMA技术拷贝出聚合帧中的MSDU帧完成解聚合,由于实现预先申请了用于存储拷贝出的MSDU帧的缓冲区空间,所以解聚合后的MSDU帧还是顺序的。
步骤103、在收到解聚合完成消息后,协议接收处理单元依次将完成解聚合的缓冲区中的MSDU帧交给上层用户处理, 同时为缓冲区中需要解聚合的聚合帧建立并启动DMA传输事务。
在本步骤中,协议接收处理单元在收到解聚合完成消息后,顺序将完成解聚合的缓冲区中的所有MSDU交给上层用户处理,一旦缓冲区中的MSDU被取出交给上层用户处理,则该缓冲区中对应的空间被清空;同时协议接收处理单元对缓冲区中对应状态为需要解聚合的聚合帧建立并启动DMA传输事务,完成将聚合帧中的MSDU帧拷贝到申请的缓冲区空间。
实施例
在本实施例中,将用于临时存放MSDU帧的缓冲区分为多个子区域,每个子区域对应一个数据帧队列以及一个解聚合标志。数据帧队列用来存储聚合帧或者MSDU帧,解聚合标志可分为完成和未完成两种类型。当数据帧队列存储的是连续MSDU单帧时,该队列的解聚合标志为完成,并称该数据帧队列为MSDU帧队列;当数据帧队列存入的是等待解聚合的聚合帧时,该队列的解聚合标志为未完成,该数据帧队列称为聚合帧队列,同时一旦聚合帧队列中的聚合帧中的MSDU帧已经全部拷贝出并存入该队列中,则该队列的解聚合标志变为完成且该队列中的聚合帧会被删除。
在接收装置的协议接收处理单元对接收装置当前接收到的所有MPDU帧进行协议上的处理后,开始对处理后的MPDU帧去封装并对去封装后的负载帧进行判断,根据判断结果不同执行不同的操作,判断流程图见图2,具体为:
如果当前负载帧为单个MSDU帧,且当前缓冲区为空,则将该MSDU帧直接交给上层用户处理;
如果当前负载帧为单个MSDU帧,且当前缓冲区中不为空,则在缓冲区中进行查找,当缓冲区中最后一个不为空的子区域中的数据帧队列为MSDU帧队列,则将该MSDU帧存入该MSDU帧队列;否则直接将该MSDU帧存入到当前空的子区域中的数据帧队列中,并设置该队列的解聚合标志为完成;
如果当前负载帧为聚合帧,协议接收处理单元计算该聚合帧中的MSDU帧的数目,接着分配对应MSDU帧数目的缓冲区空间,然后在缓冲区中查找空闲的子区域,并将当前聚合帧及新分配的MSDU帧缓冲区空间加入到该空闲子区域的数据帧队列中,并设置该队列的解聚合标志为未完成;如果聚合帧加入之前缓冲区为空,即上述添加的聚合帧是此时缓冲区中唯一的聚合帧,协议接收处理单元则建立并启动多个DMA传输事务,以从聚合帧中拷贝出多个MSDU帧;在DMA传输事务完成时,对应的数据帧队列的解聚合标志被设置为完成,协议接收处理单元收到解聚合完成消息后,删除执行拷贝操作的数据帧队列中的聚合帧。一旦收到DMA事务完成的通知被触发,协议接收处理单元则依次将每个子区域中解聚合标志为完成的数据帧队列中的MSDU帧交给上层用户处理,并清空该MSDU帧所占用的缓冲区空间。在依次将子区域中数据帧队列中的MSDU帧交给上层用户处理时,协议接收处理单元首先判断当前子区域的数据帧队列的解聚合标志是否为完成,如是,则将该子区域的数据帧队列中的MSDU帧交给上层用户处理,并清空该子区域,如否,则建立并启动DMA传输事务,以完成从聚合帧中拷贝出MSDU帧。
在DMA传输事务完成后,一般会发送聚合完成消息给协议接收处理单元;在收到解聚合完成消息后,协议接收处理单元释放解聚合标志为完成的子区域的数据帧队列中的聚合帧,并在将该子区域的数据帧队列中的MSDU帧交给上层用户处理后,清空该子区域。如果查找到有解聚合标志为未完成的子区域,则停止上交MSDU帧给上层用户处理的操作,建立并启动多个DMA传输事务,从而将当前子区域对应的数据帧队列中聚合帧中的MSDU帧依次拷贝到数据帧队列中申请的缓冲区空间。
本发明还提供了一种实施上述无线聚合帧接收处理方法的装置,如图3所示,本接收装置包括:
缓冲区单元,用于存储待交给上层用户单元处理的MSDU帧;
协议接收处理单元,用于对接收装置当前接收的所有MPDU帧依次进行协议上的处理,然后再依次将所有处理后的MPDU帧去封装,在每个MPDU帧去封装时,根据去封装后的负载帧不同执行相应不同操作:如果当前负载帧为单个MSDU帧,且当前缓冲区为空,则将该MSDU帧交给上层用户处理;如果当前负载帧为单个MSDU帧,且当前缓冲区不为空,则将该MSDU帧存入当前可用的空闲缓冲区中;如果当前负载帧为聚合帧,将该聚合帧存入当前可用的空闲缓冲区中,并计算该聚合帧中的MSDU帧的数目以申请相应数目的缓冲区空间,如果该聚合帧存入之前前缓冲区为空,则协议接收处理单元建立并启动DMA传输事务用于将聚合帧中的MSDU帧拷贝到申请的MSDU帧中;所述协议接收处理单元还用于,收到解聚合完成消息时,依次将缓冲区中的MSDU帧交给上层用户处理,同时为缓冲区中需要解聚合的聚合帧建立并启动DMA传输事务,从而将聚合帧中的MSDU帧拷贝到新分配的MSDU帧中;
解聚合DMA控制处理单元,用于完成协议接收处理单元建立的DMA传输事务,并在传输事务完成解聚合后通知协议接收处理单元。
参见图4,是本发明提供的无线聚合帧的接收装置的实施例,包括用于存储待交给上层用户单元处理的MSDU帧的缓冲区单元,图5是本发明实施例的缓冲区单元的结构示意图;本发明的接收装置还包括用于对接收的MPDU帧进行协议上处理,然后再对去封装后的负载帧进行判断并执行不同操作的协议接收处理单元。还包括用于完成协议接收处理单元建立的DMA传输事务,并在传输事务完成解聚合后通知接收协议处理单元的解聚合DMA控制处理单元。在本实施例中,本发明的接收装置还包括用于将从媒介接收的MPDU帧存入MPDU接收队列的MAC接收单元。
在本实施例中,解聚合DMA控制处理单元包括解聚合DMA控制器子单元,用于完成协议接收处理单元建立的DMA传输事务,并用于在所有的DMA传输事务完成后,通过中断触发解聚合DMA完成处理程序子单元执行相应程序;还包括解聚合DMA完成处理程序子单元,用于设置缓冲区中对应子区域的数据帧队列的解聚合标志为完成,然后发送解聚合完成消息给协议接收处理单元。
为了更深入的理解本发明,现就本发发明实施例的接收装置实施本发明接收处理方法的具体过程进行详细说明,在本实施例中,定义如下参数:
MSDU-SUB-SIZE表示缓冲区中子区域的个数,
MSDU-AMSDU-IDEX表示正在进行解聚合的子区域在缓冲区中的位置,MSDU-MSDU-IDEX表示可存放MSDU帧的子区域在缓冲区中的位置,MSDU-EMPTY-IDEX表示空闲的子区域在缓冲区中的位置。
子区域中数据帧队列的解聚合标志具有两个值:Done和Undone,其中Done
表示解聚合操作解聚合标志,而Undone表示解聚合操作未解聚合标志。
接收装置的MAC接收单元从媒介接收到无线MPDU帧后,首先把MPDU帧存放到MPDU接收队列中,然后发送入队消息通知协议接收处理单元;协议接收处理单元完成所有当前接收的MPDU帧的协议处理,然后对需要解聚合的负载帧完成解聚合后将解聚合后的负载帧交给上层用户处理,所以协议接收处理单元执行的具体操作参见如下步骤A01-A03:
步骤A01:协议接收处理单元查询是否有解聚合完成消息,如果否,则进行步骤A02的查询及操作,否则进一步判断正在进行解聚合的子区域在缓冲区中的位置MSDU-AMSDU-IDEX是否等于空闲的子区域在缓冲区中的位置MSDU-EMPTY-IDEX,如果是,则返回继续进行本步骤A01的查询及操作,否则进一步判断MSDU-AMSDU-IDEX对应子区域的解聚合标志是否为Done,如果是,则取出子区域中的数据帧队列中的数据帧,把数据帧队列中的MSDU帧依次交给上层用户处理,并令MSDU-AMSDU-IDEX=(MSDU-AMSDU-IDEX+1)mod MSDU-SUB-SIZE,并返回本A01步骤中判断MSDU-AMSDU–IDEX是否等于MSDU-EMPTY-IDEX的步骤;如果否进入步骤A03的操作;
步骤A02:协议接收处理单元查询是否有MPDU入队消息,如果否,则执行步骤A01的查询及操作,否则从MPDU接收队列中取出队列中所有MPDU帧,并按顺序依次对其中的MPDU帧进行协议上的处理,完成对所有MPDU帧的处理后,开始对处理后的MPDU帧去封装并对去封装后的负载帧进行如下判断并执行对应的操作,直至对所有的MPDU帧完成判断及对应操作,然后进入步骤A01的查询及操作:
如果当前负载帧为单个MSDU帧,且当前缓冲区为空即MSDU-AMSDU–IDEX等于MSDU-EMPTY-IDEX,则将该MSDU帧直接交给上层用户处理;返回本判断步骤;
如果当前负载帧为单个MSDU帧,且当前缓冲区不为空即MSDU-AMSDU-IDEX不等于MSDU-EMPTY-IDEX,则在缓冲区中进行查找,当缓冲区中最后一个不为空的子区域中的数据帧队列为MSDU帧队列即(MSDU-MSDU-IDEXX+1)mod MSDU-SUB-SIZE等于MSDU-EMPTY-IDEX,则把MSDU帧放入MSDU-MSDU-IDEX对应子区域数据帧队列的尾部;否则进一步判断(MSDU-EMPTY-IDEX+1)mod MSDU-SUB-SIZE是否等于MSDU- AMSDU-IDEX,如果是则丢弃该MSDU帧,否则把MSDU帧放入MSDU-EMPTY-IDEX对应的子区域的数据帧队列中,设置该子区域的解聚合标志为Done,设置MSDU-EMPTY-IDEX=(MSDU-EMPTY-IDEX+1)mod MSDU-SUB-SIZE;返回本判断步骤;
如果当前负载帧为聚合帧,且当前缓冲区满即(MSDU-EMPTY-IDEX+1)mod MSDU-SUB-SIZE等于MSDU- AMSDU-IDEX,则丢弃该聚合帧A-MSDU,返回本判断步骤;
如果当前负载帧为聚合帧,且当前缓冲区未满即(MSDU-EMPTY-IDEX+1)mod MSDU-SUB-SIZE不等于MSDU- AMSDU-IDEX,则首先计算该聚合帧A-MSDU中包含的MSDU帧的数目,接着分配对应数目的存储MSDU帧缓冲区空间,然后将当前聚合帧及新分配的MSDU帧存入到该空闲子区域的数据帧队列中,并设置该队列的解聚合标志为Undone,并设置MSDU-EMPTY-IDEX=(MSDU-EMPTY-IDEX+1)mod MSDU-SUB-SIZE,MSDU-MSDU-IDEX =MSDU-EMPTY-IDEX,最后,如果上述添加的聚合帧是此时缓冲区中唯一的聚合帧,则建立并启动多个DMA传输事务,以从聚合帧中拷贝出多个MSDU帧;返回本判断步骤。
步骤A03,协议接收处理单元建立并启动多个DMA传输事务后,协议接收处理单元进入步骤A02的查询及操作;解聚合DMA控制器单元执行协议接收处理单元建立的DMA传输事务,以从对应子区域的数据帧队列头部的A-MSDU帧中拷贝出多个MSDU,当所有的DMA传输事务完成后,解聚合DMA控制器单元通过中断触发解聚合DMA完成处理程序单元执行;解聚合DMA完成处理程序单元首先设置缓冲区中MSDU-AMSDU-IDEX对应的子区域的解聚合标志为Done,然后发送解聚合完成消息给协议接收处理单元。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。