static int arp_inuse, arp_allocated;/*这都是统计用的*/
static int arp_maxtries = 5; /*在解释地址时重复发送ARP请求的包的次数*/
static int useloopback = 1; /* 在本地使用环回接口 */
static int arp_proxyall = 0; /*ARP代理是否使用*/
/*对以上3个变量的控制*/
SYSCTL_INT(_net_link_ether_inet, OID_AUTO, maxtries, CTLFLAG_RW,
&arp_maxtries, 0, "");
SYSCTL_INT(_net_link_ether_inet, OID_AUTO, useloopback, CTLFLAG_RW,
&useloopback, 0, "");
SYSCTL_INT(_net_link_ether_inet, OID_AUTO, proxyall, CTLFLAG_RW,
&arp_proxyall, 0, "");
static void arp_rtrequest __P((int, struct rtentry *, struct sockaddr *));/*添加或删除一ARP节点,和路由有关*/
static void arprequest __P((struct arpcom *, /*发送一ARP请求,目的硬件地址是广播地址*/
struct in_addr *, struct in_addr *, u_char *));
static void arpintr __P((void)); /*ARP软中断,由ether_input函数(if_ethersubr.c)调用*/
static void arptfree __P((struct llinfo_arp *)); /*释放一ARP节点*/
static void arptimer __P((void *)); /*定时查询ARP节点是否超时*/
static struct llinfo_arp
*arplookup __P((u_long, int, int)); /*在路由表中查询IP的路由,并返回该IP路由的相关的ARP节点信息*/
#ifdef INET
static void in_arpinput __P((struct mbuf *)); /*由ARP软中断调用,对进入的ARP包进行分析*/
#endif
/*
* 定时程序. 该函数用来查看是否有ARP超时(20分钟).有就清除他
*/
static void
arptimer(ignored_arg)
void *ignored_arg;
{
int s = splnet();/*链路层中所有对链表要操作的都要屏蔽网络中断*/
register struct llinfo_arp *la = llinfo_arp.lh_first;/*第一个ARP结点表,是一个单向链表,通过la->;la_le.le_next链接到下一个*/
struct llinfo_arp *ola;/*临时存放ARP界点用的*/
timeout(arptimer, (caddr_t)0, arpt_prune * hz);/*每格5分钟查看一次(调用自己)*/
while ((ola = la) != 0) {/*没有到链表尾巴就继续循环*/
| 论坛热门帖子: | [lch203] 写得蛮好的linux学习笔记(10-21) [黑马制造] 学习java的30个目标(10-19) [笑傲股林] 做测试半年了,有点迷茫,应该再学些什么提高自己的测试水平和测试能力呢?(10-19) [udp8589] 大家用google的来吱一声? 用百度的~~也来报道下?(10-18) [沂偌掳兆] 本人总结的一些认为C++比较经典的书籍,希望对大家有用(10-18) |
| TAG标签: | 及其 漏洞 分析 详解 协议 地址 解析 ARP IP if ea- 路由 |
注册
个人空间
