⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 [转载] linux的tcp-ip协议栈阅读笔记(4) - china linux forum.htm

📁 linux下的tcp/ip协议实现的确部分阅读笔记
💻 HTM
📖 第 1 页 / 共 2 页
字号:
            ip_rt_gc_interval;<BR>add_timer(&amp;rt_periodic_timer);<BR><BR>proc_net_register(&amp;(struct 
            proc_dir_entry) {<BR>PROC_NET_RTCACHE, 8, "rt_cache",<BR>S_IFREG | 
            S_IRUGO, 1, 0, 0,<BR>0, 
            &amp;proc_net_inode_operations,<BR>rt_cache_get_info<BR>});<BR>ent = 
            create_proc_entry("net/rt_acct", 0, 0);<BR>ent-&gt;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(&amp;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&gt;=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(&amp;(struct 
            proc_dir_entry) {<BR>PROC_NET_ROUTE, 5, "route",<BR>S_IFREG | 
            S_IRUGO, 1, 0, 0,<BR>0, 
            &amp;proc_net_inode_operations,<BR>fib_get_procinfo<BR>});<BR><BR>fib_rules_init();<BR>register_netdevice_notifier(&amp;fib_netdev_notifier);<BR>register_inetaddr_notifier(&amp;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>:) :&gt; ;) ;&gt; :-) :-&gt; 
            ;-) ;-&gt; <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=&amp;Board=linuxK&amp;main=67725&amp;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>&nbsp; </TD>
    <TD align=right class=small><A 
      href="http://www.linuxforum.net/forum/printthread.php?Cat=&amp;Board=linuxK&amp;main=67725&amp;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">平坦模式&nbsp; 
                </TD>
                <TD class=navigation noWrap><A 
                  href="http://www.linuxforum.net/forum/showthreaded.php?Cat=&amp;Board=linuxK&amp;Number=67725&amp;page=192&amp;view=collapsed&amp;sb=5&amp;o=all&amp;vc=1"><IMG 
                  align=absMiddle alt=树状模式,一封一封读 border=0 
                  src="[转载] Linux的TCP-IP协议栈阅读笔记(4) - China Linux Forum.files/threaded.gif">树状模式</A>&nbsp; 
                </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>&nbsp;&nbsp;&nbsp;社区公告栏<OPTION 
        value=uglyduck>&nbsp;&nbsp;&nbsp;社区服务台<OPTION 
        value=linuxnews>&nbsp;&nbsp;&nbsp;业界新闻与评论<OPTION 
        value=linuxtalk>&nbsp;&nbsp;&nbsp;自由软件杂谈<OPTION 
        value=software>&nbsp;&nbsp;&nbsp;Linux软件快递<OPTION 
        value=Tworkshop>&nbsp;&nbsp;&nbsp;中文MAN-PAGE计划(CMPP)<OPTION 
        value=tcl>&nbsp;&nbsp;&nbsp;Linux图书与评论<OPTION 
        value=job>&nbsp;&nbsp;&nbsp;招聘和求职<OPTION value=-CATJUMP-2>*Linux 
        桌面与办公自动化* -----<OPTION value=chinese>&nbsp;&nbsp;&nbsp;Linux 
        中文环境和中文化<OPTION value=office>&nbsp;&nbsp;&nbsp;Linux桌面与办公软件<OPTION 
        value=game>&nbsp;&nbsp;&nbsp;Linux 多媒体与娱乐版<OPTION 
        value=mozilla>&nbsp;&nbsp;&nbsp;自由之窗Mozilla<OPTION 
        value=laptop>&nbsp;&nbsp;&nbsp;笔记本电脑上的Linux<OPTION 
        value=-CATJUMP-3>*Linux 入门及网络应用* -----<OPTION 
        value=debian>&nbsp;&nbsp;&nbsp;Debian 一族<OPTION 
        value=nm>&nbsp;&nbsp;&nbsp;网络管理技术<OPTION 
        value=newbie>&nbsp;&nbsp;&nbsp;Linux 安装与入门<OPTION 
        value=web>&nbsp;&nbsp;&nbsp;WEB服务器和FTP服务器<OPTION 
        value=dns>&nbsp;&nbsp;&nbsp;域名服务器和邮件服务器<OPTION 
        value=proxy>&nbsp;&nbsp;&nbsp;Linux防火墙和代理服务器应用<OPTION 
        value=samba>&nbsp;&nbsp;&nbsp;文件及打印服务器<OPTION 
        value=training>&nbsp;&nbsp;&nbsp; 技术培训与认证<OPTION value=-CATJUMP-4>*Linux 
        高级应用* -----<OPTION selected 
        value=linuxK>&nbsp;&nbsp;&nbsp;Linux内核技术<OPTION 
        value=embedded>&nbsp;&nbsp;&nbsp;嵌入开发推进计划 (OpenARM)<OPTION 
        value=driver>&nbsp;&nbsp;&nbsp;Linux设备驱动程序<OPTION 
        value=cluster>&nbsp;&nbsp;&nbsp;Linux 集群技术<OPTION 
        value=db>&nbsp;&nbsp;&nbsp;LINUX平台数据库<OPTION 
        value=cpu>&nbsp;&nbsp;&nbsp;CPU 与 编译器<OPTION 
        value=security>&nbsp;&nbsp;&nbsp;系统和网络安全<OPTION value=-CATJUMP-5>*Linux 
        环境下的程序设计* -----<OPTION 
        value=kylix>&nbsp;&nbsp;&nbsp;LINUX下的快速开发工具(RAD)<OPTION 
        value=program>&nbsp;&nbsp;&nbsp;C/C++编程版<OPTION 
        value=php3>&nbsp;&nbsp;&nbsp;PHP 技 术<OPTION 
        value=java>&nbsp;&nbsp;&nbsp;Java&amp;jsp技术<OPTION 
        value=vrml>&nbsp;&nbsp;&nbsp;Shell编程技术<OPTION 
        value=perl>&nbsp;&nbsp;&nbsp;Perl 编 程<OPTION 
        value=python>&nbsp;&nbsp;&nbsp;Python 编 程<OPTION 
        value=xml>&nbsp;&nbsp;&nbsp;XML/Web Service 技术<OPTION 
        value=-CATJUMP-6>*永远的 UNIX* -----<OPTION 
        value=unix>&nbsp;&nbsp;&nbsp;永远的Unix<OPTION 
        value=bsd>&nbsp;&nbsp;&nbsp;FreeBSD世界<OPTION value=-CATJUMP-7>*IT 人生* 
        -----<OPTION value=life>&nbsp;&nbsp;&nbsp;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 + -