NS2中80211代码深入理解packet传输的流程

上传人:M****1 文档编号:455649541 上传时间:2022-10-04 格式:DOC 页数:12 大小:150KB
返回 下载 相关 举报
NS2中80211代码深入理解packet传输的流程_第1页
第1页 / 共12页
NS2中80211代码深入理解packet传输的流程_第2页
第2页 / 共12页
NS2中80211代码深入理解packet传输的流程_第3页
第3页 / 共12页
NS2中80211代码深入理解packet传输的流程_第4页
第4页 / 共12页
NS2中80211代码深入理解packet传输的流程_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《NS2中80211代码深入理解packet传输的流程》由会员分享,可在线阅读,更多相关《NS2中80211代码深入理解packet传输的流程(12页珍藏版)》请在金锄头文库上搜索。

1、NS2中802 11代码深入理解 packet传输的流程圭寸包 (Howtotran smita packet?内的DOWN则表示此 packet send(p, h. 所以接着,我们跳到 send(,此send(首先会去检查 energy model, node是在睡眠状态(sleep mode,则把此packet给丢弃.然后会把 handler h 设定给callback_. 下一步,就是去首先,我们要看的第一个function是在 mac-802_11.ccrecv( 这个packet的传输方向岀,若疋recv(,程式会先判断目前呼叫 是要送出去的,因此就会再呼叫若是目前这个呼 叫 se

2、n dDATA(p 和sen dRTS(ETHER_ADDR(dh-dh_ra.底下是sendDATA的程式码.(拿 原部份英文说明和程式码,会因为长度的关系而拿掉,所以读者最好 本 的 程 式 码昭八、voidMac802_11:se ndDATA(Packet*phdr cmn*chHDR_CMN(p;structhdr mac802 11*dhHDR_MAC802_11(p;/*更新packet的长度,把PLCPHeaderLength(内定值packet 的长度加上 为 48bits,PreambleLength ( Mac Header Length 和内定值为144 bits,ET

3、HER FCS LEN*/ch-size(+=phymib_.getHdrLe n11(;/* 填入 Mac Header中 framecon trol内的子栏位值*/dh-dh_fc.fc_protocol_versio nMAC_ProtocolVersio n;dh-dh_fc.fc_typeMAC_Type_Data;dh-dh_fc.fc_subtypeMAC_Subtype_Data;printf(.p%x.mac-subtype-%dn,p,dh-dh_fc.fc_subtype;dh-dh fc.fc to ds0;dh-dh fc.fc from ds0;dh-dh_fc.f

4、c_more_frag0;dh-dh_fc.fc_retry0;dh-dh_fc.fc_pwr_mgt0;dh-dh_fc.fc_more_data0;dh-dh_fc.fc_wep0;dh-dh_fc.fc_order0;/*记录传送所需要花的时间,计算的方式(PreambleLength PLCPDataRate + 剩于的圭寸包长度(单位为 bytes+PLCPHeaderLength * 8 /*8/ dataRate_ */*事实上,底下的这一行程式码是个浪费 封包,再,因为底下又会针对是否为 计算一broadcast 或 uni cast 的次*/ch-txtime(txtime(

5、ch-size(,dataRate_;/*个un icast*/if(u_i nt32_tETHER_ADDR(dh-dh_ra!=MAC_BROADCAST/*再一次计 算 传 送*/ch-txtime(txtime(ch-size(,dataRate_;/* duration的意思是送出去此 data packet时间,这个时间的长度为传送之后,此次的通讯还需要占用channel所需要的dh-dh_.duration=usec(txtime(phymib_.getACKle n(,basicRate_+phymib_.getSIFS(;else/*若这是一一个multicast的封包*/个

6、 ACK和一个 SIF 的时间 */ch-txtime(txtime(ch-size(,basicRate_;/*若是multicast packet, 送出去此data packet 之后,就算传送完成,不需要再等待 此duratio n为0ACK,因*/dh-dh_durati on0;/*当Mac Header中的资讯都填完后 buffer, 等 待 适 当,我们先把此packet暂时地存放在 的 时 机 再 传 送Mac Layer 中的 local出 去*/pktTx_p;中 Mac Header0;PT_MAC;phymib_.getRTSIe n(;-2;0;MAC_HDR_LE

7、N;的 栏 位*/MAC_ProtocolVersio n;MAC_Type_Co ntrol;底下是sendRTS的程式码.(部份英文说明和程式码,会因为长度的关系而拿掉,所以读者最好 还 是 拿 原 本 的 程 式 码 做 对 照 voidMac802_11:se ndRTS(i ntdstPacket*p=Packet:alloc(;hdr_c mn*ch=HDR_CMN(p;struct rts_frame *rf = (struct rts_frame*p-access(hdr_mac: ffset_;/*检查要传送的圭寸包大小是否是小于RTSThreshold或是不是一个 broa

8、dcast 的圭寸包,若是的话,就不需要传送 RTS.若是在使用者所写的tcl中没有指定 RTSThreshold,贝U ns2会去读取 ns-default.tcl 的值,内定为 0,因此若是使用 uni cast, 则一定会 送出去 RTS */ if( (un t32_t HDR_CMN(pktTx_-size( uid(ch-ptype(ch-size(ch-iface(ch-error(bzero(rf,/* 设 定 RTS packetrf-rf_fc.fc_protocol_vers ionrf-rf_fc.fc_typerf-rf_fc.fc_subtypeMAC_Subtyp

9、e_RTS;rf-rf_fc.fc_to_ds=0;rf-rf_fc.fc_from_ds=0;rf-rf_fc.fc_more_frag=0;rf-rf_fc.fc_retry=0;rf-rf_fc.fc_pwr_mgt=0;rf-rf_fc.fc_more_data=0;rf-rf_fc.fc_wep=0;rf-rf_fc.fc_order=0;/*把要传送的目的位址存放到RA*/ST0RE4BYTE(&dst.(rf-rf_ra;/* 存放传送 RTS所需要花的时间,RTS Frame是用basicRate_ 传送 */ch-txtime(=txtime(ch-size(,basicRa

10、te_;/*把传送端的位址放至 UTA*/STORE4BYTE(&in dex_,(rf-rf_ta;/* 计算 duration,计算的公式为:SIF + T(CTS +SIF+ T(Pkt + SIF + T(ACK */rf-rf_durati on=usec(phymib_.getSIFS(+txtime(phymib_.getCTSIe n(,basicRate_+phymib_.getSIFS(+txtime(pktTx_+phymib_.getSIFS(+txtime(phymib_.getACKIe n(,basicRate_;/*把建立好的RTS packet先暂时存放至 U

11、pktRTS_ */pktRTS_=p;看完 sendDATA(和sendRTS(之后,我们再回到 send(.接着,就指定一个 unique sequenee number给这个data packet.为了更清处的说明,底下把剩余的程式码贴在底下./* 若是节点已经再等待defer timer, 则让defer timer有defer timer,就要根据802.11的规定,需要再等待一个料的传送,而这个ran domtime继续,因此不做任何的设定DIFS 和一个 random time 0,cw_ 所决定.但是若没才能做资的 */*这是在sen d(内的程式码*/*若是目刖backoff

12、timer并没有在countdow n*/if(mhBackoff_.busy(=0/*此时cha nnel又是idle*/if(is_idle(if(mhDefer_.busy(rTime(Ra ndom:ra ndom(cw_*(phymib_.getSlotTime(;rTime;/*cha nnelbusy*/elsemhBackoff_.start(cw_,is_idle(;send(然后,当 Defer timer expires先去呼叫check_pktCTRL(,但因为目前pktCTRL没有资料(回传-1,所以会继续去执行 check_pktRTS(.若是目前的时候,程式就会去呼叫 deferHandler(,在deferHandler(中会channel是 idle 的状态,check_pktRTS( 内的程式码就会去设定传输状态为MAC_RTC并且计算送出 RTS timeout 的时间,算法为:timeouttxtime(phymib_.getRTSle n(,basicRatemhDefer_.start(phymib_.getDIFS(DSSS_MaxPropagatio nDelay/ 设定为 2 us,可以参考 mac-802_11.hphy

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 活动策划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号