myipv4_dst_ops.gc_thresh是一个无符号数,当路由的哈希表的表项达到这个值时,需要进行理清,从代码来看,它正好被设为 rt_hash_table的入口数,在我们的my_inet模块中为4096。
myip_rt_max_size是rt_hash_table的大小。myrt_cache_stat是一个struct rt_cache_stat的数组,每个CPU对应数组的一项,在单CPU系统中,只有一项。
完成了这些变量的初始化后,myip_rt_init调用了一个函数mydevinet_init,这是一个网络设备相关的初始化。
gifconf_list是一个gifconf_func_t函数的数组,共有NPROTO项,每个已注册的域都对应有一项,为该域的SIOCGIF处理
函数,MY_PF_INET域的处理函数是myinet_gifconf,关于这个函数的细了,我们在用到时再作分析。mydevinet_init的第
一件事情就是gifconf_list[MY_PF_INET]=myinet_gifconf。
myip_netdev_notifier是一个结构体struct
notifier_block的变量,其主要成员为一个通知回调函数,当网络设备上有事件发生时,这个函数就会被回调。MY_PF_INET的通知回调函
数是myinetdev_event,关于这个函数,同样,我们在用到时再进行分析。变量netdev_chain是一个所有通知回调函数的链表,
mydevinet_init的第二件事情就是把我们的myip_netdev_notifier结构加到这个链表中。
rtnetlink_links也是一个具有NPROTO项的数组,每一项都是一个结构体struct
rtnetlink_link的数组,结构体含有doit,dumpit两个成员函数。myinet_rtnetlink_table总共含有九项,都是
一些路由表的维护函数,mydevinet_init的第三件事情就是rtnetlink_links[MY_PF_INET] =
myinet_rtnetlink_table;
接下来的初始化是关于sysctl的,MY_PF_INET域有很多参数可供应用程序查询和修改,mydevinet_sysctl被注册到sysctl 的树型结构中,其结果是net节点下多了一个myipv4节点,结构跟ipv4节点基本一致。
最后,myipv4_devconf_dflt是一个myipv4的配置项结构,含有很多相关的配置信息,并且该结构保存的上缺省的配置信息("all"
的配置信息保存在myipv4_devconf中)。mydevinet_init调用
mydevinet_sysctl_register在/proc/sys/net/myipv4/conf下又注册了一个"default"节点。其数
据基本拷贝自myipv4_devconf。mydevinet_sysctl_register还可被设备调用,创建设备自己的节点。
阅读(1648) | 评论(0) | 转发(3) |