linux 内核 丢弃分片包,LINUX内核关于IP分片重组问题请教
最近研究學(xué)習(xí)IP分片重組,也拜讀了不少dx的閱讀理解。可還是有疑問,請(qǐng)教xdm。
源代碼:linux-2.4.26\linux-2.4.26\net\ipv4\ip_fragment.c
IP分片的重組大概經(jīng)過以下幾個(gè)函數(shù):
0/ ip_defrag
1/ ip_find-->ip_frag_create-->ip_frag_intern
2/ ip_frag_queue
3/ ip_frag_reasm
這里定義了一個(gè)結(jié)構(gòu),包括幾個(gè)重組狀態(tài)宏
-------------------------------------
/* Describe an entry in the "incomplete datagrams" queue. */
struct ipq {
struct ipq *next;? /* linked list pointers?? */
struct list_head lru_list; /* lru list member??? */
u32? saddr;
u32? daddr;
u16? id;
u8? protocol;
u8? last_in;
#define COMPLETE? 4
#define FIRST_IN? 2
#define LAST_IN?? 1
struct sk_buff *fragments; /* linked list of received fragments */
int? len;? /* total length of original datagram */
int? meat;
spinlock_t lock;
atomic_t refcnt;
struct timer_list timer; /* when will this queue expire?? */
struct ipq **pprev;
int? iif;
struct timeval stamp;
};
---------------------------
在處理過程當(dāng)中有一個(gè)狀態(tài)為COMPLETE(last_in),此狀態(tài)下如果再來后續(xù)分片都被認(rèn)為無效數(shù)據(jù)丟棄。可我就是沒有看懂什么條件下設(shè)置last_in狀態(tài)為COMPLETE呢?FIRST_IN/LAST_IN都容易理解的。通篇只在函數(shù)static struct ipq *ip_frag_intern(unsigned int hash, struct ipq *qp_in)
看到了對(duì)last_in != COMPLETE的賦值。
請(qǐng)研讀過的xd明示。謝謝了!
我只是看到幾處對(duì)last_in是否等于COMPLETE的判斷,而沒有看到什么地方確定所有分片已經(jīng)到齊而設(shè)置 last_in |= COMPLETE,不知道我是哪里出了問題,請(qǐng)各位朋友指點(diǎn)
總結(jié)
以上是生活随笔為你收集整理的linux 内核 丢弃分片包,LINUX内核关于IP分片重组问题请教的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三星rv411怎么u盘启动 三星RV41
- 下一篇: linux dlopen 内存,Linu