发明内容
为了解决上述的技术问题,提供了一种协议数据单元构造和解析的方法及装置,其目的在于,实现媒体接入控制系统中协议数据单元高效的构建和解析功能。
本发明提供了一种协议数据单元构造的装置,用于宽带无线媒体接入控制系统,包括:
长度统计器,用于接收需要发送的CE数据净荷的净荷长度和/或SDU数据净荷的净荷长度,计算所构造PDU中CE子头的长度和/或SDU子头的长度,累加该PDU中所有子头的长度以及需要发送的CE数据净荷的净荷长度和/或SDU数据净荷的净荷长度,并将累加结果送入格式选择器;
格式选择器,用于根据需要发送的数据中是否包含SDU数据净荷、无线资源分配实体分配的PDU长度,以及长度统计器输出的累加结果,为需要发送的数据选择对应的PDU格式;计算子头区的位置与净荷区的位置,并将所选择的PDU格式、子头区的位置与净荷区的位置、以及CE数据净荷和/或SDU数据净荷送入协议数据单元构造器;
协议数据单元构造器,用于根据格式选择器所选择的PDU格式、子头区的位置与净荷区的位置、以及CE数据净荷和/或数据净荷构造PDU。
长度统计器包括SDU计算器、CE计算器和长度累加器;
所述SDU计算器,用于计算SDU数据净荷在所构造的PDU中的子头长度以及SDU数据净荷的净荷长度;
所述CE计算器,用于计算CE数据净荷在所构造的PDU中的子头长度以及CE数据净荷的净荷长度;
所述长度累加器,用于对SDU子头的长度和/或CE子头的长度、SDU数据净荷的净荷长度和/或CE数据净荷的净荷长度进行累加统计,得到不包括填充的PDU总长度。
所述SDU计算器,还用于将最后一个SDU子头以1字节计算。
PDU格式为:无SDU情况下的无填充格式,无SDU情况下的插入填充格式,无SDU情况下的普通填充格式,有SDU情况下的无填充格式,有SDU情况下的插入填充格式,或有SDU情况下的普通填充格式。
无线资源分配实体分配的PDU长度大于长度统计器的累加结果时,所述格式选择器为需要发送的数据选择对应的PDU格式具体为:
如果需要发送的数据中包含SDU且填充值为0,为需要发送的数据选择的PDU格式为有SDU情况下的无填充格式;
如果需要发送的数据中包含SDU且填充值为1,为需要发送的数据选择的PDU格式为有SDU情况下的插入填充格式,并限定填充子头为1字节;
如果需要发送的数据中包含SDU且填充值为2,并且如果最后一个SDU的子头长度为两字节,为需要发送的数据选择的PDU格式为有SDU情况下的普通填充格式,并限定无填充净荷;
如果需要发送的数据中包含SDU且填充值为2,并且如果最后一个SDU的子头长度非两字节,为需要发送的数据选择的PDU格式为有SDU情况下的插入填充格式,并限定填充子头为2字节;
如果需要发送的数据中包含SDU且填充值大于2,为需要发送的数据选择的PDU格式为有SDU情况下的普通填充格式;
如果需要发送的数据中不包含SDU且填充值为0,为需要发送的数据选择的PDU格式为无SDU情况下的无填充格式;
如果需要发送的数据中不包含SDU且填充值为1,为需要发送的数据选择的PDU格式为无SDU情况下的插入填充格式;
如果需要发送的数据中不包含SDU且填充值大于1,为需要发送的数据选择的PDU格式为无SDU情况下的普通填充格式。
无线资源分配实体分配的PDU长度小于长度统计器的累加结果时,所述格式选择器丢弃CE数据净荷和/或SDU数据净荷。
所述协议数据单元构造器,用于依据格式选择器所选择的PDU格式为CE数据净荷构造子头,依据子头区的位置放入子相应子头区,并依据净荷区的位置将CE数据净荷放入相应净荷区,和/或依据格式选择器所选择的PDU格式为SDU数据净荷构造子头,依据子头区的位置放入子相应子头区,并依据净荷区的位置将SDU数据净荷放入相应净荷区。
所述协议数据单元构造器,还用于:
格式选择器所选择的PDU格式为有SDU情况下的无填充格式、有SDU情况下的插入填充格式或有SDU情况下的普通填充格式时,判断需要发送的数据是否有CE数据净荷,如果是,则根据CE数据净荷构造CE子头,依据子头区的位置放入子相应子头区,并依据净荷区的位置将CE数据净荷放入相应净荷区,否则判断格式选择器所选择的PDU格式;
如果格式选择器所选择的PDU格式为有SDU情况下的无填充格式,则为SDU数据净荷构造子头,依据子头区的位置放入子相应子头区,依据净荷区的位置将SDU数据净荷放入相应净荷区;为最后一个SDU数据净荷构造长度为1字节的子头,依据子头区的位置放入子相应子头区,依据净荷区的位置将SDU数据净荷放入相应净荷区;
如果格式选择器所选择的PDU格式为有SDU情况下的插入填充格式,则根据限定的长度在第一个SDU数据净荷的子头之前插入填充子头,并为SDU数据净荷构造子头,依据子头区的位置放入子相应子头区,依据净荷区的位置将SDU数据净荷放入相应净荷区;为最后一个SDU数据净荷构造长度为1字节的子头,依据子头区的位置放入子相应子头区,依据净荷区的位置将SDU数据净荷放入相应净荷区;
如果格式选择器所选择的PDU格式为有SDU情况下的普通填充格式,则为SDU数据净荷构造子头,依据子头区的位置放入子相应子头区,依据净荷区的位置将SDU数据净荷放入相应净荷区;在所有的SDU数据净荷构造完成之后,再构造长度为1字节的填充子头,并根据限定的填充净荷大小,在净荷区构造填充净荷。
所述协议数据单元构造器,还用于:
格式选择器所选择的PDU格式为无SDU情况下的无填充格式、无SDU情况下的插入填充格式或无SDU情况下的普通填充格式时,判断是否插入填充;
如果是,构造CE子头,依据子头区的位置放入子相应子头区,并依据净荷区的位置将CE数据净荷放入相应净荷区;在剩下最后一个CE数据净荷时,插入填充子头并构造CE子头,依据子头区的位置放入子相应子头区,并依据净荷区的位置将CE数据净荷放入相应净荷区;
如果否,构造CE子头,依据子头区的位置放入子相应子头区,并依据净荷区的位置将CE数据净荷放入相应净荷区;在所有CE数据净荷构造完成之后,如果有填充,则在子头区插入填充子头,并在净荷区插入填充净荷。
本发明提供了一种协议数据单元解析的装置,用于宽带无线媒体接入控制系统,包括:
解析模块,用于将CE数据净荷和/或SDU数据净荷的逻辑信道号和净荷长度记录在子头信息队列中;
根据其中的逻辑信道号和净荷长度从PDU净荷中逐个划分出CE数据净荷和/或SDU数据净荷,并提交CE数据净荷,和/或提交SDU数据净荷。
解析模块,还用于在最后一个SDU子头没有长度域时,将其净荷长度记录为0。
解析模块,还用于在处理完一个CE子头或SDU子头后,将PDU的总长度减去当前子头长度得到PDU净荷的总长度,若该长度小于0,则报告错误并丢弃当前处理的PDU。
解析模块,还用于处理完一个CE数据净荷或SDU数据净荷后,将PDU剩余长度减去当前提交CE数据净荷或SDU数据净荷的长度,并将该长度作为更新后的PDU剩余净荷长度。
解析模块,还用于在子头信息队列中最后一个单元的净荷长度值为0时,使用当前剩余长度作为该CE数据净荷或SDU数据净荷的净荷长度。
解析模块,还用于在CE子头为填充子头时,不将子头信息记录于子头信息队列中,仅计算PDU剩余净荷长度;在CE子头不是填充子头时,将CE数据净荷的逻辑信道号和净荷长度记录在子头信息队列中,并计算PDU剩余净荷长度。
解析模块,还用于在解析完所有的CE子头和/或SDU子头后,如果存在CE子头节点和/或SDU子头节点,则提取CE数据净荷和/或SDU数据净荷,并提交CE数据净荷,和/或提交SDU数据净荷。
本发明提供了一种协议数据单元构造的方法,用于宽带无线媒体接入控制系统,包括:
步骤1,长度统计器接收需要发送的CE数据净荷的净荷长度和/或SDU数据净荷的净荷长度,计算所构造PDU中CE子头的长度和/或SDU子头的长度,累加该PDU的所有子头的长度以及需要发送的CE数据净荷的净荷长度和/或SDU数据净荷的净荷长度,并将累加结果送入格式选择器;
步骤2,格式选择器根据需要发送的数据中是否包含SDU数据净荷、无线资源分配实体分配的PDU长度,以及长度统计器输出的累加结果,为需要发送的数据选择对应的PDU格式;计算子头区的位置与净荷区的位置,并将所选择的PDU格式、子头区的位置与净荷区的位置、以及CE数据净荷和/或SDU数据净荷送入协议数据单元构造器;
步骤3,协议数据单元构造器根据格式选择器所选择的PDU格式、子头区的位置与净荷区的位置、以及CE数据净荷和/或数据净荷构造PDU。
长度统计器包括SDU计算器、CE计算器和长度累加器;
所述SDU计算器,用于计算SDU数据净荷在所构造的PDU中的子头长度以及SDU数据净荷的净荷长度;
所述CE计算器,用于计算CE数据净荷在所构造的PDU中的子头长度以及CE数据净荷的净荷长度;
所述长度累加器,用于对SDU子头的长度和/或CE子头的长度、SDU数据净荷的净荷长度和/或CE数据净荷的净荷长度进行累加统计,得到不包括填充的PDU总长度。
所述SDU计算器,还用于将最后一个SDU子头以1字节计算。
PDU格式为:无SDU情况下的无填充格式,无SDU情况下的插入填充格式,无SDU情况下的普通填充格式,有SDU情况下的无填充格式,有SDU情况下的插入填充格式,或有SDU情况下的普通填充格式。
无线资源分配实体分配的PDU长度大于长度统计器的累加结果时,所述格式选择器为需要发送的数据选择对应的PDU格式具体为:
如果需要发送的数据中包含SDU且填充值为0,为需要发送的数据选择的PDU格式为有SDU情况下的无填充格式;
如果需要发送的数据中包含SDU且填充值为1,为需要发送的数据选择的PDU格式为有SDU情况下的插入填充格式,并限定填充子头为1字节;
如果需要发送的数据中包含SDU且填充值为2,并且如果最后一个SDU的子头长度为两字节,为需要发送的数据选择的PDU格式为有SDU情况下的普通填充格式,并限定无填充净荷;
如果需要发送的数据中包含SDU且填充值为2,并且如果最后一个SDU的子头长度非两字节,为需要发送的数据选择的PDU格式为有SDU情况下的插入填充格式,并限定填充子头为2字节;
如果需要发送的数据中包含SDU且填充值大于2,为需要发送的数据选择的PDU格式为有SDU情况下的普通填充格式;
如果需要发送的数据中不包含SDU且填充值为0,为需要发送的数据选择的PDU格式为无SDU情况下的无填充格式;
如果需要发送的数据中不包含SDU且填充值为1,为需要发送的数据选择的PDU格式为无SDU情况下的插入填充格式;
如果需要发送的数据中不包含SDU且填充值大于1,为需要发送的数据选择的PDU格式为无SDU情况下的普通填充格式。
无线资源分配实体分配的PDU长度小于长度统计器的累加结果时,所述格式选择器丢弃CE数据净荷和/或SDU数据净荷。
所述协议数据单元构造器,用于依据格式选择器所选择的PDU格式为CE数据净荷构造子头,依据子头区的位置放入子相应子头区,并依据净荷区的位置将CE数据净荷放入相应净荷区,和/或依据格式选择器所选择的PDU格式为SDU数据净荷构造子头,依据子头区的位置放入子相应子头区,并依据净荷区的位置将SDU数据净荷放入相应净荷区。
所述协议数据单元构造器,还用于:
格式选择器所选择的PDU格式为有SDU情况下的无填充格式、有SDU情况下的插入填充格式或有SDU情况下的普通填充格式时,判断需要发送的数据是否有CE数据净荷,如果是,则根据CE数据净荷构造CE子头,依据子头区的位置放入子相应子头区,并依据净荷区的位置将CE数据净荷放入相应净荷区,否则判断格式选择器所选择的PDU格式;
如果格式选择器所选择的PDU格式为有SDU情况下的无填充格式,则为SDU数据净荷构造子头,依据子头区的位置放入子相应子头区,依据净荷区的位置将SDU数据净荷放入相应净荷区;为最后一个SDU数据净荷构造长度为1字节的子头,依据子头区的位置放入子相应子头区,依据净荷区的位置将SDU数据净荷放入相应净荷区;
如果格式选择器所选择的PDU格式为有SDU情况下的插入填充格式,则根据限定的长度在第一个SDU数据净荷的子头之前插入填充子头,并为SDU数据净荷构造子头,依据子头区的位置放入子相应子头区,依据净荷区的位置将SDU数据净荷放入相应净荷区;为最后一个SDU数据净荷构造长度为1字节的子头,依据子头区的位置放入子相应子头区,依据净荷区的位置将SDU数据净荷放入相应净荷区;
如果格式选择器所选择的PDU格式为有SDU情况下的普通填充格式,则为SDU数据净荷构造子头,依据子头区的位置放入子相应子头区,依据净荷区的位置将SDU数据净荷放入相应净荷区;在所有的SDU数据净荷构造完成之后,再构造长度为1字节的填充子头,并根据限定的填充净荷大小,在净荷区构造填充净荷。
所述协议数据单元构造器,还用于:
格式选择器所选择的PDU格式为无SDU情况下的无填充格式、无SDU情况下的插入填充格式或无SDU情况下的普通填充格式时,判断是否插入填充;
如果是,构造CE子头,依据子头区的位置放入子相应子头区,并依据净荷区的位置将CE数据净荷放入相应净荷区;在剩下最后一个CE数据净荷时,插入填充子头并构造CE子头,依据子头区的位置放入子相应子头区,并依据净荷区的位置将CE数据净荷放入相应净荷区;
如果否,构造CE子头,依据子头区的位置放入子相应子头区,并依据净荷区的位置将CE数据净荷放入相应净荷区;在所有CE数据净荷构造完成之后,如果有填充,则在子头区插入填充子头,并在净荷区插入填充净荷。
本发明提供了一种协议数据单元解析的方法,用于宽带无线媒体接入控制系统,包括:
步骤4,解析模块将CE数据净荷和/或SDU数据净荷的逻辑信道号和净荷长度记录在子头信息队列中;
步骤5,解析模块根据其中的逻辑信道号和净荷长度从PDU净荷中逐个划分出CE数据净荷和SDU数据净荷,并提交CE数据净荷,和/或提交SDU数据净荷。
解析模块,还用于在最后一个SDU子头没有长度域时,将其净荷长度记录为0。
解析模块,还用于在处理完一个CE子头或SDU子头后,将PDU的总长度减去当前子头长度得到PDU净荷的总长度,若该长度小于0,则报告错误并丢弃当前处理的PDU。
解析模块,还用于处理完一个CE数据净荷或SDU数据净荷后,将PDU剩余长度减去当前提交净荷的长度,并将该长度作为更新后的PDU剩余净荷长度。
解析模块,还用于在子头信息队列中最后一个单元的净荷长度值为0时,使用当前剩余长度作为该CE数据净荷或SDU数据净荷的净荷长度。
解析模块,还用于在还用于在CE子头为填充子头时,不将子头信息记录于子头信息队列中,仅计算PDU剩余净荷长度;在CE子头不是填充子头时,将CE数据净荷的逻辑信道号和净荷长度记录在子头信息队列中,并计算PDU剩余净荷长度。
解析模块,还用于在解析完所有的CE子头和/或SDU子头后,如果存在CE子头节点和/或SDU子头节点,则提取CE数据净荷和/或SDU数据净荷,并提交CE数据净荷,和/或提交SDU数据净荷。
本发明提供了一种协议数据单元构造和解析的系统,用于宽带无线媒体接入控制系统,包括本发明提供的协议数据单元构造的装置,以及协议数据单元构造的装置。
本发明提出了一种针对宽带无线接入网中媒体接入控制系统的协议数据单元构造和解析的方法及装置,结合LTE协议,通过长度统计器、格式选择器以及协议数据单元构造器三个设备,有效完成了媒体接入控制层对协议数据单元的构造;通过协议数据单元解析装置,完成了对PDU的正确、高效解析。
具体实施方式
本发明提供一种无线接入网络媒体接入控制系统。该系统包括一个协议数据单元构造装置和一个协议数据单元解析装置。
所述协议数据单元构造装置完成协议数据单元的打包、构造功能。该构造装置包括长度统计器,格式选择器和协议数据单元构造器三个设备;
所述协议数据单元解析装置完成对协议数据单元解包、处理的功能。
所述协议数据单元构造装置,包括一个长度统计器,该长度统计器又包括服务数据单元(Service Digital Unit,简称SDU)计算器、控制元素(ControlElement,CE)计算器和长度累加器,其中:
所述服务数据单元计算器计算每个服务数据单元(SDU)在该协议数据单元(PDU)中子头长度;
所述控制单元计算器计算控制元素(CE)在该协议数据单元(PDU)中子头的长度;
所述长度累加器,对SDU子头长度、CE子头长度、SDU净荷长度和CE净荷长度进行累加统计,得到不包括填充(padding)的协议数据单元总长度。当存在需要发送的CE净荷时需要设置相应的CE子头,当存在需要发送的SDU净荷时需要设置相应的SDU子头,因此长度累加器也可能只累加SDU子头长度与SDU净荷长度,或者只累加CE子头长度与CE净荷长度。
特别的,所述SDU子头的长度为2或3字节,由该SDU数据长度决定,由于协议规定最后一个子头长度1字节,而此时未确定最后一个子头应该为SDU子头或填充子头,因此,把最后一个SDU子头长度暂记为1字节。
所述协议数据单元构造装置,还包括一个格式选择器,该格式选择器根据所述长度统计器计算的结果及特定的条件,进行容错处理,并确定PDU应该采用的格式,并计算子头区域的位置和净荷区域的位置;在构造PDU时,对一个SDU或CE,只需遍历一次数据,就可以同时构造其子头和净荷。如果不知道净荷的位置,由于MAC头和SDU是可变长度的,在构造SDU的子头时要遍历一次数据,等所有子头构造完毕,才能填写SDU或CE数据,这样又要遍历一次数据,增加了复杂度。
特别的,所述格式选择器带有的容错处理,是当计算出资源管理实体为该PDU分配的字节数大小不足,以至于无法打包当前数据时,报告错误,并丢弃待构造数据;
特别的,所述格式选择器首先根据需要发送的数据判断当前数据类型,并根据当前数据类型和长度统计器输出的累加结果,判断当前是否有SDU数据净荷待构造,若无,则选择无SDU的构造类型的格式,若有,则在填充长度大于或等于2的情况下,须对长度统计器的结果进行二次处理,根据二次处理结果选择有SDU的构造类型中的格式。
具体的,所述对长度统计器结果的二次处理,根据已知的填充长度和最后一个SDU原有的子头长度(2或3字节)来确定最后一个子头是填充字头还是数据子头,进而选择有SDU的构造类型中的格式。
特别的,所述格式选择器在获得PDU的格式类型后,根据子头的起始位置和子头长度,得出净荷区的起始位置,并把该结果交给协议数据单元构造器,使得协议数据单元构造器遍历一次数据便可同时构造PDU的子头和净荷。
特别的,所述格式选择器选定的格式类型,包括6中,其中三种是在无SDU情况下的格式,包括:无填充格式,插入填充格式,普通填充格式;另外三种是在有SDU情况下的格式,包括:无填充格式,插入填充格式,普通填充格式;
具体的,对于无SDU的构造类型,所述无填充格式是指最后一个PDU子头为控制元素子头,不出现填充子头和填充净荷;所述插入填充格式是指填充子头出现在最后一个CE子头之前,不出现填充净荷;所述普通填充格式是指在最后一个CE子头之后添加填充子头,视剩余字节数确定填充净荷大小;对于有SDU的构造类型,所述无填充格式是指PDU包括CE和SDU的子头和净荷,不出现填充子头和净荷;所述插入填充格式是指在CE和SDU子头之间插入1字节或2字节的填充子头,不出现填充净荷;所述普通填充格式是指PDU的子头包括CE、SDU以及填充子头,视剩余字节数确定填充净荷大小;
所述协议数据单元构造装置,还包括一个协议数据单元构造器,该构造器根据所述格式选择器选择的PDU格式,构造完整的PDU。
特别的,所述协议数据单元构造器首先为一个CE或SDU构造子头并放入对应子头区,再把该数据放入对应净荷区,直至处理完所有的CE和SDU,对同一个CE或SDU来说,实现了其子头与数据的同步构造,减少了遍历数据的次数;
所述协议数据单元解析装置,顺序解析PDU子头,把每个子头对应的CE或SDU的逻辑信道号(lcid)及其长度记录在子头信息队列中;在解析净荷时,据队列保存的信息从PDU净荷区提取该CE和SDU,把CE递交给媒体接入控制系统相应的功能实体,把服务数据单元(SDU)递交给网络协议栈上层。一个MAC PDU生成一个子头信息队列,队列中的一个节点与一个SDU或CE相对应(由于lcid可以用于区分SDU和CE),节点中的成员包括:lcid号和SDU或CE的长度。
该链表只是用于保存子头信息,来解析净荷,由于MAC PDU的子头长度是可变的,因此必须解析完所有的子头后,才知道净荷的起始位置
特别的,所述协议数据单元解析装置,在解析PDU子头时,若PDU的最后一个子头为SDU子头,则该子头没有指示SDU长度,则在子头信息队列中将其净荷长度记录为0,对应的,在解析净荷时,若发现净荷长度值为0,则使用PDU剩余长度作为该SDU净荷长度。
特别的,所述协议数据单元解析装置,在每处理完一个子头或净荷后,都要将当前PDU剩余总长度减去当前处理的子头或净荷长度,以获得更新后的PDU剩余长度,该做法有两方面作用:一是纠错:在解析子头完成后,协议数据单元解析装置检查该值是否为负,若是,说明PDU子头提供的长度信息与实际不符,则报告错误,并丢弃该PDU,二是在最后一个SDU子头没有长度域的情况下,能够计算该SDU的净荷长度;
为实现本发明目的,提供一种PDU构造的方法,具体包括下列步骤:
步骤A,在构造PDU时,将每一个CE和SDU的长度送入长度统计器,计算所构造PDU所有子头的长度,并将计算结果送入格式选择器;
步骤B,格式选择器根据是否包含SDU,和无线资源分配实体提供的PDU长度,以及长度统计器产生的结果综合判断,为当前数据选择对应的PDU格式;计算子头区的位置与净荷区的位置,并将选择结果和数据净荷送入协议数据单元构造器;
步骤C,协议数据单元构造器按照格式选择器所选定的PDU格式,构造完整的MAC PDU。
为了使本发明的目的、技术方案更加清楚明白,以下结合附图,对本发明的方法进行进一步详细阐述。
如图1所示,媒体接入控制系统中对PDU的构造流程如下:
步骤S1,当有CE或SDU要发送时,把CE和SDU的长度信息送入长度统计器,计算即将构造的PDU长度,之后将长度统计器的结果送入格式选择器;
步骤S2,格式选择器根据需要发送的数据中是否包含SDU,调度结果中指定的当前PDU长度,以及长度选择器的结果综合判断,为当前数据选择PDU构造格式,并将选择结果和数据送入协议数据单元构造器;
步骤S3,协议数据单元构造器按照格式选择器的结果,构造完整的MACPDU;构造方式分为:有SDU的构造类型和无SDU的构造类型,其中有SDU的构造类型中又包括无填充格式、插入填充格式和普通填充格式的构造,而无SDU的构造类型中又包括无填充格式、插入填充格式和普通填充格式的构造方。
如图2所示,长度统计器对数据处理的具体步骤如下:
步骤S1.1,判断是否有CE数据,若有则进入步骤S1.2,否则转入S1.3;
步骤S1.2,计算CE的个数,并由此得出CE子头字节数和CE净荷字节数,在PDU总长度中累加两数;进入步骤S1.3;
步骤S1.3,判断是否有SDU数据,若有则进入步骤S1.4,否则转入步骤S1.7;
步骤S1.4,根据当前SDU的字节数,计算该SDU在PDU中对应的子头字节数,在总长度中累加该SDU长度及其子头长度,进入步骤S1.5;
步骤S1.5,判断是否有SDU的子头长度未经计算,若有,则转入步骤S1.4,否则进入步骤S1.6;
步骤S1.6,在以上获得的PDU总长度中,将最后一个SDU子头的字节数改为以1计算,获得新的PDU总长度,进入步骤S1.7;
步骤S1.7,将计算所得的PDU总字节数送入格式选择器。
图3所示的是格式选择器对数据的处理流程,具体步骤如下:
步骤S2.1,计算调度结果中为该PDU分配的字节数与步骤S1中计算所得的PDU字节数之间的差值,该值即为应当填充的字节数,若该值小于0,则进入步骤S2.2,否则转入步骤S2.3;
步骤S2.2,报告错误,丢弃待构造PDU的CE及SDU数据,转入步骤S2.21;
步骤S2.3,判断待构造数据中是否含有SDU数据,若有,则进入步骤S2.4,否则进入步骤S2.14;
步骤S2.4,判断填充字节数是否为0,若是,则进入S2.5,否则转入S2.6;
步骤S2.5,选择有SDU的构造类型下的无填充格式,转入步骤S2.19;
步骤S2.6,判断填充字节数是否为1,若是则进入S2.7,否则转入步骤S2.8;
步骤S2.7,选择有SDU的构造类型下的插入填充格式,并限定此时插入的填充长度为1字节,转入步骤S2.19;
步骤S2.8,判断填充字节数是否为2,若是则进入步骤S2.9,否则转入步骤S2.10;
步骤S2.9,计算最后一个SDU在PDU中的对应的子头长度,进入步骤S2.11;
步骤S2.10,计算实际填充净荷和子头大小,选择有SDU类型的普通填充格式,并限定填充净荷大小为计算所得;
步骤S2.11,判断S2.9中计算结果是否为2,若是则进入步骤S2.12,否则转入步骤S2.13;
步骤S2.12,选择有SDU的构造类型下的普通填充格式,并限定此时无填充净荷,转入步骤S2.19;
步骤S2.13,选择有SDU的构造类型下的插入填充格式,并限定此时插入的填充长度为2字节,转入步骤S2.19;
步骤S2.14,判断填充字节数是否为0,若是,则进入步骤S2.15,否则转入S2.16;
步骤S2.15,选择无SDU的构造类型下的无填充格式,转入步骤S2.19;
步骤S2.16,判断填充字节数是否为1,若是则进入步骤S2.17,否则转入步骤S2.18;
步骤S2.17,选择无SDU的构造类型下的插入填充格式,转入步骤S2.19;
步骤S2.18,选择无SDU的构造类型下的普通填充格式,进入步骤S2.19;
步骤S2.19,获取子头区和净荷区的位置,进入步骤S2.20;
步骤S2.20,将格式选择结果送入协议数据单元构造器;
步骤S2.21,结束流程。
协议数据单元构造器中对有SDU格式的PDU的构造流程如下:
步骤A1,判断格式选择器所要求的填充格式,若为有SDU的类型则进入步骤A2,否则转入步骤A3;
步骤A2,构造有SDU类型的协议数据单元;
步骤A3,构造无SDU类型的协议数据单元。
如图4所示,所述A2包括下列步骤:
步骤S3.2.1,判断待构造的数据中是否含有CE,若是则进入步骤S3.2.2;否则转入步骤S3.2.4;
步骤S3.2.2,获取该CE数据,根据相关信息(包括CE的lcid号和该CE后是否还有MAC子头)构造CE子头,并写入对应的子头区,进入步骤S3.2.3;
步骤S3.2.3,将该CE数据写入对应的净荷区,转入步骤S3.2.1;
步骤S3.2.4,判断格式选择器所要求的填充格式,若为普通填充格式,则进入步骤S3.2.5,若为无填充格式,则转入步骤S3.2.11,若为插入填充格式,则转入步骤S3.2.15;
步骤S3.2.5,判断是否有未构造的SDU,若是则进入步骤S3.2.6,否则转入步骤S3.2.9;
步骤S3.2.6,顺序获取一个SDU数据,进入步骤S3.2.7;
步骤S3.2.7,根据该SDU的长度,选择适当的子头长度(当SDU长度大于127bits时,选择3字节的子头格式,否则,选择2字节的子头格式),构造该SDU子头,将其写入对应的子头区,进入步骤S3.2.8;
步骤S3.2.8,将该SDU数据写入对应的净荷区,转入步骤S3.2.5;
步骤S3.2.9,构造长度为1字节的填充子头,将其写入对应的子头区,进入步骤S3.2.10;
步骤S3.2.10,根据限定的填充净荷大小,在相应的净荷区填写填充净荷,进入步骤S3.2.18;
步骤S3.2.11,顺序获取一个SDU数据,进入步骤S3.2.12;
步骤S3.2.12,判断该SDU是否为待构造SDU中的最后一个,若是则转入步骤S3.2.16,否则进入步骤S3.2.13;
步骤S3.2.13,根据该SDU的长度,选择适当的子头长度,构造该SDU子头,将其写入对应的子头区,进入步骤S3.2.14;
步骤S3.2.14,将该SDU数据写入对应的净荷区,转入步骤S3.2.11;
步骤S3.2.15,根据限定的长度,在对应的子头区插入填充子头,转入步骤S3.2.11;
步骤S3.2.16,为该SDU构造长度为1字节的子头,写入对应的子头区,进入步骤S3.2.17;
步骤S3.2.17,把SDU数据写入净荷区,转入步骤S3.2.18;
步骤S3.2.18,结束流程。
如图5所示,协议数据单元构造器中对无SDU格式的PDU的构造流程如下:
步骤S3.3.1,判断格式选择器所要求的填充格式是否为插入填充,若是则进步步骤S3.3.2,否则转入步骤S3.3.9;
步骤S3.3.2,顺序获取一个CE数据,进入步骤S3.3.3;
步骤S3.3.3,判断该CE是否为待构造数据中的最后一个,若是则进入步骤S3.3.4,否则转入S3.3.7;
步骤S3.3.4,构造插入填充子头,将其写入相应的子头区域,进入步骤S3.3.5;
步骤S3.3.5,根据该CE相关信息(包括CE的lcid号,和该CE后是否还有MAC子头),为其构造CE子头,写入相应的子头区域,进入步骤S3.3.6;
步骤S3.3.6,将CE数据填入相应的净荷区域,转入步骤S3.3.16;
步骤S3.3.7,根据该CE相关信息,为其构造CE子头,写入相应子头区域,进入步骤S3.3.8;
步骤S3.3.8,将CE数据填入相应的净荷区域,转入步骤S3.3.2;
步骤S3.3.9,顺序获取一个CE数据,进入步骤S3.3.10;
步骤S3.3.10,根据该CE相关信息,为其构造CE子头,写入相应子头区域,进入步骤S3.3.11;
步骤S3.3.11,将CE数据填入相应的净荷区域,转入步骤S3.3.12;
步骤S3.3.12,判断该CE数据是否为待构造数据中的最后一个,若是则进步步骤S3.3.13,否则转入步骤S3.3.9;
步骤S3.3.13,判断是否有填充,若是进入步骤S3.3.14,否则转入步骤S3.3.16;当为该MAC PDU分配的长度大于了实际要发送数据的字节数时,需要加入填充,填充子头占一字节,lcid号为1111,填充净荷值为0,长度由MAC PDU剩余的字节数而定;
步骤S3.3.14,在子头区插入填充子头,转入步骤S3.3.15;
步骤S3.3.15,在净荷区插入填充净荷,转入步骤S3.3.16;
步骤S3.3.16,结束流程。
如图6所示,媒体接入控制系统中协议数据单元解析装置对PDU的解析流程如下:
步骤S4.1,判断是否有PDU子头待处理,若是则进入步骤S4.2,否则转入步骤S4.9;
步骤S4.2,获取PDU子头,进入步骤S4.3;
步骤S4.3,判断该子头是否为CE子头,若是则进入步骤S4.4,否则转入步骤S4.5;
步骤S4.4,判断该子头是否为填充子头,若是则转入步骤S4.8,否则进入步骤S4.5;
步骤S4.5,判断该子头中是否有长度域来指示该SDU净荷长度,若有则转入步骤S4.7,否则进入步骤S4.6;
步骤S4.6,将该SDU净荷长度设置为0字节,进入步骤S4.7;
步骤S4.7,在子头信息队列中,记录该子头所对应的CE或SDU的相关信息(包括lcid号和该CE或SDU的长度),包括其逻辑信道号和净荷长度,进入步骤S4.8;
步骤S4.8,用当前PDU剩余长度减去该子头长度,获得PDU剩余长度的更新,转入步骤S4.1;
步骤S4.9,判断剩余PDU长度是否小于0,若是则进入步骤S4.10,否则转入步骤S4.11;
步骤S4.10,报告错误,丢弃当前解析的PDU,转入步骤S4.16;
步骤S4.11,判断子头信息队列中是否还有子头信息单元未经查看,若有则进入步骤S4.12,否则转入步骤S4.16;
步骤S4.12,根据子头信息队列中该子头信息单元所示的净荷长度,从净荷区中提取该CE或SDU,进入步骤S4.13;
步骤S4.13,判断该数据是否为CE数据,若是则进入步骤S4.14,否则进入步骤S4.15;
步骤S4.14,将提取的CE数据递交给相关功能实体,转入步骤S4.11;CE是控制元素,传输数据外的控制信息,对下行传输,lcid=11100的CE传给随机接入模块,lcid=11101的传给同步模块,lcid=1110的传给DRX模块;对于上行传输,lcid=11011的CE传给功率控制模块,lcid=11100的CE传给随机接入模块,lcid=11101和11110的CE就传给上行调度模块;
步骤S4.15,将提取的SDU数据递交给网络协议栈上层,转入步骤S4.11;
步骤S4.16,结束流程。
本领域的技术人员在不脱离权利要求书确定的本发明的精神和范围的条件下,还可以对以上内容进行各种各样的修改。因此本发明的范围并不仅限于以上的说明,而是由权利要求书的范围来确定的。