接字緩衝區函數 |
函數名 |
功能 |
函數形成 |
參數 |
描述 |
skb_queue_empty |
檢查隊列是否爲空 |
int skb_queue_empty (struct sk_buff_head * list) |
list爲隊列頭 |
如果隊列爲空返回真,否則返回假 |
|
skb_get |
引用緩衝區 |
struct sk_buff * skb_get (struct sk_buff * skb) |
skb爲要引用的緩衝區 |
對套接字緩衝區再引用一次,返回指向緩衝區的指針 |
|
kfree_skb |
釋放一個sk_buff |
void kfree_skb (struct sk_buff * skb) |
sk爲要釋放的緩衝區 |
刪除對一個緩衝區的引用,如果其引用計數變爲0,則釋放它 |
|
skb_cloned |
緩衝區是否是克隆的 |
int skb_cloned (struct sk_buff * skb) |
skb爲要檢查的緩衝區 |
如果以skb_clone標誌來產生緩衝區,並且是緩衝區多個共享拷貝中的一個,則返回真。克隆的緩衝區具有共享數據,因此在正常情況下不必對其進行寫。
|
|
skb_shared |
緩衝區是否是共享的 |
int skb_shared (struct sk_buff * skb) |
skb爲要檢查的緩衝區 |
如果有多於一個的人引用這個緩衝區就返回真。 |
|
skb_share_check |
檢查緩衝區是否共享的,如果是就克隆它 |
struct sk_buff * skb_share_check (struct sk_buff * skb, int pri) |
skb爲要檢查的緩衝區,pri爲內存分配的優先級 |
如果緩衝區是共享的,就克隆這個緩衝區,並把原來緩衝區的引用計數減1,返回新克隆的緩衝區。如果不是共享的,則返回原來的緩衝區。當從中斷狀態或全局鎖調用該函數時,pri必須是GFP_ATOMIC。 內存分配失敗則返回NULL。 |
|
skb_unshare |
產生一個共享緩衝區的拷貝 |
struct sk_buff * skb_unshare (struct sk_buff * skb, int pri); |
skb爲要檢查的緩衝區,pri爲內存分配的優先級 |
如果套接字緩衝區是克隆的,那麼這個函數就創建一個新的數據拷貝,並把原來緩衝區的引用計數減1,返回引用計數爲1的新拷貝。如果不是克隆的,就返回原緩衝區。當從中斷狀態或全局鎖調用該函數時,pri必須是GFP_ATOMIC。 內存分配失敗則返回NULL。 |
|
skb_queue_len |
獲得隊列的長度 |
__u32 skb_queue_len (struct sk_buff_head * list_) |
list_爲測量的鏈表
|
返回&sk_buff 隊列的指針。 |
|
__skb_queue_head |
在鏈表首部對一個緩衝區排隊 |
void __skb_queue_head (struct sk_buff_head * list, struct sk_buff * newsk) |
list爲要使用的鏈表, newsk爲要排隊的緩衝區。 |
在鏈表首部對一個緩衝區進行排隊。這個函數沒有鎖,因此在調用它之前必須持有必要的鎖。一個緩衝區不能同時放在兩個鏈表中。 |
|
skb_queue_head |
在鏈表首部對一個緩衝區排隊 |
void skb_queue_head (struct sk_buff_head * list, struct sk_buff * newsk) |
list爲要使用的鏈表, newsk爲要排隊的緩衝區。 |
在鏈表首部對一個緩衝區進行排隊。這個函持有鎖,因此可以安全地使用。一個緩衝區不能同時放在兩個鏈表中。 |
|
__skb_queue_tail |
在鏈表尾部對一個緩衝區排隊 |
void __skb_queue_tail (struct sk_buff_head * list, struct sk_buff * newsk) |
list爲要使用的鏈表, newsk爲要排隊的緩衝區。 |
在鏈表尾部對一個緩衝區進行排隊。這個函數沒有鎖,因此在調用它之前必須持有必要的鎖。一個緩衝區不能同時放在兩個鏈表中。 |
|
skb_queue_tail |
在鏈表尾部對一個緩衝區排隊 |
void skb_queue_tail (struct sk_buff_head * list, struct sk_buff * newsk) |
list爲要使用的鏈表, newsk爲要排隊的緩衝區。 |
在鏈表尾部對一個緩衝區進行排隊。這個函持有鎖,因此可以安全地使用。一個緩衝區不能同時放在兩個鏈表中。 |
|
__skb_dequeue |
從隊列的首部刪除一個緩衝區 |
struct sk_buff * __skb_dequeue (struct sk_buff_head * list) |
list爲要操作的隊列 |
刪除鏈表首部。這個函數不持有任何鎖,因此使用時應當持有適當的鎖。如果隊鏈表爲空則返回NULL,成功則返回首部元素。 |
|
skb_dequeue |
從隊列的首部刪除一個緩衝區 |
struct sk_buff * skb_dequeue (struct sk_buff_head * list) |
list爲要操作的隊列 |
刪除鏈表首部,這個函數持有鎖,因此可以安全地使用。如果隊鏈表爲空則返回NULL,成功則返回首部元素。 |
|
skb_insert |
插入一個緩衝區 |
void skb_insert (struct sk_buff * old, struct sk_buff * newsk) |
old爲插入之前的緩衝區,newsk爲要插入的緩衝區 |
把一個數據包放在鏈表中給定的包之前。該函數持有鏈表鎖,並且是原子操作。一個緩衝區不能同時放在兩個鏈表中。 |
|
skb_append |
追加一個緩衝區 |
void skb_append (struct sk_buff * old, struct sk_buff * newsk) |
old爲插入之前的緩衝區,newsk爲要插入的緩衝區 |
把一個數據包放在鏈表中給定的包之前。該函數持有鏈表鎖,並且是原子操作。一個緩衝區不能同時放在兩個鏈表中。 |
|
skb_unlink |
從鏈表刪除一個緩衝區 |
void skb_unlink (struct sk_buff * skb); |
Skb爲要刪除的緩衝區 |
把一個數據包放在鏈表中給定的包之前。該函數持有鏈表鎖,並且是原子操作。
|
|
_skb_dequeue_tail |
從隊尾刪除 |
struct sk_buff * __skb_dequeue_tail (struct sk_buff_head * list) |
List爲要操作的鏈表 |
從鏈表尾部刪除。這個函數不持有任何鎖,因此必須持以合適的鎖來使用。如果鏈表爲空,則返回NULL,成功則返首部元素。 |
|
skb_dequeue_tail |
從隊頭刪除 |
struct sk_buff * skb_dequeue_tail (struct sk_buff_head * list) |
List爲要操作的鏈表 |
刪除鏈表尾部,這個函數持有鎖,因此可以安全地使用。如果隊鏈表爲空則返回NULL,成功則返回首部元素。 |
|
skb_put |
把數據加到緩衝區 |
unsigned char * skb_put (struct sk_buff * skb, unsigned int len) |
skb爲要使用的緩衝區,len爲要增加的數據長度 |
這個函數擴充緩衝區所使用的數據區。如果擴充後超過緩衝區總長度,內核會產生警告。函數返回的指針指向所擴充數據的第一個字節。 |
|
skb_push |
把數據加到緩衝區的開始 |
unsigned char * skb_push (struct sk_buff * skb, unsigned int len); |
skb爲要使用的緩衝區,len爲要增加的數據長度 |
這個函數擴充在緩衝區的開始處緩衝區所使用的數據區。如果擴充後超過緩衝區首部空間的總長度,內核會產生警告。函數返回的指針指向所擴充數據的第一個字節。 |
|
skb_pull |
從緩衝區的開始刪除數據 |
unsigned char * skb_pull (struct sk_buff * skb, unsigned int len) |
skb爲要使用的緩衝區,len爲要刪除的數據長度 |
這個函數從鏈表開始處刪除數據,把騰出的內存歸還給首部空間。把指向下一個緩衝區的指針返回。 |
|
skb_headroom |
緩衝區首部空閒空間的字節數 |
int skb_headroom (const struct sk_buff * skb)
|
skb爲要檢查的緩衝區 |
返回&sk_buff首部空閒空間的字節數 |
|
skb_tailroom |
緩衝區尾部的空閒字節數 |
int skb_tailroom (const struct sk_buff * skb) |
skb爲要檢查的緩衝區 |
返回&sk_buff尾部空閒空間的字節數 |
|
skb_reserve |
調整頭部的空間 |
void skb_reserve (struct sk_buff * skb, unsigned int len) |
skb爲要改變的緩衝區,len爲要刪除的字節數 |
通過減少尾部空間,增加一個空&sk_buff的首部空間。這僅僅適用於空緩衝區。
|
|
skb_trim |
從緩衝區刪除尾部 |
void skb_trim (struct sk_buff * skb, unsigned int len); |
skb爲要改變的緩衝區,len爲新的長度 |
通過從尾部刪除數據,剪切緩衝區的長度。如果緩衝區已經處於指定的長度,則不用改變。 |
|
skb_orphan |
使一個緩衝區成爲孤兒 |
void skb_orphan (struct sk_buff * skb); |
skb是要成爲孤兒的緩衝區 |
如果一個緩衝區當前有一個擁有者,我們就調用擁有者的析構函數,使skb沒有擁有者。該緩衝區繼續存在,但以前的擁有者不再對其“負責”。 |
|
skb_queue_purge |
使一個鏈表空 |
void skb_queue_purge (struct sk_buff_head * list) |
list爲要騰空的鏈表 |
刪除在&sk_buff鏈表上的所有緩衝區。這個函數持有鏈表鎖,並且是原子的。 |
|
__skb_queue_purge |
使一個鏈表空 |
void __skb_queue_purge (struct sk_buff_head * list); |
list爲要騰空的鏈表 |
刪除在&sk_buff鏈表上的所有緩衝區。這個函數不持有鏈表鎖,調用者必須持有相關的鎖來使用它。 |
|
dev_alloc_skb |
爲發送分配一個skbuff |
struct sk_buff * dev_alloc_skb (unsigned int length) |
Length爲要分配的長度 |
分配一個新的&sk_buff,並賦予它一個引用計數。這個緩衝區有未確定的頭空間。用戶應該分配自己需要的頭空間。 如果沒有空閒內存,則返回NULL。儘管這個函數是分配內存,但也可以從中斷來調用。 |
|
skb_cow |
當需要時拷貝skb的首部 |
struct sk_buff * skb_cow (struct sk_buff * skb, unsigned int headroom) |
Skb爲要拷貝的緩衝區,headroom爲需要的頭空間 |
如果傳遞過來的緩衝區缺乏足夠的頭空間或是克隆的,則該緩衝區被拷貝,並且附加的頭空間變爲可用。如果沒有空閒的內存,則返回空。如果緩衝區拷貝成功,則返回新的緩衝區,否則返回已存在的緩衝區。 |
|
skb_over_panic |
私有函數 |
void skb_over_panic (struct sk_buff * skb, int sz, void * here) |
skb爲緩衝區,sz爲大小,here爲地址。 |
用戶不可調用。 |
|
skb_under_panic |
私有函數 |
void skb_under_panic (struct sk_buff * skb, int sz, void * here) |
skb爲緩衝區,sz爲大小,here爲地址。 |
用戶不可調用。 |
|
alloc_skb |
分配一個網絡緩衝區 |
struct sk_buff * alloc_skb (unsigned int size, int gfp_mask) |
size爲要分配的大小,gfp_mask爲分配掩碼 |
分配一個新的&sk_buff。返回的緩衝區沒有size大小的頭空間和尾空間。新緩衝區的引用計數爲1。返回值爲一緩衝區,如果失敗則返回空。從中斷分配緩衝區,掩碼只能使用GFP_ATOMIC的gfp_mask。 |
|
__kfree_skb |
私有函數 |
void __kfree_skb (struct sk_buff * skb) |
skb爲緩衝區 |
釋放一個sk_buff。釋放與該緩衝區相關的所有事情,清除狀態。這是一個內部使用的函數,用戶應當調用kfree_skb。 |
|
skb_clone |
複製一個sk_buff |
struct sk_buff * skb_clone (struct sk_buff * skb, int gfp_mask) |
skb爲要克隆的緩衝區,gfp_mask爲分配掩碼。 |
複製一個&sk_buff。新緩衝區不是由套接字擁有。兩個拷貝共享相同的數據包而不是結構。新緩衝區的引用計數爲1。如果分配失敗,函數返回NULL,否則返回新的緩衝區。如果從中斷調用這個函數,掩碼只能使用GFP_ATOMIC的gfp_mask。 |
|
skb_copy |
創建一個sk_buff的私有拷貝 |
struct sk_buff * skb_copy (const struct sk_buff * skb, int gfp_mask) |
skb爲要拷貝的緩衝區,gfp_mask爲分配優先級。 |
既拷貝&sk_buff也拷貝其數據。該函數用在調用者希望修改數據並需要數據的私有拷貝來進行改變時。失敗返回NULL,成功返回指向緩衝區的指針。 返回的緩衝區其引用計數爲1。如果從中斷調用,則必須傳遞的優先級爲GFP_ATOMIC。 |
|
skb_copy_expand |
拷貝並擴展sk_buff |
struct sk_buff * skb_copy_expand (const struct sk_buff * skb, int newheadroom, int newtailroom, int gfp_mask); |
skb爲要拷貝的緩衝區,newheadroom爲頭部的新空閒字節數,newtailroom爲尾部的新空閒字節數。 |
既拷貝&sk_buff也拷貝其數據,同時分配額外的空間。當調用者希望修改數據並需要對私有數據進行改變,以及給新的域更多的空間時調用該函數。失敗返回NULL,成功返回指向緩衝區的指針。 返回的緩衝區其引用計數爲1。如果從中斷調用,則必須傳遞的優先級爲GFP_ATOMIC。 |
本文來自:http://www.233.com/linux/fudao/20110119/140852604.html
感謝作者的分享