AODV协议代码详述

1.void AODVRouting::initialize(int stage)//初始化操作

2.void AODVRouting::handleMessage(cMessage *msg)//消息处理主函数

3.INetfilter::IHook::Result AODVRouting::ensureRouteForDatagram(INetworkDatagram *datagram)//这个函数应该是本节点模型开始路由发现的入口,先确定路由,“从这里开始让节点动起来”

4.AODVRouting::AODVRouting()//构造函数

5.bool AODVRouting::hasOngoingRouteDiscovery(const L3Address& target)//判断是不是正在执行对该目的地址的路由发现,也就是是否存在已发送且没返回的RREQ,是则True,否则Flase(bool :0为假,非0为真)

6.void AODVRouting::startRouteDiscovery(const L3Address& target, unsigned timeToLive)//开始路由发现,发RREQ

7.L3Address AODVRouting::getSelfIPAddress() const//获取自身IP地址

8.void AODVRouting::delayDatagram(INetworkDatagram *datagram)//准备开始路由发现之前,先缓存数据包操作(防止丢失)

9.void AODVRouting::sendRREQ(AODVRREQ *rreq, const L3Address& destAddr, unsigned int timeToLive)//发送RREQ,大部分操作为计算TTL,然后赋值给数据包RREQ和自消息WaitForRREP

10.void AODVRouting::sendRREP(AODVRREP *rrep, const L3Address& destAddr, unsigned int timeToLive)//发送RREP,准备RREPACK定时器

11.AODVRREQ *AODVRouting::createRREQ(const L3Address& destAddr)//创建一个新的RREQ包,大部分操作是在查本地有无目的节点序列号,然后设置一个新本节点的RREQ包ID号(对于源节点的RREP,对应到目的节点或中间节点就是RREQ)

12.AODVRREP *AODVRouting::createRREP(AODVRREQ *rreq, IRoute *destRoute, IRoute *originatorRoute, const L3Address& lastHopAddr)//制作RREP

13.AODVRREP *AODVRouting::createGratuitousRREP(AODVRREQ *rreq, IRoute *originatorRoute)//中间节点发现有到目的节点的路由后,继续发送一个RREP包到目的节点

14.void AODVRouting::handleRREP(AODVRREP *rrep, const L3Address& sourceAddr)//处理RREP

15.void AODVRouting::updateRoutingTable(IRoute *route, const L3Address& nextHop, unsigned int hopCount, bool hasValidDestNum, unsigned int destSeqNum, bool isActive, simtime_t lifeTime)//更新路由表记录信息,按照后面的参数更新route

16.void AODVRouting::sendAODVPacket(AODVControlPacket *packet, const L3Address& destAddr, unsigned int timeToLive, double delay)//实际的发包函数,使用了UDP,这是因为AODV的应用环境就是如此

17.void AODVRouting::handleRREQ(AODVRREQ *rreq, const L3Address& sourceAddr, unsigned int timeToLive)//处理RREQ

18.IRoute *AODVRouting::createRoute(const L3Address& destAddr, const L3Address& nextHop, unsigned int hopCount, bool hasValidDestNum, unsigned int destSeqNum,
void AODVRouting::receiveSignal(cComponent *source, simsignal_t signalID, cObject *obj DETAILS_ARG)//其它模块有变化,便调用这个函数,使节点做出调整

19.void AODVRouting::handleLinkBreakSendRERR(const L3Address& unreachableAddr)// 处理链路层反馈的通往某节点的链路断开,处理完本节点后,开始发送RERR

20.AODVRERR *AODVRouting::createRERR(const std::vector& unreachableNodes) //建立报错RERR

21.void AODVRouting::handleRERR(AODVRERR *rerr, const L3Address& sourceAddr)//处理RERR,把自己去往这些地址的下一跳是RERR发送节点的路由置成不活动,准备删除

22.bool AODVRouting::handleOperationStage(LifecycleOperation *operation, int stage, IDoneCallback *doneCallback)//改变本节点工作状态,由LifeCycle模块执行,ScenarioManager模块来配置调度

23.void AODVRouting::clearState()//关闭本节点前需要清理状态

24.void AODVRouting::handleWaitForRREP(WaitForRREP *rrepTimer)//等待RREP的超时时间已到,看看是否到了次数限制,没有的话则继续发RREQ

25.void AODVRouting::forwardRREP(AODVRREP *rrep, const L3Address& destAddr, unsigned int timeToLive)//向着源节点继续返回RREP

26.void AODVRouting::forwardRREQ(AODVRREQ *rreq, unsigned int timeToLive)//向前继续广播RREQ

27.void AODVRouting::completeRouteDiscovery(const L3Address& target)//完成路由发现,这里有模拟传输数据的一些命令,一定要记住!!!

28.void AODVRouting::sendGRREP(AODVRREP *grrep, const L3Address& destAddr, unsigned int timeToLive)//发送给目的节点GRREP,为了使目的节点建立到源节点的路由

29.AODVRREP *AODVRouting::createHelloMessage()//创建HelloMessage包

30.void AODVRouting::sendHelloMessagesIfNeeded()//一个HELLO_INTERVAL内发送一个1跳的RREP消息给邻居节点建立1跳的“路由”,只有当处于一个活动路由之中的时候,节点才会发送HELLO消息

31.void AODVRouting::handleHelloMessage(AODVRREP *helloMessage)//这里来处理beacon信息

32.void AODVRouting::expungeRoutes()//用来定期清理路由表内的过期路由记录

33.void AODVRouting::scheduleExpungeRoutes()//设定清理过期路由的自消息计时器

34.INetfilter::IHook::Result AODVRouting::datagramForwardHook(INetworkDatagram *datagram, const InterfaceEntry *inputInterfaceEntry, const InterfaceEntry *& outputInterfaceEntry, L3Address& nextHopAddress)//如果节点收到一个传送中数据包,则此函数被调用,首先查看本节点是否是目的节点,然后更新1跳和去源目的节点的路由生存时间,然后如果本地没有到该目的节点的活动路由,则要发送RERR

35.void AODVRouting::sendRERRWhenNoRouteToForward(const L3Address& unreachableAddr)//把这个不可到达的节点加入到不可到达节点集合,然后发送RERR

36.void AODVRouting::cancelRouteDiscovery(const L3Address& destAddr)//用来停止发送数据包,估计可以外部调用!!!

37.bool AODVRouting::updateValidRouteLifeTime(const L3Address& destAddr, simtime_t lifetime)//更新路由表中某目的节点路由的生存时间

38.AODVRREPACK *AODVRouting::createRREPACK()//建立RREPACK
void AODVRouting::sendRREPACK(AODVRREPACK *rrepACK, const L3Address& destAddr)//发送RREPACK

39.void AODVRouting::handleRREPACK(AODVRREPACK *rrepACK, const L3Address& neighborAddr)//处理RREPACK,把到发ack包的这个邻居节点路由设置为活动的,并且取消等待rrepack计时器

40.void AODVRouting::handleRREPACKTimer()//当RREPACK没有按时收到,则把当初发出RREP的下一跳节点加入黑名单,并启动黑名单消除计时器,在一定时间后回复它的正常

41.void AODVRouting::handleBlackListTimer()//搜索黑名单节点的解禁时间,如果到时的节点则解禁,然后找到最近要解禁的节点解禁时间,赋值启动黑名单解禁计时器

42.AODVRouting::~AODVRouting()//析构函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值