MAC服务定义
mac层对上层LLC提供的服务
MAC服务分类
MA-UNITDATA.request:LLC层发送数据。
MA-UNITDATA.indication:通知LLC层接收数据。
MA-UNITDATA-STATUS.indication:通知LLC层MAC层状态
(1)MA-UNITDATA.request服务
request用于发送数据,其定义如下所示。
MA-UNITDATA.request(
source address // 指定本次数据发送端的MAC地址
destination address // 指定接收端的MAC地址。可以是组播或广播地址
routing information // 路由信息。对于802.11来说,该值为null(表示该值没有作用)
data // MSDU,即上层需要发送的数据。对802.11来说,其大小不能超过2304字节
priority // priority和service class的解释见下文
service class
)
request原语中,除priority和service class参数外,其他都很容易理解。而priority和serviceclass参数与QoS有关系。
priority的取值为0~15的整数。对于非QoS相关的操作,其取值为Contention和ContentionFree。802.11中,QoS设置了不同的用户优先级(User Priority,UP)。显然,UP高的数据将优先得到发送。Priority参数和QoS中的其他参数一起决定发送数据的优先级。
service class的取值也针对是否为QoS而有所不同。对于非QoS,取值可为ReorderableGroupAddressed或StrictlyOdered。这两个都和数据发送时是否重排(reorder)发送次序有关。非QoS情况下,STA发送数据时并不会主动去调整发送次序。而QoS情况下,很明显那些UP较高的数据见得到优先处理。但对于组播数据,发送者可以设置service class为ReorderableGroupAddressed进行次序调整。
对request原语来说,当LLC需要发送数据时,就会调用request。MAC层需要检查参数是否正确。如果不正确,将通过其他原语通知LLC层,否则将启动数据发送流程。
(2)MA-UNITDATA.indication服务
下面来看MAC层收到数据后用于通知LLC层的原语indication,其定义如下。
MA-UNITDATA.indication(
source address // 代表数据源MAC地址。其值取值MAC帧中的SA(关于MAC帧格式详情见后文)
destination address // 代表目标MAC地址,取自MAC帧中的DA,可以是组播地址
routing information // 值为null
data // MAC帧数据
reception status // 表示接收状态,例如成功或失败。对802.11来说,该状态永远返回success
// MAC层会丢弃那些错误的数据包
priority // 和request的取值略有不同,此处略过
service class
)
802.11中,indication只有在MAC层收到格式完整、安全校验无误及没有其他错误的数据包时才会被调用以通知LLC层。
(3)MA-UNITDATA-STATUS.indication服务
STATUS.indication用于向LLC层返回对应request原语的处理情况。其原型如下。
MA-UNITDATA-STATUS.indication(
// source和destination address和对应request的前两个参数一样
source address
destination address
transmission status // 返回request的处理情况,详情见下文
provided priority // 只有status返回成功,该参数才有意义。其值和调用request发送数据时的值一致
provided service class // 只有status返回成功,该参数才有意义
)
indication最关键的一个参数是transmission status,可以是以下值。
Successful:代表对应request发送数据成功。
Undeliverable:数据无法发送。其原因有数据超长(excessive data length)、在request时指定了routing information(non-null source routing)、不支持的priority和service class、没有BSS(no BSS available)、没有key进行加密(cannot encrypt with anull key)等。