QualNet收发包过程分析(四)

本文详细介绍了QualNet中接收端的工作流程,从物理层的信号接收,到链路层的单播和广播帧处理,再到网络层的数据传递。在物理层,信号到达和结束触发接收操作;链路层根据目的地址决定帧的处理方式,单播帧和广播帧分别由特定函数处理,并最终通过MAC_HandOffSuccessfullyReceivedPacket()传递至网络层。
摘要由CSDN通过智能技术生成

2. 接收端

2.1 物理层

发送断物理层有两个信号,一个是开始发送,一个是结束发送,两个信号成对出现,表示一个数据帧发送完成。接收端类似,一个开始接收,一个结束接收,两个信号成对出现,表示一个数据帧接收完成。在物理层分别由两个函数处理信号,PHY_SignalArrivalFromChannel()和PHY_SignalEndFromChannel()。前一个函数判断物理层当前状态,空闲或侦听中,则锁定信号,更改状态为接收中,开始接收;若当前状态为接收中,则丢弃准备接收的信号。第二个函数结束接收,将接收完整的数据帧向上层传递。仍以802.11协议为例

void Phy802_11SignalEndFromChannel(
    Node* node,
    int phyIndex,
    int channelIndex,
    PropRxInfo *propRxInfo)
{
    PhyData *thisPhy = node->phyData[phyIndex];
    PhyData802_11* phy802_11 = (PhyData802_11*) thisPhy->phyVar;
    BOOL receiveErrorOccurred = FALSE;
    assert(phy802_11->mode != PHY_TRANSMITTING);    

    if ((phy802_11->mode == PHY_RECEIVING)
         && (phy802_11->rxMsg == propRxInfo->txMsg))
    {
        Message* newMsg = NULL; 
        Phy802_11UnlockSignal(phy802_11);
        //载波侦听,进入侦听状态
        if (Phy802_11CarrierSensing(node, phy802_11) == TRUE) 
        {
            Phy802_11ChangeState(node,phyIndex, PHY_SENSING);
        }
        //不载波侦听,进入空闲状态
        else 
        {
            Phy802_11ChangeState(node,phyIndex, PHY_IDLE);
        }

        if (!receiveErrorOccurred)
        {
            //复制消息
            newMsg = MESSAGE_Duplicate(node, propRxInfo->txMsg);
	    //去除物理层首部		
            MESSAGE_RemoveHeader(
                node, newMsg, sizeof(Phy802_11PlcpHeader), TRACE_802_11);

            PhySignalMeasurement* signalMeaInfo;
            MESSAGE_InfoAlloc(node,
                              newMsg,
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值