Veins的源代码零零碎碎的看了比较久了,一直都没有系统的看;今天看了一天,通过追踪Tkenv输出结果,简单粗略的梳理一下Veins收发数据的流程(假设A节点发送一个数据给B节点),仅供大家参考,同时欢迎交流:
=======A‘s Part======
1. A节点应用层产生数据E,调用sendDelayedDown函数将E发送给MAC层;
2. 在收到E后,MAC层将E封装层MAC帧;通过CSMA/CA机制进行信道竞争,得到nextMacEvent并初始化自消息,准备在一定时延后发送给PHY层;在MAC层调用sendDelayed之前调用phy->setRadioState()函数,通知PHY层进行 接收/发送 模式转换;PHY层模式转换完成后,向MAC发送控制消息(SendControlToMac函数);MAC层在完成前面的过程后,调用SendDelayed函数将数据帧发送给PHY层;
3. PHY层的handleUpperMessage函数在收到MAC发来的帧后,将其封装层PHY层的帧(Airframe),然后调用sendToChannel将帧发往信道;
4. sendToChannel函数通过遍历所有和A节点PHY层连接的gate,将帧发往每一个gate对应的PHY层.
=======B’s Part======
1. B的PHY层handleMessage