?? [轉載] linux的tcp-ip協議棧閱讀筆記(8) - china linux forum.htm
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0110)http://www.linuxforum.net/forum/showflat.php?Cat=&Board=linuxK&Number=67731&page=192&view=collapsed&sb=5&o=all -->
<HTML><HEAD><TITLE>[轉載] Linux的TCP/IP協議棧閱讀筆記(8) - China Linux Forum</TITLE>
<META content="text/html; charset=gb2312" http-equiv=Content-Type>
<META content="MSHTML 5.00.2920.0" name=GENERATOR></HEAD>
<BODY>
<CENTER><FONT color=red>著名軟件中國鏡像:</FONT> <A
href="http://apache.linuxforum.net/"><FONT color=red>Apache|</FONT></A> <A
href="http://php.linuxforum.net/"><FONT color=red>Php|</FONT></A> <A
href="http://debian.linuxforum.net/"><FONT color=red>Debian|</FONT></A> <A
href="http://mysql.linuxforum.net/"><FONT color=red>Mysql|</FONT></A> <A
href="http://proftpd.linuxforum.net/"><FONT color=red>Proftp|</FONT></A> <A
href="http://qmail.linuxforum.net/top.html"><FONT color=red>Qmail|</FONT></A> <A
href="http://samba.linuxforum.net/samba.html"><FONT color=red>Samba|</FONT></A>
<A href="http://www1.cn.squid-cache.org/"><FONT color=red>Squid|</FONT></A> <A
href="http://xfree86.linuxforum.net/"><FONT color=red>Xfree86|</FONT></A> <A
href="http://cpan.linuxforum.net/"><FONT color=red>CPAN|</FONT></A> <A
href="http://ldp.linuxforum.net/"><FONT color=red>LDP|</FONT></A> <A
href="http://gnu.linuxforum.net/"><FONT
color=red>GNU|</FONT></A></CENTER><BR><LINK
href="[轉載] Linux的TCP-IP協議棧閱讀筆記(8) - China Linux Forum.files/stylesheet2.css"
rel=stylesheet type=text/css><SPAN class=onbody>
<TABLE align=center border=0 cellPadding=3 cellSpacing=0 class=p9 width="95%">
<TBODY>
<TR align=right bgColor=#0099cc vAlign=center>
<TD align=left width="20%"><A
href="http://www.linuxforum.net/index.php"><FONT
color=#ffffff>中國Linux論壇首頁</FONT></A></TD>
<TD width="80%"><A
href="http://www.linuxforum.net/forum/ubbthreads.php"><FONT
color=#ffffff>技術論壇|</FONT></A><FON color="#FFFFFF" t> <A
href="http://www.linuxforum.net/docnew/index.php"><FONT
color=#ffffff>文章薈萃</FONT></A><FONT color=#ffffff>| <A
href="http://www.linuxforum.net/books/index.php"><FONT
color=#ffffff>藏經閣</FONT></A>| <A href="http://mail.linuxforum.net/"><FONT
color=#ffffff>會員信箱</FONT></A>| <A href="http://sf.linuxforum.net/"><FONT
color=#ffffff>項目計劃</FONT></A>| <A
href="http://www.linuxforum.net/poll2/index.php"><FONT
color=#ffffff>在線調查</FONT></A>| <A href="ftp://ftp.linuxforum.net/"><FONT
color=#ffffff>軟件倉庫</FONT></A>| <A
href="http://www.linuxforum.net/about.php"><FONT
color=#ffffff>關于本站</FONT></A>| </FONT></TD></TR></TBODY></TABLE><BR></SPAN>
<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>
<TD align=right class=menubar><A
href="http://www.linuxforum.net/forum/ubbthreads.php?Cat=">討論區列表</A>
| <A href="http://www.linuxforum.net/forum/search.php?Cat=">搜尋文章</A>
| <A
href="http://www.linuxforum.net/forum/newuser.php?Cat=">新用戶注冊</A> |
<A href="http://www.linuxforum.net/forum/login.php?Cat=">登入論壇</A> |
<A href="http://www.linuxforum.net/forum/online.php?Cat=">在線用戶</A> |
<A
href="http://www.linuxforum.net/forum/faq_chinese.php?Cat=">常見問題</A>
</TD></TR></TBODY></TABLE></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 cellPadding=0 cellSpacing=0 width="100%">
<TBODY>
<TR class=darktable>
<TD align=left width="33%"><SPAN class=catandforum><A
href="http://www.linuxforum.net/forum/ubbthreads.php?Cat=&C=4">Linux
高級應用</A> <BR> >> <A
href="http://www.linuxforum.net/forum/postlist.php?Cat=&Board=linuxK&page=192&view=collapsed&sb=5&o=all">Linux內核技術</A>
</SPAN></TD>
<TD align=middle width="33%">此話題閱讀次數: 624 </TD>
<TD align=right width="33%">
<TABLE border=0>
<TBODY>
<TR>
<TD class=navigation noWrap><IMG align=absMiddle alt=*
src="[轉載] Linux的TCP-IP協議棧閱讀筆記(8) - China Linux Forum.files/greyflat.gif">平坦模式
</TD>
<TD class=navigation noWrap><A
href="http://www.linuxforum.net/forum/showthreaded.php?Cat=&Board=linuxK&Number=67731&page=192&view=collapsed&sb=5&o=all&vc=1"><IMG
align=absMiddle alt=樹狀模式,一封一封讀 border=0
src="[轉載] Linux的TCP-IP協議棧閱讀筆記(8) - China Linux Forum.files/threaded.gif">樹狀模式</A>
</TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><BR>
<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=67731&type=thread"
target=_blank><IMG align=top border=0
src="[轉載] Linux的TCP-IP協議棧閱讀筆記(8) - China Linux Forum.files/printthread.gif">
打印</A> </TD></TR></TBODY></TABLE>
<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>
<TD class=darktable rowSpan=2 vAlign=top width="17%"><A
name=Post67731></A><A
href="http://www.linuxforum.net/forum/showprofile.php?Cat=&User=tommytang&Number=67731&Board=linuxK&what=showflat&page=192&view=collapsed&sb=5&o=all&fpart=1&vc=1">tommytang</A><BR><SPAN
class=small>(newbie)<BR>01/03/01 21:59<BR></SPAN></TD>
<TD class=subjecttable width="83%">
<TABLE border=0 class=subjecttable width="100%">
<TBODY>
<TR>
<TD align=left width="70%"><IMG height=15
src="[轉載] Linux的TCP-IP協議棧閱讀筆記(8) - China Linux Forum.files/book.gif"
width=15> <B>[轉載] Linux的TCP/IP協議棧閱讀筆記(8)</B> </TD>
<TD align=right width="30%"> </TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD class=lighttable width="83%"><BR>
<P class=post>發信人: AngelFalls (TRY IT), 信區: SysInternals<BR>標 題:
[轉載] Linux的TCP/IP協議棧閱讀筆記(8)<BR>發信站: 武漢白云黃鶴站 (Wed Oct 4 01:37:35
2000), 轉信<BR><BR>【 以下文字轉載自 Security 討論區 】<BR>【 原文由 AngelFalls 所發表
】<BR>我們已經知道了,如果使用socket(AF_SOCKET, ..)產生一個PACKET
SOCKET的話,<BR>dev_add_pack加入的函數是packet_rcv,下面是這個在net/packet/af_packet.c里<BR>面的函數:<BR>static
int packet_rcv(struct sk_buff *skb, struct device *dev, <BR>struct
packet_type *pt)<BR>{<BR>struct sock *sk;<BR>struct sockaddr_ll *sll
= (struct sockaddr_ll*)skb->cb;<BR><BR>sk = (struct sock *)
pt->data;<BR>//我們在packet_create中令data = sk了,remember?<BR><BR>if
(skb->pkt_type == PACKET_LOOPBACK) {<BR>kfree_skb(skb);<BR>return
0;<BR>}<BR><BR>skb->dev = dev;<BR><BR>sll->sll_family =
AF_PACKET;<BR>sll->sll_hatype =
dev->type;<BR>sll->sll_protocol =
skb->protocol;<BR>sll->sll_pkttype =
skb->pkt_type;<BR>sll->sll_ifindex =
dev->ifindex;<BR>sll->sll_halen = 0;<BR><BR>if
(dev->hard_header_parse)<BR>sll->sll_halen =
dev->hard_header_parse(skb, sll->sll_addr);<BR><BR>if
(dev->hard_header)<BR>if (sk->type !=
SOCK_DGRAM)<BR>skb_push(skb, skb->data -
skb->mac.raw);<BR>else if (skb->pkt_type ==
PACKET_OUTGOING)<BR>skb_pull(skb, skb->nh.raw -
skb->data);<BR><BR>if
(sock_queue_rcv_skb(sk,skb)<0)<BR>{<BR>kfree_skb(skb);<BR>return
0;<BR>}<BR>return(0);<BR>}<BR>在這個函數里面有個地方我很疑惑,那就是pkt_type屬性,不知道這個屬性是什么<BR>地方確定的,從網卡驅動->netif_rx->net_bh中間都沒有,而且甚至在net_bh函數<BR>中間就有if(skb->pkt_type==...)這樣的語句,說明在驅動中間就設置了,但是沒<BR>有找到,我faint了.這個屬性以后還會大量使用,還是很重要的.<BR><BR>這里還有幾個函數要說明:<BR>skb_pull在include/linux/skbuff.h中間:<BR>extern
__inline__ char *__skb_pull(struct sk_buff *skb, <BR>unsigned int
len)<BR>{<BR>skb->len-=len;<BR>return
skb->data+=len;<BR>}<BR><BR>extern __inline__ unsigned char *
skb_pull(struct sk_buff *skb, <BR>unsigned int len)<BR>{ <BR>if (len
> skb->len)<BR>return NULL;<BR>return
__skb_pull(skb,len);<BR>}<BR>不過是把頭部的數據空出來,相應調整數據頭部data的地址和長度.<BR><BR>同樣skb_push在include/linux/skbuff.h中間:<BR>extern
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -