register struct rtentry *rt = la->;la_rt;/*该ARP结点相关的路有表*/
la = la->;la_le.le_next;/*while的循环可遍历整个ARP结点表*/
if (rt->;rt_expire && rt->;rt_expire <= time_second)/*如果是非永久性ARP并且时间超时,在启用了一个ARP结点时,*/
/*rt->;rt_expire会设置成当前的time_second(系统内的秒)+20分钟*/
/*然后time_second就滴答滴答的在走,当系统的time_second走了20*/
/*分钟时候,就使rt->;rt_expire和time_second相等了,等式成立.就...*/
arptfree(ola); /* 定时器期满,清楚该ARP记录,函数在后面 */
}
splx(s);/*开网络中断*/
}
/*
* 当你在设置你的某块网卡的IP时(如:ifconfig ...),
*/
static void
arp_rtrequest(req, rt, sa)
int req;/*是删除,添加还是克隆一个路由(克隆路由是因为到外网的IP都必须经过网关,也就是说,你的数据包发给网关就没事了),*/
/*所以外网的IP的路由都是克隆网关的就OK了.*/
register struct rtentry *rt;
struct sockaddr *sa;
{
register struct sockaddr *gate = rt->;rt_gateway;
register struct llinfo_arp *la = (struct llinfo_arp *)rt->;rt_llinfo;
static struct sockaddr_dl null_sdl = {sizeof(null_sdl), AF_LINK};
static int arpinit_done;
if (!arpinit_done) {/*判断是否建立了ARP节点队列*/
arpinit_done = 1;
LIST_INIT(&llinfo_arp);/*建立ARP节点队列*/
timeout(arptimer, (caddr_t)0, hz);/*启动计时器*/
register_netisr(NETISR_ARP, arpintr);
/*我们来看看register_netisr函数,即设置中断向量,NETISR_ARP是中断号,arpintr中断例程
int
register_netisr(num, handler)
int num;
netisr_t *handler;/* 中断例程指针
{
if (num < 0 || num >;= (sizeof(netisrs)/sizeof(*netisrs)) ) {/*中断号不能小于0或大于中断向量数组的最大下标*
printf("register_netisr: bad isr number: %d\n", num);
return (EINVAL);
}
netisrs[num] = handler;/*设置他,唯一调用他的是if_ethersubr.c中的ether_input函数(我是指ARP哦)*
return (0); /*看一下sys\i386\isa\ipl.s(82行):文件中的.globl _netisrs定义为32个长字的netisrs中断向量数组.*
}
*/
}
if (rt->;rt_flags & RTF_GATEWAY) /*如果是网关,返回*/
return;
switch (req) {
case RTM_ADD:/*添加一条路由*/
/*
*/
if ((rt->;rt_flags & RTF_HOST) == 0 && /*不是主机路由且掩码不是全1(即不是主机路由,主机路由隐含的掩码是全1)*/
SIN(rt_mask(rt))->;sin_addr.s_addr != 0xffffffff)
rt->;rt_flags |= RTF_CLONING;/*加克隆标志,即外网的IP,使用克隆吧*/
if (rt->;rt_flags & RTF_CLONING) {
| 论坛热门帖子: | [lch203] 写得蛮好的linux学习笔记(10-21) [黑马制造] 学习java的30个目标(10-19) [笑傲股林] 做测试半年了,有点迷茫,应该再学些什么提高自己的测试水平和测试能力呢?(10-19) [udp8589] 大家用google的来吱一声? 用百度的~~也来报道下?(10-18) [沂偌掳兆] 本人总结的一些认为C++比较经典的书籍,希望对大家有用(10-18) |
| TAG标签: | 及其 漏洞 分析 详解 协议 地址 解析 ARP IP if ea- 路由 |
注册
个人空间
