skb->truesize,len,datalen,size,等的區別
套接字緩衝區有三種重要的資料型別:
1.struct sk_buff_head型別,管理套接字緩衝區
2.struct sk_buff型別,套接字緩衝區型別
3.struct skb_shared_info型別,管理套接字緩衝區的分片資訊
在alloc_skb()函式中
skb->truesize指緩衝區的總大小,即整個struct sk_buff skb的大小,所以當然不包括struct skb_shared_info型別。
skb->truesize=sizeof(struct sk_buff) + SKB_DATA_ALIGN(size)
說明:SKB_DATA_ALIGN(size)是在alloc_skb(size,gfp_mask)函式初始定義時的size的基礎上調整後的,通常把調整後的值再賦給size,代替原來的size。
即:size = SKB_DATA_ALIGN(size)
為什麼要調整呢?
因為X86 上為128 bytes,根據L1_CACHE_BYTES調整大小,補齊為128的整數倍;
所以SKB_DATA_ALIGN(size)的值比size的值要大。
初始化後:size的大小為head和end指標之間的大小
在用alloc_skb()函式分配緩衝區時,alloc_skb()建立了套接字緩衝區與struct skb_shared_info結構的關係。
用alloc_skb()函式分配的緩衝區大小為:
struct sk_buff + SKB_DATA_ALIGN(size) + struct skb_shared_info
這三個的大小之和。
skb->len是指資料長度(包括資料的包頭),即data,tail指標所指的部分。
當呼叫資料區的操作函式如:skb_put,skb_push,skb_pull,skb_trim來在資料區增加或去除協議的頭部,尾部時,即在增加或減少len的長度。
注意:headroom,tailroom,是當資料從協議棧的上層傳遞到下層時,可向這兩個區域填充協議欄位的內容。
協議欄位的內容並不是上面的協議的頭部或者尾部,
在struct sk_buff中,協議欄位的定義為:
unsigned short protocol //協議欄位
skb->datalen是指資料長度(不包括資料的包頭)
轉自 http://blog.chinaunix.net/uid-26029760-id-1746557.html
相關文章
- sql server中的一個坑-len與datalength區別SQLServer
- SIZE AUTO和SIZE SKEWONLY在gather_table_stats時的區別
- maxlength和size屬性區別
- java中size()和length區別Java
- Java中 length、length()、size()區別Java
- Input的size與maxlength屬性的區別
- 表空間uniform size和 autoallocate的區別ORM
- size resize與capacity reserve之間的區別
- JS的雙等和三等的區別JS
- List isEmpty()和size()==0 有什麼區別
- Android中 @和?區別以及?attr/**與@style/**等的區別Android
- java中FileInputStream,FileReader等的區別Java
- JavaScript兩個等號和三個等號區別JavaScript
- 等保、分保是什麼?等保與分保的區別有哪些?
- 等保二級和等保三級的三大區別講解
- 【等保小知識】等保與分保的三大區別彙總分析
- len(),lift(),right()不能正常識別中文的解決方法 (轉)
- Linux下/bin, /sbin, /usr/bin, /usr/sbin 等的區別Linux
- 引數為*&與*的區別以及二維陣列傳遞時列數不對等的區別陣列
- AUTOCAD——LEN命令
- size_t 資料型別的好處資料型別
- 什麼是等級保護?一級等保和三級等保有什麼區別?
- Buffer Cache Size(資料緩衝區)
- 網路安全中二級等保和三級等保有什麼區別?
- SQL LEN()函式用法SQL函式
- malloc,calloc,realloc等記憶體分配函式區別記憶體函式
- ConcurrentHashMap和oscache等物件快取有何區別HashMap物件快取
- len(x) 擊敗 x.len(),從內建函式看 Python 的設計思想函式Python
- 【等保小知識】等保與關保兩者之間有啥區別?
- 【網路安全小知識】二級等保和三級等保之間的區別有哪些?
- 【科普】等級保護與分級保護的區別和聯絡!
- 關於forName()、newInstance()、getMethod()、getClass()等區別的簡略說明
- 資料治理,辨析清楚制度、機制、流程等概念的區別很重要
- 裝飾器模式詳解(UML、原理、使用、與代理模式的區別等)模式
- 關於mssql中go等幾個關鍵字的用途及區別SQLGo
- C#基礎之==(雙等於號)與equals()區別C#
- MySQL explain 中 key_len的詳解MySqlAI
- Go 語言是如何計算 len() 的?Go