(急)IP协议源代码(C++)中的转发函数谁能帮忙解释一下?

来源:百度知道 编辑:UC知道 时间:2024/06/18 14:42:30
头文件和转发函数(ip_forward)如下:C++我学了,但看不懂那函数,其中的变量代表什么,那些if语句的条件,还有些乱七八糟的函数是什么意思也看不懂,哪位高手能帮我解释一下代码? 越详细越好.. 小弟感激不尽.
#include "lwip/debug.h"
#include "lwip/def.h"
#include "lwip/mem.h"
#include "lwip/ip.h"
#include "lwip/inet.h"
#include "lwip/netif.h"
#include "lwip/icmp.h"
#include "lwip/udp.h"
#include "lwip/tcp.h"
#include "lwip/stats.h"
#include "arch/perf.h"
#if LWIP_DHCP
#include "lwip/dhcp.h"
#endif
/* ip_forward:
*
* Forwards an IP packet. It finds an appropriate route for the
* packet, decrements the TTL value of the packet, adjusts the
* checksum and outputs the packet on the appropriate interface.
*/
/*-----------------------------------------------------------------------------------*/
static void
ip_forward(struct pbuf *p, struct ip_hdr *iphd

PERF_START 转发开始,初始化。

ip_forward() 转发函数, 转发一个数据包。

ip_route() 找通向目的地的路线。
(struct ip_addr *)&(iphdr->dest 目的地转成ip_addr结构。如果 找到路线,送返 结构 netif,否则 送返 NULL。
if((ip_route ...NULL){} 如果送返 NULL,也就是没找到路线,则做 {...}

找到路线, 但是 if(netif == inp) ,表示同一个数据包,已到达,不必转发。

IPH_TTL_SET(iphdr, IPH_TTL(iphdr) - 1); 如果ttl == 0,为防止数据包不断在 IP 互联网络上永不终止地循环,减小 数据包 生存时间TTL 1,icmp..是否执行封包回显应答。

IPH_CHKSUM_SET 更新 IP checksum 检查,根据条件决定是否+1。

DEBUGF -- 查错时输出的信息

#ifdef IP_STATS ... #endif
如果定义了IP_STATS (IP 开始) 则...

PERF_STOP() 终止 转发

经过楼上loonie的解释,这下你明白了嘛?

不明白也没有关系,先找本《计算机网络》把IP协议的相关知识了解下

另外,可以到网上下载这个协议的具体规范文档,把协议了解清楚了再看代码就不难了