📄 [转载] linux的tcp-ip协议栈阅读笔记(3) - china linux forum.htm
字号:
= (unsigned long)tbl;<BR>tbl->gc_timer.function =
neigh_periodic_timer;<BR>tbl->gc_timer.expires = now +
tbl->gc_interval +
<BR>tbl->parms.reachable_time;<BR>add_timer(&tbl->gc_timer);<BR><BR>init_timer(&tbl->proxy_timer);<BR>tbl->proxy_timer.data
= (unsigned long)tbl;<BR>tbl->proxy_timer.function =
neigh_proxy_process;<BR>skb_queue_head_init(&tbl->proxy_queue);<BR><BR>tbl->last_flush
= now;<BR>tbl->last_rand = now +
tbl->parms.reachable_time*20;<BR>tbl->next =
neigh_tables;<BR>neigh_tables =
tbl;<BR>}<BR>jiffies是当前系统的时间,在i386系统上面好象一个jiffies代表50ms,<BR>显然这个函数就是生成两个timer将一个放在系统的timerlist里面。<BR>那个gc_timer的意思是garbage
collect
timer,因为每过一段时间arp<BR>的cache就应该更新,所以要有一个expires时间,这段时间过了以后就<BR>要更新arp地址了,那个proxy_timer还没有看是什么,不过我假定我的<BR>机器不使用proxy也不做成proxy,所以proxy相关的都没有管:P<BR>那个timer的function显然是时钟到期的回调函数,data是这个回调函数<BR>要使用的私有数据了。<BR><BR>下面是dev_add_pack函数,它在net/core/dev.c里面:<BR>void
dev_add_pack(struct packet_type *pt)<BR>{<BR>int hash;<BR>#ifdef
CONFIG_NET_FASTROUTE<BR>/* Hack to detect packet socket */<BR>if
(pt->data)
{<BR>netdev_fastroute_obstacles++;<BR>dev_clear_fastroute(pt->dev);<BR>}<BR>#endif<BR>if(pt->type==htons(ETH_P_ALL))<BR>{<BR>netdev_nit++;<BR>pt->next=ptype_all;<BR>ptype_all=pt;<BR>}<BR>else<BR>{
<BR>hash=ntohs(pt->type)&15;<BR>pt->next =
ptype_base[hash];<BR>ptype_base[hash] =
pt;<BR>}<BR>}<BR>显然系统保留了两个表,一个是ptype_all,用来接收所有类型的包的<BR>链表,一个是一个hash数组+链表的结构,用来接收特定类型的包。那<BR>个fastroute不知道是什么东西。<BR><BR>struct
packet_type的定义在include/linux/netdevice.h里面,我保留<BR>原来的注释,这样就不用我多说了:)<BR>{<BR>unsigned
short type; <BR>/* This is really htons(ether_type). */<BR>struct
device *dev; <BR>/* NULL is wildcarded here */<BR>int (*func)
(struct sk_buff *, <BR>struct device *, struct packet_type
*);<BR>void *data; <BR>/* Private to the packet type */<BR>struct
packet_type
*next;<BR>};<BR>其中的func当然是回调函数了,举个例子来说,arp_packet_type是这样的:<BR>static
struct packet_type arp_packet_type
=<BR>{<BR>__constant_htons(ETH_P_ARP),<BR>NULL, /* All devices
*/<BR>arp_rcv,<BR>NULL,<BR>NULL<BR>};<BR><BR>arp_init函数还有最后一个proc_net_register函数,这个函数在include/<BR>linux/proc_fs.h里面:<BR>static
inline int proc_net_register(struct proc_dir_entry *
x)<BR>{<BR>return proc_register(proc_net,
x);<BR>}<BR><BR>而proc_register在fs/proc/root.c里面,这个函数就不帖了主要就是在<BR>proc_net对应的目录下面生成每个协议的子目录。这个函数的作用就是对<BR>每一个协议,例如TCP等在/proc目录下面生成相应的目录,用户可以通过<BR>访问/proc/net目录下面的相应目录得到每个协议的统计参数。<BR><BR>--<BR>※
来源: 武汉白云黄鹤站 bbs.whnet.edu.cn. [FROM: 166.111.66.188] <BR>※
修改:.AngelFalls 于 Sep 28 11:42:43 修改本文.[FROM:
166.111.66.188]<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=67724&type=post"
target=_blank><IMG align=absMiddle alt=打印 border=0
src="[转载] Linux的TCP-IP协议栈阅读笔记(3) - 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=67724&type=thread"
target=_blank><IMG align=top border=0
src="[转载] Linux的TCP-IP协议栈阅读笔记(3) - 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协议栈阅读笔记(3) - China Linux Forum.files/greyflat.gif">平坦模式
</TD>
<TD class=navigation noWrap><A
href="http://www.linuxforum.net/forum/showthreaded.php?Cat=&Board=linuxK&Number=67724&page=192&view=collapsed&sb=5&o=all&vc=1"><IMG
align=absMiddle alt=树状模式,一封一封读 border=0
src="[转载] Linux的TCP-IP协议栈阅读笔记(3) - 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 + -