📄 [转载] linux的tcp-ip协议栈阅读笔记(6) - china linux forum.htm
字号:
&qdisc_head)<BR>qdisc_run_queues();<BR><BR><BR>while
(!skb_queue_empty(&backlog)) <BR>{<BR>struct sk_buff *
skb;<BR><BR>if (jiffies - start_time > 1)<BR>goto
net_bh_break;<BR><BR>skb = skb_dequeue(&backlog);<BR><BR>#ifdef
CONFIG_NET_FASTROUTE<BR>if (skb->pkt_type == PACKET_FASTROUTE)
{<BR>dev_queue_xmit(skb);<BR>continue;<BR>}<BR>#endif<BR><BR>/* XXX
until we figure out every place to modify.. */<BR>skb->h.raw =
skb->nh.raw = skb->data;<BR><BR>if(skb->mac.raw <
skb->head || skb->mac.raw >
skb->data){<BR>printk(KERN_CRIT "%s: wrong mac.raw ptr,
proto=x\n", <BR>skb->dev->name,
skb->protocol);<BR>kfree_skb(skb);<BR>continue;<BR>}<BR><BR>type
= skb->protocol;<BR><BR><BR>pt_prev = NULL;<BR>for (ptype =
ptype_all; ptype!=NULL; ptype=ptype->next)<BR>{<BR>if
(!ptype->dev || ptype->dev == skb->dev)
{<BR>if(pt_prev)<BR>{<BR>struct sk_buff *skb2=skb_clone(skb,
GFP_ATOMIC);<BR>if(skb2)<BR>pt_prev->func(skb2,skb->dev,
pt_prev);<BR>}<BR>pt_prev=ptype;<BR>}<BR>}<BR><BR>for (ptype =
ptype_base[ntohs(type)&15]; ptype != NULL;<BR>ptype =
ptype->next) <BR>{<BR>if (ptype->type == type &&
(!ptype->dev
||<BR>ptype->dev==skb->dev))<BR>{<BR>if(pt_prev)<BR>{<BR>struct
sk_buff *skb2;<BR>skb2=skb_clone(skb,
GFP_ATOMIC);<BR>if(skb2)<BR>pt_prev->func(skb2, skb->dev,
pt_prev);<BR>}<BR>pt_prev=ptype;<BR>}<BR>} /* End of protocol list
loop */<BR><BR>if(pt_prev)<BR>pt_prev->func(skb, skb->dev,
pt_prev);<BR>else {<BR>kfree_skb(skb);<BR>}<BR>} /* End of queue
loop */<BR><BR>if (qdisc_head.forw !=
&qdisc_head)<BR>qdisc_run_queues();<BR><BR>netdev_dropping =
0;<BR>NET_PROFILE_LEAVE(net_bh);<BR>return;<BR><BR>net_bh_break:<BR>mark_bh(NET_BH);<BR>NET_PROFILE_LEAVE(net_bh);<BR>return;<BR>}<BR><BR>这个函数其实很简单,NET_PROFILE_ENTER当然是一个宏展开了,它其实就是include/<BR>net/profile.h里面的net_profile_enter函数,而NET_PROFILE_LEAVE是profile.h文<BR>件里面的net_profile_leave函数,有兴趣的看看把.:)帮我解疑.<BR>qdisc_head是一个Qdisc_head类型,是一个全局变量,看名字和处理顺序应该看作是一<BR>个Quick
DISCovery的队列,如果不为空的话我们就要运行qdisc_run_queues函数进行<BR>清理了,不过我并不清楚这个queue的意义,这个变量和函数都在net/sched/<BR>sch_generic.c里面获得的.大家看了给我答疑把,xixi<BR><BR>下面的东西挺简单的,我就不说了,值得注意的是:<BR>1.大家还记得ptype_all和ptype_base吗?就是调用dev_add_pack加入的数组啊,最终<BR>也调用了pt_prev->func(....)<BR>2.系统先处理ptype_all然后才处理的ptype_base<BR>3.每处理一个sk_buff如果超过1jiffies(x86上为50ms)就再等待下次调用<BR>4.sk_clone是一个快速拷贝,没有拷贝数据,只是复制头部而已<BR><BR>下次看packet的func函数处理把;)<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=67729&type=post"
target=_blank><IMG align=absMiddle alt=打印 border=0
src="[转载] Linux的TCP-IP协议栈阅读笔记(6) - 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=67729&type=thread"
target=_blank><IMG align=top border=0
src="[转载] Linux的TCP-IP协议栈阅读笔记(6) - 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协议栈阅读笔记(6) - China Linux Forum.files/greyflat.gif">平坦模式
</TD>
<TD class=navigation noWrap><A
href="http://www.linuxforum.net/forum/showthreaded.php?Cat=&Board=linuxK&Number=67729&page=192&view=collapsed&sb=5&o=all&vc=1"><IMG
align=absMiddle alt=树状模式,一封一封读 border=0
src="[转载] Linux的TCP-IP协议栈阅读笔记(6) - 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 + -