📄 [转载] linux的tcp-ip协议栈阅读笔记(4) - china linux forum.htm
字号:
ip_rt_gc_interval;<BR>add_timer(&rt_periodic_timer);<BR><BR>proc_net_register(&(struct
proc_dir_entry) {<BR>PROC_NET_RTCACHE, 8, "rt_cache",<BR>S_IFREG |
S_IRUGO, 1, 0, 0,<BR>0,
&proc_net_inode_operations,<BR>rt_cache_get_info<BR>});<BR>ent =
create_proc_entry("net/rt_acct", 0, 0);<BR>ent->read_proc =
ip_rt_acct_read;<BR>}<BR>这个函数总的看来就是注册几个notifier(后面还要看的)和初始化路由表的<BR>timer,最后就在/proc目录下面创建一个目录项。其中proc_net_register<BR>函数就不说了,而create_proc_entry函数就是在/proc/net目录下面创建一<BR>个rt_acct,就是路由参数统计(account)目录,读函数就是ip_rt_acct_read,<BR>这个函数就是从全局变量ip_rt_acct中间拷贝数据到用户缓冲中而已。<BR><BR><BR>devinet_init函数是net/ipv4/devinet.c里面的函数,整理后如下:<BR>register_gifconf(PF_INET,
inet_gifconf);<BR>register_netdevice_notifier(&ip_netdev_notifier);<BR><BR>register_netdevice_notifier函数在说PACKET协议的时候提过,这里不说了,<BR>register_gifconf函数是用来注册对应SIOCGIFCONF这个系统调用的协议无关<BR>的一个回调函数,这个函数对于PF_INET来说就是inet_gifconf函数。<BR>其中inet_gifconf函数是net/ipv4/devinet.c里面的,我大概的看了一点,主<BR>要好象是在所有的interface里面做一个循环,得到相应的name和address然后<BR>返回的。不过不是非常确定。大家参谋呀:)<BR><BR>而register_gifconf函数本身是在net/core/dev.c里面的,如下:<BR>static
gifconf_func_t * gifconf_list [NPROTO];<BR><BR>int
register_gifconf(unsigned int family, gifconf_func_t *
gifconf)<BR>{<BR>if (family>=NPROTO)<BR>return
-EINVAL;<BR>gifconf_list[family] = gifconf;<BR>return
0;<BR>}<BR><BR>这个函数的意义一目了然,就不说了。<BR>gifconf_list里的函数会在dev_ifconf函数中间被调用,而dev_ifconf函数被<BR>dev_ioctl函数调用,dev_ioctl函数负责所有的针对interface的I/O控制。所以<BR>我们调用的interface的ioctl函数有一部分就会分到每个协议的gifconf函数里<BR>面来,我猜gifconf大概是generous
interface
configure的意思。就是通用接<BR>口配置的意思。<BR><BR>下面再看ip_fib_init函数,它在net/ipv4/fib_frontend.c中间,如下:<BR>(假定没有define
CONFIG_IP_MULTIPLE_TABLES,这个参数好象是要创建<BR>两个路由表,一个是local的,一个叫main,我想大概一般系统上面只有<BR>一个路由表的,所以认为没有定义,不知道哪位清楚这个参数的意义?为<BR>什么要两个路由表?)<BR>__initfunc(void
ip_fib_init(void))<BR>{<BR>proc_net_register(&(struct
proc_dir_entry) {<BR>PROC_NET_ROUTE, 5, "route",<BR>S_IFREG |
S_IRUGO, 1, 0, 0,<BR>0,
&proc_net_inode_operations,<BR>fib_get_procinfo<BR>});<BR><BR>fib_rules_init();<BR>register_netdevice_notifier(&fib_netdev_notifier);<BR>register_inetaddr_notifier(&fib_inetaddr_notifier);<BR>}<BR><BR>其中proc_net_register和register_netdevice_notifier函数上面已经提过<BR>了,register_inetaddr_notifier函数的作用和register_netdevice_notifier<BR>差不多,这个函数也是调用的notifier_chain_register函数注册一个回调函<BR>数,这个回调函数在interface加上和删除的时候被调用,fib_rules_init函数<BR>其实也差不多,这个函数在net/ipv4/fib_rules.c里面,它其实就是调用一个<BR>register_netdevice_notifier函数注册fib_rules_notifier回调结构体。<BR>fib代表IPv4
Forwarding Information
Base,就是IPv4转发信息的意思,我有<BR>点糊涂为什么要叫这个名字而不用route什么的更明白的//sigh<BR><BR>--<BR>Wish
your sky be sunny,<BR>Wish your heart be happy,<BR>Wish your body be
healthy,<BR>Wish U never be lazy.<BR>:) :> ;) ;> :-) :->
;-) ;-> <BR><BR>※ 来源:.武汉白云黄鹤站 bbs.whnet.edu.cn.[FROM:
202.112.35.1]<BR>--<BR>※ 转载:.武汉白云黄鹤站 bbs.whnet.edu.cn.[FROM:
202.106.43.158]<BR><BR><BR>--------------------------------------------------------------------------------<BR><BR>分类讨论区
全部讨论区 上一篇 本讨论区 回文章 下一篇 <BR><BR><BR>Linux can touch everything!---How
can we do?
<P class=small>文章选项: <A
href="http://www.linuxforum.net/forum/printthread.php?Cat=&Board=linuxK&main=67725&type=post"
target=_blank><IMG align=absMiddle alt=打印 border=0
src="[转载] Linux的TCP-IP协议栈阅读笔记(4) - China Linux Forum.files/print.gif"></A>
</P></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE align=center border=0 cellPadding=4 cellSpacing=0 width="95%">
<TBODY>
<TR>
<TD align=left class=small> </TD>
<TD align=right class=small><A
href="http://www.linuxforum.net/forum/printthread.php?Cat=&Board=linuxK&main=67725&type=thread"
target=_blank><IMG align=top border=0
src="[转载] Linux的TCP-IP协议栈阅读笔记(4) - China Linux Forum.files/printthread.gif">
打印</A> </TD></TR></TBODY></TABLE><BR>
<TABLE align=center border=0 cellPadding=0 cellSpacing=0 width="95%">
<TBODY>
<TR>
<TD class=tableborders>
<TABLE border=0 cellPadding=3 cellSpacing=1 width="100%">
<TBODY>
<TR class=darktable>
<TD align=right>
<TABLE border=0>
<TBODY>
<TR>
<TD class=navigation noWrap><IMG align=absMiddle alt=*
src="[转载] Linux的TCP-IP协议栈阅读笔记(4) - China Linux Forum.files/greyflat.gif">平坦模式
</TD>
<TD class=navigation noWrap><A
href="http://www.linuxforum.net/forum/showthreaded.php?Cat=&Board=linuxK&Number=67725&page=192&view=collapsed&sb=5&o=all&vc=1"><IMG
align=absMiddle alt=树状模式,一封一封读 border=0
src="[转载] Linux的TCP-IP协议栈阅读笔记(4) - China Linux Forum.files/threaded.gif">树状模式</A>
</TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE align=center border=0 cellPadding=0 cellSpacing=0 width="95%">
<TBODY>
<TR>
<TD align=right>
<FORM action=http://www.linuxforum.net/forum/jumper.php method=post><INPUT
name=Cat type=hidden> <SPAN class=onbody>前往讨论区 </SPAN><SELECT
class=formboxes name=board> <OPTION value=-CATJUMP-1>*Linux 社区和文化*
-----<OPTION value=new> 社区公告栏<OPTION
value=uglyduck> 社区服务台<OPTION
value=linuxnews> 业界新闻与评论<OPTION
value=linuxtalk> 自由软件杂谈<OPTION
value=software> Linux软件快递<OPTION
value=Tworkshop> 中文MAN-PAGE计划(CMPP)<OPTION
value=tcl> Linux图书与评论<OPTION
value=job> 招聘和求职<OPTION value=-CATJUMP-2>*Linux
桌面与办公自动化* -----<OPTION value=chinese> Linux
中文环境和中文化<OPTION value=office> Linux桌面与办公软件<OPTION
value=game> Linux 多媒体与娱乐版<OPTION
value=mozilla> 自由之窗Mozilla<OPTION
value=laptop> 笔记本电脑上的Linux<OPTION
value=-CATJUMP-3>*Linux 入门及网络应用* -----<OPTION
value=debian> Debian 一族<OPTION
value=nm> 网络管理技术<OPTION
value=newbie> Linux 安装与入门<OPTION
value=web> WEB服务器和FTP服务器<OPTION
value=dns> 域名服务器和邮件服务器<OPTION
value=proxy> Linux防火墙和代理服务器应用<OPTION
value=samba> 文件及打印服务器<OPTION
value=training> 技术培训与认证<OPTION value=-CATJUMP-4>*Linux
高级应用* -----<OPTION selected
value=linuxK> Linux内核技术<OPTION
value=embedded> 嵌入开发推进计划 (OpenARM)<OPTION
value=driver> Linux设备驱动程序<OPTION
value=cluster> Linux 集群技术<OPTION
value=db> LINUX平台数据库<OPTION
value=cpu> CPU 与 编译器<OPTION
value=security> 系统和网络安全<OPTION value=-CATJUMP-5>*Linux
环境下的程序设计* -----<OPTION
value=kylix> LINUX下的快速开发工具(RAD)<OPTION
value=program> C/C++编程版<OPTION
value=php3> PHP 技 术<OPTION
value=java> Java&jsp技术<OPTION
value=vrml> Shell编程技术<OPTION
value=perl> Perl 编 程<OPTION
value=python> Python 编 程<OPTION
value=xml> XML/Web Service 技术<OPTION
value=-CATJUMP-6>*永远的 UNIX* -----<OPTION
value=unix> 永远的Unix<OPTION
value=bsd> FreeBSD世界<OPTION value=-CATJUMP-7>*IT 人生*
-----<OPTION value=life> IT 人生</OPTION></SELECT> <INPUT class=buttons name=Jump type=submit value=出发>
</FORM></TD></TR></TBODY></TABLE>
<P>
<TABLE align=center border=0 cellPadding=0 cellSpacing=0 width="95%">
<TBODY>
<TR>
<TD class=tableborders>
<TABLE border=0 cellPadding=3 cellSpacing=1 width="100%">
<TBODY>
<TR class=darktable>
<TD>
<TABLE border=0 cellPadding=0 cellSpacing=0 width="100%">
<TBODY>
<TR>
<TD align=left><A href="mailto:davidd@linuxforum.net">Contact
Us</A> </TD>
<TD align=right><A
href="http://www.linuxforum.net/">LINUXFORUM.NET</A>
</TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></P></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -