链路出错时,处理流程
0)、首先是调用xmitFailed()。
首先生成 tellid,fromid,toid;分别代表err数据包通知的源节点,me,和me的下一跳。
然后处理这个无法发送的数据包(调用undeliverablePkt)
同时也处理sendbuffer中包含该错误链路的数据包(也是调用undeliverablePkt)
最后生成RERR数据包,告知tellid。
1)、undeliverablePkt
如果这个数据包是我要发送的,则调用handlePktWithoutSR
否则,如果这个数据包不值得拯救,或者拯救次数达到最大,则丢弃。
否则,在cache中寻找路由(调用route_cache->findRoute( p.dest, salvage_route, 0)),如果找到,则
使用salvaged的路由发送,此时数据包的源节点发生变化,不是原来的源节点,而是me
否则,丢弃数据包,或者重新将该数据包插入sendbuffer。
2)、processBrokenRouteError用在收到Rerr错误数据包,或者snoop到Rerr数据包
processBrokenRouteError 首先处理出错的链路(告知源端节点)
而后调用 handlePktWithoutSR,处理无法发送的数据包
3)、handlePktWithoutSR 处理无法发送的数据包
首先在cache中查找到dest的路由,
如果有,则发送(调用 sendOutPacketWithRoute)
否则调用 getRouteForPacket,寻找路由。
4)、getRouteForPacket首先生成一个数据包。然后判断是否可以发送rreq请求包(backoff退避算法)
如果可以,则判断
是否目的地址==自己
是否为dsragent_ring_zero_search,如果是,则调用 sendOutRtReq(rrp,0)。注意后面参数为0,代表该数据包只有一跳,
因此只能到起邻居。
否则进行最大范围的路由请求广播。
是否....
是否....
5)、sendoutrtreq()设置广播请求包,调用 sendOutPacketWithRoute(p,false)
0)、首先是调用xmitFailed()。
首先生成 tellid,fromid,toid;分别代表err数据包通知的源节点,me,和me的下一跳。
然后处理这个无法发送的数据包(调用undeliverablePkt)
同时也处理sendbuffer中包含该错误链路的数据包(也是调用undeliverablePkt)
最后生成RERR数据包,告知tellid。
1)、undeliverablePkt
如果这个数据包是我要发送的,则调用handlePktWithoutSR
否则,如果这个数据包不值得拯救,或者拯救次数达到最大,则丢弃。
否则,在cache中寻找路由(调用route_cache->findRoute( p.dest, salvage_route, 0)),如果找到,则
使用salvaged的路由发送,此时数据包的源节点发生变化,不是原来的源节点,而是me
否则,丢弃数据包,或者重新将该数据包插入sendbuffer。
2)、processBrokenRouteError用在收到Rerr错误数据包,或者snoop到Rerr数据包
processBrokenRouteError 首先处理出错的链路(告知源端节点)
而后调用 handlePktWithoutSR,处理无法发送的数据包
3)、handlePktWithoutSR 处理无法发送的数据包
首先在cache中查找到dest的路由,
如果有,则发送(调用 sendOutPacketWithRoute)
否则调用 getRouteForPacket,寻找路由。
4)、getRouteForPacket首先生成一个数据包。然后判断是否可以发送rreq请求包(backoff退避算法)
如果可以,则判断
是否目的地址==自己
是否为dsragent_ring_zero_search,如果是,则调用 sendOutRtReq(rrp,0)。注意后面参数为0,代表该数据包只有一跳,
因此只能到起邻居。
否则进行最大范围的路由请求广播。
是否....
是否....
5)、sendoutrtreq()设置广播请求包,调用 sendOutPacketWithRoute(p,false)
本文详细介绍了在网络通信中遇到链路故障时的处理流程。主要包括:调用xmitFailed()生成RERR数据包通知源节点;undeliverablePkt处理无法投递的数据包;processBrokenRouteError处理收到的Rerr错误数据包;handlePktWithoutSR尝试重新发送数据包;getRouteForPacket获取数据包路由;sendOutRtReq发送路由请求。
1167

被折叠的 条评论
为什么被折叠?



